【问题标题】:file_get_contents and error codesfile_get_contents 和错误代码
【发布时间】:2012-01-02 12:36:36
【问题描述】:

我正在使用file_get_contents 从网上下载一个文件。 有时我会收到 503 Service Unavailable404 Not Found

警告:file_get_contents(http://somewhereoverinternets.com) [function.file-get-contents]:无法打开流:HTTP 请求 失败的! HTTP/1.0 503 Service Unavailable in somesourcefile.php 在线 20

我怎样才能得到这个错误代码 - 503 ? 404、200? 为这些情况制定流程。

【问题讨论】:

标签: http header http-status-code-404 file-get-contents


【解决方案1】:

改用 curl:

function get_data($url)
{
  $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch,CURLOPT_URL,$url);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
  $data = curl_exec($ch);

  if(!curl_errno($ch)){ 
     return $data;
  }else{
    echo 'Curl error: ' . curl_error($ch); 
  }
curl_close($ch);
}

【讨论】:

  • 只卷曲?嘿,这很容易使用 file_get_contents。无论如何,感谢您的回答。
  • 嗨@Al-Punk - 在这个例子中 curl 对 file_get_contents 有什么好处? (总的来说,很明显 curl 更健壮。)
  • @itarato file_get_contents 是一种完成这项工作的简单方法。 cURL 有很多选项可以优化您的请求。将 file_get_contents 想象成公共交通工具,它可以带你去某个地方,想象一下法拉利的 curl 速度更快,让你在旅途中获得更多乐趣。
  • 谢谢@Al-Punk 我想知道有什么不同。也许它有不同的超时,或请求标头等。非常感谢;)
  • @Al-Punk 你有任何与你声称 Curl 更快有关的参考资料吗?
【解决方案2】:

您实际上可以在使用file_get_contents 时获得所需的标题。这些标头在 PHP 在全局范围内创建的数组 $http_response_header 中可用。

例如以下代码(其中 URI 指向本地服务器上不存在的资源):

$contents = @file_get_contents('http://example.com/inexistent');
var_dump($http_response_header);

给出以下结果:

array(8) {
  [0]=>
  string(22) "HTTP/1.1 404 Not Found"
  [1]=>
  string(22) "Cache-Control: private"
  [2]=>
  string(38) "Content-Type: text/html; charset=utf-8"
  [3]=>
  string(25) "Server: Microsoft-IIS/7.0"
  [4]=>
  string(21) "X-Powered-By: ASP.NET"
  [5]=>
  string(35) "Date: Thu, 28 Mar 2013 15:30:03 GMT"
  [6]=>
  string(17) "Connection: close"
  [7]=>
  string(20) "Content-Length: 5430"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 2013-06-12
    • 2014-09-14
    • 2011-02-27
    • 1970-01-01
    • 2011-12-15
    相关资源
    最近更新 更多