PHP getimagesize - 无法打开流。错误的请求

PHP getimagesize - Failed to open stream. Bad request

我收到以下错误:

getimagesize(https://static1.squarespace.com/static/570d03d02b8dde8b2642afca/570f74e87c65e4819dec6812/57272dbfb6aa606f78a5d8b5/1470397291105/4XTRYCK3.jpg): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request

图像在我的浏览器中打开没有问题。

有谁知道为什么会失败?

Squarespace 拒绝任何 User-Agent header 不是网络浏览器的连接。这包括 CURL 和 getimagesize。

您可以通过将此插入您的代码来设置 user-agent header:

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

在我的情况下(显然与基于他们 URL 的 OP 不同)有两个问题。

首先是 URL 我得到的是 HTTP,但浏览器会成功重定向到 HTTPS,而我的 getimagesize() 会因给定错误而失败。我不得不在 URL.

中将“http”替换为“https”
$url = "http://test.com/file name.jpg";
$url = preg_replace('/^http:/', 'https:', $url);

第二个是我得到的URL里面有一个space。我不得不将 space 编码为 %20.

$url = (dirname($url) . '/'. rawurlencode(basename($url)));
Final URL: https://test.com/file%20name.jpg

有了这两个替换,对 getimagesize() 的调用就成功了。