0
http://!@#$%^&*().com

これは無効なURLのようですが、実際にはブラウザは無効なURLと言っています。

しかし、file_get_contents(XAMPP)を介してこのURLを取得すると、「500 Internal Server Error」という例外が発生します。このURLが存在しないため、404が取得されないのはなぜですか。

私が使用している応答を確認するには

$http_response_header

これが私のコードです:

$url = "http://!@#$%^&*().com";
$contents = @file_get_contents($url);   
print_r($http_response_header);

同じものを別のマシン(WAMP)で実行すると$http_response_header、未定義の変数であると表示されます。

誰かがここで何が問題なのか考えていますか?

4

2 に答える 2

1

呼び出しでエラーを抑制してfile_get_contentsいます。入力したドメインは実際には無効であり、関数呼び出しはfalseを返し、次の警告をトリガーします

file_get_contents(http://.@#$%^&*().com): failed to open stream: operation failed

ドメインが無効であり、httpリクエストが送信されない可能性があるため、404は取得されません。したがって、$http_response_headerは空です。

たぶん、XAMPPとWAMPのOSまたはPHPバージョンの違いが、なぜそれらが異なる動作をするのかを説明していますか?

私のアドバイスは、最初にfile_get_contentsの戻り値をチェックし、それがfalseでない場合にのみ、応答ヘッダーの検査を続行することです。

于 2012-12-19T10:27:59.293 に答える
0

404ドメインが存在しないため、取得できません。有効なドメインを使用してみてください。使用http://.@#$%^&*().comすると戻りfailed to open stream: operation failedますが、有効なドメインは戻りますfailed to open stream: HTTP request failed

一方はHTTPリクエストが失敗した場合にのみ、HTTPエラーが発生する可能性があることoperation failedに注意してくださいHTTP request failed

error_reporting(E_ALL);
ini_set("display_errors", "On");

$url = "http://stockoverflow.com/xxxx"; // URL does not exist 
$response = @file_get_contents($url);
var_dump($response,$http_response_header);

出力

boolean false
array (size=7)
  0 => string 'HTTP/1.1 404 Not Found' (length=22)  <--- you get your 404
  1 => string 'Content-Type: text/html' (length=23)
  2 => string 'Server: Microsoft-IIS/7.5' (length=25)
  3 => string 'X-Powered-By: ASP.NET' (length=21)
  4 => string 'Date: Wed, 19 Dec 2012 10:26:20 GMT' (length=35)
  5 => string 'Connection: close' (length=17)
  6 => string 'Content-Length: 1245' (length=20)
于 2012-12-19T10:27:38.423 に答える