PHP getimagesize - 打开流失败。请求有误。

8

这篇帖子可能会对你有所帮助:https://dev59.com/WX7aa4cB1Zd3GeqPwepU - dpp
这是非常奇怪的。我刚刚再次测试,现在那个 URL 可以工作(包括 HTTP 和 HTTPS)。但是我尝试了另一个类似的 URL,对于 HTTP 和 HTTPS 都以同样的方式失败了。例如:https://static1.squarespace.com/static/570d03d02b8dde8b2642afca/570f74e87c65e4819dec6812/57272d96b6aa606f78a5d80a/1470397194245/4XTRYCK2.jpg - user1469742
@dpp 另外,你提到的帖子中的解决方案不幸地似乎以同样的方式失败了。 - user1469742
现在确定目标服务器正在阻止我的客户端,因为它正在使用某些用户代理标头。尝试使用curl进行连接并编辑标头以看起来像Firefox Web浏览器,然后我就能通过了。但遇到了其他错误。似乎简单的解决方案在这里是不可能的,理想情况下,我希望编辑getimagesize()的用户代理标头。 - user1469742
这个错误可能是相同的,我从另一个网站上得到了它:"HTTP请求失败!HTTP/1.1 406不可接受"。 - user1469742
显示剩余2条评论
2个回答

4

Squarespace拒绝任何连接,其中User-Agent标头不是Web浏览器。这包括CURL和getimagesize。

您可以通过将以下代码插入到您的代码中来设置用户代理标头:

ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)');

这解决了我的问题!另外,服务器似乎记住/缓存了有效的用户代理。当我首次运行没有按照上述方法设置ini_set的getimagesize时,它会像应该的那样阻止,当我使用按照上述方法设置ini_set的getimagesize时,它能够工作。最后有趣的事情是,当我再次关闭ini_set时,getimagesize仍然能够正常工作几天/几小时(不确定),直到它恢复到原始错误。有人能解释一下吗?虽然不重要,但我很好奇。 - user1469742

0
在我的情况下(显然与OP的URL不同),存在两个问题。
第一个问题是我得到的URL是HTTP,但浏览器会成功重定向到HTTPS,而我的getimagesize()函数会因为给定的错误而失败。我必须将我的URL中的“http”替换为“https”。
$url = "http://test.com/file name.jpg";
$url = preg_replace('/^http:/', 'https:', $url);

第二个问题是我得到的URL中有一个空格。我必须将空格编码为%20。
$url = (dirname($url) . '/'. rawurlencode(basename($url)));
Final URL: https://test.com/file%20name.jpg

通过这两个替换,调用getimagesize()成功了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接