PHPフレームワークのPhalconを使って開発をしています。
最近、ビッグデータのパフォーマンス検証のためローカルに大容量データの検証環境作成して粛々とテストしています。。
そこで、タイムアウト発生しまくりなのですが、設定ファイルに関してすこし手こずったので忘れないうちにメモ。
前置き
curlを使ったhttpリクエストにPhalconの「incubator」というライブラリを使用しています
※ちなみに、ここではincubatorの導入方法は割愛しますが、導入方法に関しては以下サイトがわかりやすかったです。
事象について
事象としては「Operation timed out after 30008 milliseconds with 0 out of -1 bytes received」が発生していました。
自分のあっさーい認識だとタイムアウト発生 => php.iniの「max_execution_time」または「default_socket_timeout」をちょちょいと調整して、解決する流れだとタカを括ってましが、あれ?エラーが解消されない。。
察しの通り今回はincubatorからの調整が必要でした。
解決方法
incubatorのCurl.phpにキーとなる設定ファイルあり。
>incubator\Library\Phalcon\Http\Client\Provider\Curl.php
ここにprivate function initOptionsがあるのでこの中をいじってあげましょう。
private function initOptions()
{
$this->setOptions([
CURLOPT_RETURNTRANSFER => true,
CURLOPT_AUTOREFERER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_MAXREDIRS => 20,
CURLOPT_HEADER => false,
CURLOPT_PROTOCOLS => CURLPROTO_HTTP | CURLPROTO_HTTPS,
CURLOPT_REDIR_PROTOCOLS => CURLPROTO_HTTP | CURLPROTO_HTTPS,
CURLOPT_USERAGENT => 'Phalcon HTTP/' . self::VERSION . ' (Curl)',
CURLOPT_CONNECTTIMEOUT => 120, // 30 =>120
CURLOPT_TIMEOUT => 120, // 30 =>120
]);
}
ポイントは以下の二つのプロパティを調整すること。
- CURLOPT_CONNECTTIMEOUT
- CURLOPT_TIMEOUT
ここではもともと、それぞれ「30」が代入されていましたが、「120」に変更して「Operation timed out after 30008 milliseconds with 0 out of -1 bytes received」が解消されました。
導入ライブラリによってphp.iniの設定が適応されないこともあるんですね(当然といえば当然か。。)
ケースバイケースで当てくらいはつけられるようになっておこう。。
以上となります。