我知道 SO 上有一百个关于 file_get_contents()
的帖子,但似乎没有什么可以解决我的问题:
十五分钟前一切都工作正常,直到我通过 SSH 运行一些安全内容。我添加了一些 iptables
规则和 file_get_contents,并运行了 service proftpd restart
和一些安装/卸载,这似乎以某种方式禁用了 PHP 的 fopen()
功能。
在 php.ini 中,我有: allow_url_fopen = on
和 extension=php_openssl.dll
on
我正在尝试一个简单的测试:(此文件可以通过浏览器正常加载)
echo file_get_contents("https://www.this-domain.com/logo.gif");
//...failed to open stream:HTTP request failed! HTTP/1.1 404 Not Found...
//However both of the following work absolutely fine:
echo file_get_contents("https://www.google.com/");
echo file_get_contents("/home/user/domains/this-domain.com/private_html/media/logospin.gif");
我无法更改 file_get_contents() 代码(更改为 cURL 或其他) - 这是服务器设置问题。可能与防火墙有关。有人可以建议修复吗?
最佳答案
问题实际上是 DNS 问题。由于某种原因,file_get_contents()
奇怪地通过我们的备份域名服务器(ns3 和 ns4)进行路由,而浏览器则通过主域名服务器(ns1 和 ns2)进行路由。与主服务器不同,备份指向不同的服务器,该服务器尚不具有相同的文件 - 因此会出现不寻常的 404。
我在修改防火墙等之前几个小时就设置了这些备份名称服务器,当它们传播时,看起来非常像 ssh 命令已经使 file_get_contents()
离线。
感谢大家的评论 - 非常感谢。
关于php - 仅使用 CentOS 安全设置的本地域上的 file_get_contents() 安全问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31348089/