【问题标题】:php: file_get_contents returns empty stringphp:file_get_contents 返回空字符串
【发布时间】:2015-10-24 20:54:19
【问题描述】:

我正在尝试使用 file_get_contents 函数在屏幕上打印图像 url 的内容:

<?php
$image2 = "http://www.example.com";
echo file_get_contents( $image2 );
?>

运行时,页面加载大约需要 15-20 秒,然后什么也不显示。我也尝试使用 cURL,它给出了相同的结果。有人对如何解决此问题有任何建议吗?

这是我尝试过的 curl 代码:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.example.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$contents=curl_exec($ch);
curl_close($ch);
echo $contents;
?>

运行时,页面会一直加载,直到服务器取消请求。

【问题讨论】:

  • 当您使用“file_get_contents is not”时,存在一些错误处理问题。如果有效,则有效,如果无效,则可能需要时间找出原因。在这种情况下,您可以尝试将其替换为 curl,这可以为您提供有关问题所在的更多详细信息。
  • 向浏览器发送正确的Content-Type: image/jpeg 标头。可能默认标头是text/html,所以浏览器无法理解。
  • 您应该在客户端检索图像,只需返回 URL。此外,关闭 PHP 标记 (?&gt;) 会导致换行符和之后的其他代码附加到图像中,这不是您想要的,也是 PSR 编码指南禁止它的原因。最后,你如何确定它返回一个空字符串?

标签: php curl file-get-contents


【解决方案1】:

file_get_contents 像许多 PHP 函数一样,在失败时返回 false。 false is not echoed 到输出,这就是为什么你看不到任何东西,好像回显了一个空字符串。

将结果存储在变量中,并使用=== 运算符检查错误。

$file = file_get_contents($image2);
if ($file === false) {
  // Check the error and handle as you like.
} else {
  echo $image2;
}

不幸的是,这只是告诉你是否有错误,而不是哪个错误。幸运的是,您也使用了cUrl。还有curl_errorcurl_errno,您可以使用它们来获取错误本身的更详细描述。通常这会立即解决问题。

此时我的怀疑:通常我会认为file_get_contents的失败与allow-url-fopen的设置有关,但现在延迟20秒,并且cUrl表现出相同的行为,表明你可能会超时。可能是您的防火墙不允许您执行这样的请求。

【讨论】:

  • 它在免费主机服务器上运行,这可能是原因吗?
  • 可以,但您应该尝试curl_error()(使用 cUrl 版本时)以获取额外的错误信息。 file_get_contents 不会向您显示该信息。
【解决方案2】:

鉴于您提到您的脚本在免费主机服务器上运行。

大多数免费托管服务器都禁用了 file_get_contents() 功能。检查免费托管服务器的帮助部分,我非常有信心会在那里提到它已被禁用。

【讨论】:

  • 这无法解释漫长的等待时间和使用 curl 时的相同行为。
猜你喜欢
  • 2014-03-25
  • 2020-01-27
  • 2020-07-11
  • 2015-05-25
  • 2011-05-09
  • 1970-01-01
  • 2012-07-20
  • 2011-12-15
  • 2020-11-23
相关资源
最近更新 更多