PHPフレームワークのPhalconを使って開発をしています。
最近、ビッグデータのパフォーマンス検証のためローカルに大容量データの検証環境作成して粛々とテストしています。。
そこで、タイムアウト発生しまくりなのですが、設定ファイルに関してすこし手こずったので忘れないうちにメモ。
前置き
curlを使ったhttpリクエストにPhalconの「incubator」というライブラリを使用しています
※ちなみに、ここではincubatorの導入方法は割愛しますが、導入方法に関しては以下サイトがわかりやすかったです。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9cGhhbGNvbiUyMHBocCVFMyU4MSVBRWluY3ViYXRvciVFMyU4MSVBN2N1cmwlRTMlODIlOTIlRTQlQkQlQkYlRTMlODElQTMlRTMlODElOUYlRTMlODMlOTAlRTMlODMlODMlRTMlODMlODElRTUlODclQTYlRTclOTAlODYlMjhUYXNrJTI5JUUzJTgyJTkyJUU2JTlCJUI4JUUzJTgxJTg0JUUzJTgxJUE2JUUzJTgxJUJGJUUzJTgyJThCJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmcz1jYWE1MDA5NzRhMTIwZDJjNTg5OWQ5ODhkOGFiZTExNg&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBtb25oYW4mdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPTI1ZGU1ZjZhNzQ3NWE2NDRiODgxNzBiZTkzZWJjZDZh&blend-x=142&blend-y=486&blend-mode=normal&s=b127cc99a7f4f158e0c4b1b8fa60788a)
事象について
事象としては「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の設定が適応されないこともあるんですね(当然といえば当然か。。)
ケースバイケースで当てくらいはつけられるようになっておこう。。
以上となります。