我使用下面的PHP:PHP使用simplexml_load_file赶上403
$xml = simplexml_load_file($request_url) or die("url not loading");
我用:
$status = $xml->Response->Status->code;
要检查响应的状态。 200一切都好,继续。
但是,如果我得到一个403访问被拒绝的错误,我该如何在PHP中捕获这个,这样我可以返回一个用户友好的警告?
我使用下面的PHP:PHP使用simplexml_load_file赶上403
$xml = simplexml_load_file($request_url) or die("url not loading");
我用:
$status = $xml->Response->Status->code;
要检查响应的状态。 200一切都好,继续。
但是,如果我得到一个403访问被拒绝的错误,我该如何在PHP中捕获这个,这样我可以返回一个用户友好的警告?
要检索来自simplexml_load_file()
的调用的HTTP响应代码,我知道的唯一方法是使用PHP的鲜为人知的$http_response_header
。这个变量被自动创建为一个包含每个响应头的数组,每次你通过HTTP包装器发出一个HTTP请求。换句话说,每次你使用simplexml_load_file()
或file_get_contents()
与开始的URL的“http://”
您可以查看其内容与诸如
print_r()
$xml = @simplexml_load_file($request_url);
print_r($http_response_header);
在你的情况,不过,你可能想要单独检索XML,然后测试您是否得到4xx响应,如果不是,请将正文传递给simplexml_load_string()
。例如:
$response = @file_get_contents($request_url);
if (preg_match('#^HTTP/... 4..#', $http_response_header[0]))
{
// received a 4xx response
}
$xml = simplexml_load_string($response);
您必须使用类似the cURL module或the HTTP module的文件来获取文件,然后使用它们提供的功能来检测HTTP错误,然后将字符串从它们传递到simplexml_load_string。
我应该更清楚一点 - 虽然这有效,并允许我捕捉错误并停止脚本尝试做更多的事情。我仍然收到默认警告消息: 警告:file_get_contents(http://domain.com)[function.file-get-contents]:无法打开流:HTTP请求失败! HTTP/1.0 403 Forbidden 捕捉它们的原因是我提出了几个请求,并希望在发生错误时干净地捕捉错误,并提供用户友好的警告而不是默认值。 – Scoobler 2010-01-25 01:06:38
然后您使用静音操作符@如更新后的代码片段中所示。 http://docs.php.net/manual/en/language.operators.errorcontrol.php – 2010-01-25 01:49:52