サイトを新しいドメインに移動した後、file_get_contentsで奇妙な問題が発生しています。新しいSSL証明書を機能させるには、(Pleskを使用して)新しいドメインとIPアドレスを設定する必要がありました。これで、同じドメインでスクリプトを呼び出すfile_get_contentsから次のことがわかります。
ストリームを開けませんでした:HTTPリクエストに失敗しました! HTTP/1.1 404が見つかりません
別のサーバーでfile_get_contentsを使用して同じURLを呼び出すと正常に動作し、失敗したサーバーからwww.google.comを呼び出すと動作するので、同じサーバーでURLを呼び出すだけのようです!
I file_get_contents /サーバーのサーバーの(インデックスページ)からサーバーの2つの異なるSSL証明書を持つ2つのIPを持つことに関係があるかもしれないと感じています私はplesk「これは新しいドメインです」ページを取得しますそのため、Apacheは、自身のサーバーから呼び出されたときに適切な仮想ホストを検索しません。
明確にするには(うまくいけば!):
ドメインをホストしているサーバー上:
file_get_contents('https://mydomain.com?limit=4&offset=0&s_date=2012-02-05&e_date=2012-03-13&order=release_date&dir=desc&cid=12');
「ストリームのオープンに失敗しました:HTTPリクエストに失敗しました!HTTP/1.1 404 Not Found」
file_get_contents('http://www.google.com');
正しく動作します
別のサーバー上:
file_get_contents('https://mydomain.com?limit=4&offset=0&s_date=2012-02-05&e_date=2012-03-13&order=release_date&dir=desc&cid=12');
正常に動作します。
Sslをオフにしようとしましたが、まだ同じ問題が発生します。
自宅の小さなテストサーバーで作業しているときにも、この問題が発生しました。ドメイン名は外部IPアドレスに解決され、リクエストが送信されます。ただし、リクエストはネットワーク内から送信されるため、ルーターはリクエストを通常のリクエストとして認識しません。おそらく、それを構成するためのWebインターフェースがあり、独自の管理システムからページを返そうとしますが、指定したパスでは見つかりません。
その場合、私はWindows PCで作業していたので、テストしているドメインをhosts
ファイルに追加し、IPアドレス(またはサーバー(同じネットワーク内の別のマシンの場合)。 Linuxでも同様の解決策があるはずです。
問題はPHPまたはサーバーではなく、ルーターです。
ほとんどのホスティングは、file_get_contents()
を使用して外部URLからデータをロードできる_furl_open
_パラメーターをブロックするようになりました。
[〜#〜] curl [〜#〜] または Guzzle のようなPHP
クライアントライブラリを使用できます。
警告を処理するだけが必要な場合(URLが見つからない場合)、 Warnings を Exceptions :
set_error_handler(
function ($err_severity, $err_msg, $err_file, $err_line, array $err_context) {
// do not throw an exception if the @-operator is used (suppress)
if (error_reporting() === 0) return false;
throw new ErrorException( $err_msg, 0, $err_severity, $err_file, $err_line );
},
E_WARNING
);
try {
$contents = file_get_contents($your_url);
} catch (Exception $e) {
echo $e->getMessage();
}
restore_error_handler();
これに基づく解決策 thread/question 。
これを試してみてください:
file_get_contents('https://mydomain.com?'.urlencode('limit=4&offset=0&s_date=2012-02-05&e_date=2012-03-13&order=release_date&dir=desc&cid=12'));