当前位置: 首页 > 知识库问答 >
问题:

PHP文件\u获取\u内容

章越
2023-03-14

PHP/Apache2中的文件获取内容是从Facebook获取用户图片。直到最近,它一直运转良好。现在,它总是在一分钟后超时,在我的Apache2 error.log中有以下错误:

PHP警告:文件\u获取\u内容(https://graph.facebook.com/999999999/picture?width=200):无法打开流:连接超时

下面是代码(我最近添加了$context以查看它是否能正常工作,但没有):

$context = stream_context_create(array('https' => array('header'=>'Connection: close\r\n')));
$fbprofileimage = file_get_contents('https://graph.facebook.com/'.$id.'/picture?width=100',false,$context);

我试过卷曲,但不起作用:

$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL,'http://graph.facebook.com/'.$id.'/picture?width=100');
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'StockBet');
$fbprofileimage = curl_exec($curl_handle);
curl_close($curl_handle);

我发现了那个文件的内容

以下工作:

$context = stream_context_create(array('https' => array('header'=>'Connection: close\r\n')));
$fbprofileimage = file_get_contents('https://fm.cnbc.com/applications/cnbc.com/resources/img/editorial/2017/08/03/104629909-GettyImages-630953738-bitcoin.240x160.jpg?v=1501760634',false,$context);

$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL,'https://fm.cnbc.com/applications/cnbc.com/resources/img/editorial/2017/08/03/104629909-GettyImages-630953738-bitcoin.240x160.jpg?v=1501760634');
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'StockBet');
$fbprofileimage = curl_exec($curl_handle);
curl_close($curl_handle);

上述代码还可以获取以下图像文件:

  • https://b.thumbs.redditmedia.com/SSGv_d2P6ymZVIq8Bm5IVqpcz6WZioCfbRh5rxMPcTc.jpg(Reddit)
  • https://try.alexa.com/wp-content/uploads/2017/01/alexa-logo.png
  • https://ir.ebaystatic.com/rs/v/fxxj3ttftm5ltcqnto1o4baovyl.png
    (eBay)
  • https://images-na.ssl-images-amazon.com/images/G/01/Gateway/Unrec/T2/Amazon_GW_DesktopShoveler_5_200x200.CB503347722.png
  • https://bitcointalk.org/useravatars/avatar_7110.jpghttps://try.alexa.com/wp-content/uploads/2017/01/alexa-logo.png

上述代码无法获取以下图像文件:

  • https://www.google.ca/images/branding/googlelogo/2x/googlelogo_color_120x44dp.png
  • https://s.yimg.com/uu/api/res/1.2/7rUl71NcpOwqZeJexHuZhA--/Zmk9c3RyaW07aD0xOTM7cHlvZmY9MDtxPTk1O3c9MjIwO3NtPTE7YXBwaWQ9eXRhY2h5b24-/http://media.zenfs.com/en-US/homerun/aol_com_127/ce17fc9999cd894bf3a3dac1416b3230(雅虎)
  • https://c.disquscdn.com/next/a0cd712/marketing/assets/img/brand/disqus-logo-blue.svg(Disqus)
  • https://pbs.twimg.com/profile_images/464794058229964800/uwlkErTI_bigger.png(推特)
  • https://scontent-yyz1-1.xx.fbcdn.net/v/t45.1600-4/c0.31.284.149/p284x149/21337242_6083114387812_5783480223513182208_n.png?oh=3c78c007377ee96b844e91843dfdfddb

有人知道为什么我可以从一些网站得到图像文件,而不是其他的吗?

共有1个答案

范瀚昂
2023-03-14

出于从Facebook获取用户图片的目的,我使用以下代码使其正常工作:

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  // need confirmed
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);  // need confirmed.  I think this is key, as Facebook redirects to another URL and we need to follow
        //curl_setopt($ch, CURLOPT_ENCODING,"");  // not needed confirmed
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1);  // need confirmed
        curl_setopt($ch, CURLOPT_TIMEOUT,1);  // need confirmed
        curl_setopt($ch, CURLOPT_FAILONERROR,true);  // not needed confirmed
        //curl_setopt($ch, CURLOPT_VERBOSE, true);  // not needed confirmed
        //curl_setopt($ch, CURLINFO_HEADER_OUT, true);  // not needed confirmed
        curl_setopt($ch, CURLOPT_HEADER, true);  // need confirmed
        $fbprofileimage = curl_exec($ch);   
        if (curl_errno($ch)){
            echo 'Retreive Base Page Error: ' . curl_error($ch);
        }
        else {
          //$info = rawurldecode(var_export(curl_getinfo($ch),true));
         // Get the cookies:
          $skip = intval(curl_getinfo($ch, CURLINFO_HEADER_SIZE)); 
          //$responseHeader= substr($fbprofileimage,0,$skip);
          $fbprofileimage= substr($fbprofileimage,$skip);    // need confirmed
          //echo "HEADER: $responseHeader\n";   // causes error
          //echo "\n\nINFO: $info\n\nDATA: $fbprofileimage";  // causes error
        }               

我认为关键在于:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 

因为当你https://graph.facebook.com/999999999/picture?width=200 (其中999999999是用户的ID),Facebook重定向到另一个URL。

 类似资料:
  • 我正在使用php执行一个远程url,使用文件内容。如果file_get_contents检索到的内容不是空的,那么我会回显一条消息,说是complete。 然而,远程网址有时可能需要一点时间来加载,因为这整个PHP页面需要很长时间来加载。当它完成时,显示结果为完成或错误 谢谢

  • 我已经创建了一个索引。MAMP中的php页面。 我的索引。php的读取方式与下面的完全相同。我通过localhost:8888访问它。 然而,它并没有像我相信的那样从这个页面返回html源代码,而是返回http://stackoverflow.com 作为一个常规网页,就像你现在看到的网页一样。 我的MAMP使用PHP 5.5.10。user_agent,allow_url_fopen。 我很困惑

  • 我们正在使用composer用Satis升级依赖项。在最近的服务器升级之后,我们无法这样做。缩小可能的原因,我们发现,file_get_contents php函数在尝试建立ssl连接时失败。 我们正在使用以下脚本测试ssl: 这是抛出的: PHP警告:file\u get\u contents():无法设置本地证书链文件“%home/work/”。ssl/deployer。pem′;检查您的ca

  • 我已经阅读了php的手册页面上的file_get_contents函数,它没有说明任何关于如何file_get_contents行为关于php的文件锁定。然而,在评论部分,用户克里斯建议 file_get_内容通常不考虑PHP的群集锁定,即建议锁定。 您可以使用一些额外的代码来请求共享锁,例如... 我已经成功地测试过了。我还测试了即使文件已锁定专门有可能有另一个php进程通过读取文件,因为注释会

  • 我在使用file\u get\u内容与$\u get组合时遇到问题。例如,我尝试使用文件\u get\u内容加载以下页面: https://bing.com/?q=how 打领带 如果我像这样加载它,页面加载正常: http://localhost/load1.php 然而,当我这样加载它时,我有问题: http://localhost/load2.php?url=https//bing.com/

  • PHP不遵守上载\u最大\u文件大小 详细信息:使用 和. conf中搜索grep-inrupload_max_filesize,只返回12M值。搜索 /etc/httpd/conf/ /etc/httpd/conf.d/显然是虚拟主机的根。在grep返回0结果的虚拟主机中没有特殊设置。