今天,我在服务器上运行使用file_get_contents
或类似fopen
功能的 php 脚本时遇到了一些问题。我认为这是一个 openssl 或防火墙错误,但我对服务器管理工作还不太熟悉,所以我需要一些帮助来调试它。我正在摆弄iptables
设置csf firewall
并尝试配置 sftp,proftpd
突然它停止工作了。
一个简单的测试:(该 gif 文件可以通过浏览器正常加载)
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:
//a local request to the same file:
echo file_get_contents("/home/user/domains/this-domain.com/private_html/media/logospin.gif");
//an external absolute url:
echo file_get_contents("https://www.google.com/");
在 php.ini 中,我有:allow_url_fopen = on
& extension=php_openssl.dll
on。有什么想法吗?
答案1
问题实际上是 DNS 问题。file_get_contents()
由于某种原因,浏览器通过主名称服务器 (ns1 和 ns2) 路由,而我们的备份名称服务器 (ns3 和 ns4) 却奇怪地通过备份名称服务器 (ns3 和 ns4) 路由。与主名称服务器不同,备份名称服务器指向不同的服务器,该服务器尚未拥有相同的文件 - 因此出现不寻常的 404。
我在修补防火墙等之前的几个小时才设置了这些备份名称服务器,当它们传播时,看起来就像 ssh 命令已file_get_contents()
离线一样。