2016-04-05 20 views
0

MySocietyのEveryPoliticianからJSONファイルをダウンロードするPHP Webサイトを構築しています。これらのファイルのうちのいくつかは小さく、他は超大規模です。ここで私が作っている、典型的な要求の2つの例です:PHP file_get_contents大きなファイルに504を返します

$g = file_get_contents("https://cdn.rawgit.com/everypolitician/everypolitician-data/65c4534/data/US_Virgin_Islands/Legislature/ep-popolo-v1.0.json"); 

そして、私が要求されているため、ファイルの小規模であると信じてい

$g = file_get_contents("https://cdn.rawgit.com/everypolitician/everypolitician-data/65c4534/data/UK/Commons/ep-popolo-v1.0.json"); 

最初の行が正常に動作しますが、しかし、 Gateway Timeoutエラー(504)を返す前に、2番目の行がブラウザで永久にロードされます。

私のブラウザで2番目のURLを指し示すと、ブラウザはうまくロードされます(ただし、数秒後にはかなり大きい)。現時点では、スクリプトはローカルマシン上で実行されているため、帯域幅やインターネットの速度に違いはありません。ご覧のとおり、両方のファイルはGitHubからのものです。

もう2つの行が実際には数日前に一度動作したということです。

これはPHPのfile_get_contents()の単なる制限ですか? file_get_contents()を使用して回避する方法はありますか、この場合はさらにうまくいく別のライブラリがありますか?

+2

カールがあるのに役立ちますより堅牢で設定可能なファイル_get_contents –

+0

と[Guzzle](https://packagist.org/packages/guzzlehttp/guzzle)は、カールの周りのユーザーフレンドリーなラッパーです。 – Sammitch

答えて

1

次のようなデフォルトのソケットのタイムアウトを設定してみてください:

ini_set('default_socket_timeout', 360); 

の接続を試行するのfile_get_contents()6分を与えることになります。また、あなたはコンテキストの配列を作成し、INI値ALAを変更する必要はありませんでしたので、それを作るだろうのfile_get_contents()関数に沿って、それを渡すことができます。

$context = stream_context_create(array( 
    'http' => array( 
     'timeout' => 360 
     ) 
    ) 
); 
file_get_contents("https://cdn.rawgit.com/everypolitician/everypolitician-data/65c4534/data/UK/Commons/ep-popolo-v1.0.json", 0, $context); 

希望これは

関連する問題