【问题标题】:fopen() [function.fopen]: php_network_getaddresses: getaddrinfo failed: Name or service not knownfopen() [function.fopen]:php_network_getaddresses:getaddrinfo 失败:名称或服务未知
【发布时间】:2014-03-18 11:23:38
【问题描述】:
$url=$row1['content_url'];
$file_handle = fopen($url,"r");
$line=fread($file_handle,400);
$line1 = wordwrap($line,400,"</br>" );
fclose($file_handle);

上面给出的是我在文本文件中读取数据的代码... 它在我的本地主机中运行良好...... 但它在 serevr 中不起作用.....

警告:fopen() [function.fopen]: php_network_getaddresses: getaddrinfo 失败:名称或服务未知 /home/content/08/11968108/html/dev/index.php 在第 57 行

警告:fread() 期望参数 1 是资源,布尔值在 /home/content/08/11968108/html/dev/gopi/index.php 在第 58 行

警告:fclose() 期望参数 1 是资源,布尔值在 /home/content/08/11968108/html/dev/gopi/index.php 在第 60 行

【问题讨论】:

  • 检查allow_url_fopen是否在您的实时服务器上启用。
  • $url 包含什么?
  • 网址不存在或无法访问。
  • Url 包含文本文件路径... (www.xyx.com/content/some.txt)

标签: php cakephp


【解决方案1】:

确保$url 中的网址包含包装器(如http)。

说明

fopen("www.domain.com","r");

这将查找名为 www.domain.com 的本地文件

fopen("http://www.domain.com","r");

这将尝试获取外部文件http://www.domain.com(如果启用了allow_url_fopen

但您的错误也可能表示旧的缓存 DNS 记录。如果可以,请尝试更改生产系统上的名称服务器(例如:8.8.8.8 来自 google 的名称服务器)。

【讨论】:

  • 是的,浏览器在保护用户免受 URL 访问方面做得很好:)
【解决方案2】:

如果您只需要处理抛出的警告(就像我一样),您可以这样做将它们变成可以处理的异常

set_error_handler(
  function ($err_severity, $err_msg, $err_file, $err_line, array $err_context) {
    // do not throw an exception if the @-operator is used (suppress)
    if (error_reporting() === 0) return false;

    throw new ErrorException( $err_msg, 0, $err_severity, $err_file, $err_line );
  },
  E_WARNING
);
try {
  $fp = fopen("http://example.com","r");
} catch (Exception $e) {
  echo $e->getMessage();
}
restore_error_handler();

基于此thread/question的解决方案。

【讨论】:

    猜你喜欢
    • 2017-02-21
    • 2013-12-02
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 2016-06-07
    • 2017-08-13
    • 2021-02-27
    相关资源
    最近更新 更多