【问题标题】:PHP fopen function timed out?PHP fopen 函数超时?
【发布时间】:2009-05-19 09:33:25
【问题描述】:

知道如果文件在我的服务器上并且我知道 url 是正确的,为什么 fopen 会超时?

更新:对不起,我应该提到这是在 php.ini 中。 代码是:

fopen($url, 'r');

如果我输入文件的相对路径,它会起作用,但如果 $url 是我的服务器中的 url,则不会(但它适用于 google.com)。感谢您的帮助。

阿莱特尼克的回答是对的。只有当我通过以太网接口访问我自己的服务器文件时才会出现此问题。我怎样才能解决这个问题?我需要能够从以太网接口访问该文件,因为 url 是动态加载的(它是从 wordpress cms 生成的,所以从技术上讲,该 url 在我的服务器上并不作为文件存在)

【问题讨论】:

  • 你问的是C函数fopen吗?如果是这样,则 fopen 用于打开文件,而不是 url。 “超时”是什么意思?
  • 正如尼尔所说,您需要添加更多详细信息。不清楚你在说什么功能,甚至没有说你正在使用哪种编程语言(标记不足)。

标签: php fopen


【解决方案1】:

你可以使用 ini_set('default_socket_timeout',2); 在打开 fopen $url 之前。这实际上设置了默认的套接字连接超时而不响应。 Stream_set_timeout 在通过 fopn 或套接字打开函数建立的流上设置超时。 试试这个可能对你有帮助。

【讨论】:

  • 对于 NO 限制 init_set('default_socket_timeout',-1)
  • @VirgiliGarcia 你在 init_set -> ini_set 中有错字。但后来它工作正常...... thx
【解决方案2】:

您似乎正在尝试使用 HTTP 协议从同一服务器上运行的程序从您自己的服务器下载文件?

如果是这样,超时问题很可能与 Web 服务器或网络配置有关。超时通常只会发生,因为:

  1. 服务器确实需要很长时间才能发回答案,或者
  2. TCP 连接被阻塞

例如,如果这些查询来自以太网接口,您的本地防火墙规则可能只允许访问www.example.com,但本地建立的连接会尝试通过环回接口。

【讨论】:

  • 哇,你说得对。我怎样才能解决这个问题?我需要能够从以太网接口访问该文件,因为 url 是动态加载的(它是从 wordpress cms 生成的,因此从技术上讲,该 url 在我的服务器上并不作为文件存在)
  • 要解决这个问题,我们需要更多地了解究竟是什么阻止了流量。如果您请求相同的文件,但 URL 中使用 localhost 而不是主机名,会发生什么情况?如果由于基于名称的虚拟主机而无法使用,请将网站名称放在地址 127.0.0.1 上的 hosts 文件中
【解决方案3】:

也许您的“allow_url_fopen”设置为“关闭” 检查你的 php.ini 文件或 phpinfo()

【讨论】:

    【解决方案4】:

    如果您尝试获取 URL 的 HTML,我建议使用 curl 而不是 fopen。

    fopen 最好用于本地文件,因为它不“知道”如何处理网络资源的特性。

    【讨论】:

      【解决方案5】:

      检查documentation of fopen 上的cmets。里面有很多金子。

      【讨论】:

        【解决方案6】:

        我花了很长时间才解决这个问题,但在这里我找到了,感谢 Alnitak。 在 URL 中使用 localhost 而不是主机名打开文件对我来说是诀窍。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-04-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-22
          • 2022-01-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多