【PHP Phalcon】Operation timed out タイムアウトを解消

Phalcon

PHPフレームワークのPhalconを使って開発をしています。

最近、ビッグデータのパフォーマンス検証のためローカルに大容量データの検証環境作成して粛々とテストしています。。

そこで、タイムアウト発生しまくりなのですが、設定ファイルに関してすこし手こずったので忘れないうちにメモ。

スポンサーリンク

前置き

curlを使ったhttpリクエストにPhalconの「incubator」というライブラリを使用しています

GitHub - phalcon/incubator: Incubator adapters/functionality for the Phalcon PHP Framework
Incubator adapters/functionality for the Phalcon PHP Framework - GitHub - phalcon/incubator: Incubator adapters/functionality for the Phalcon PHP Framework

※ちなみに、ここではincubatorの導入方法は割愛しますが、導入方法に関しては以下サイトがわかりやすかったです。

phalcon phpのincubatorでcurlを使ったバッチ処理(Task)を書いてみる - Qiita
概要 phalcon phpの検証中です。 curlを使ったhttpリクエストとかってどうやるんだろ?と思い、調べてみました。 公式ドキュメントを見ると、Requestクラスは存在するのですが、 これはリクエストパラメータの取得...

事象について

事象としては「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の設定が適応されないこともあるんですね(当然といえば当然か。。)

ケースバイケースで当てくらいはつけられるようになっておこう。。


以上となります。

タイトルとURLをコピーしました