编辑澄清:
我想知道 url中的哪些字符会导致file_get_contents / curl失败。
在下面的示例中,导致问题的唯一字符是空格,因此我要做的最好的事情就是使用str_replace
的网址中的%20
空格。是否有其他角色也会导致失败?如果是这样,他们是什么?是否有一个功能可以替代我?
原始短语:
我希望能够通过用户选择的URL下载任意文件,并以字符串形式访问它。我最初的反应是:
$str = file_get_contents($url);
然而,这在以下网址上失败:
http://i.ebayimg.com/t/2-WAY-PHOTO-FRAME-KEY-BOX-SHABBY-CHIC-STYLE-/00/s/NjAwWDYwMA==/$(KGrHqRHJDoE-PBe-SSLBPlrnIYb Q~~60_35.JPG
接下来,我尝试了cURL
:
function file_get_contents_curl($url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
但是,对于相同的网址,cURL会因“网址无效”而失败。
我在这里读到了一些问题,当从包含任意字符的网址下载时,必须使用urlencode。但是,这导致:
http%3A%2F%2Fi.ebayimg.com%2Ft%2F2-WAY-PHOTO-FRAME-KEY-BOX-SHABBY-CHIC-STYLE-%2F00%2Fs%2FNjAwWDYwMA%3D%3D%2F%24%28KGrHqRHJDoE-PBe-SSLBPlrnIYb+Q%7E%7E60_35.JPG
,我认为因为现在它认为它是本地文件。我需要做什么才能获取任意网址?
答案 0 :(得分:1)
试试这个:
$url = "http://i.ebayimg.com/t/2-WAY-PHOTO-FRAME-KEY-BOX-SHABBY-CHIC-STYLE-/00/s/NjAwWDYwMA==/$(" . urlencode("KGrHqRHJDoE-PBe-SSLBPlrnIYb Q~~60_35.JPG");
$str = file_get_contents($url);
编辑:正如Galen所说,URL的唯一问题是空间,可以使用str_replace修复它,如下所示。
$url = "http://i.ebayimg.com/t/2-WAY-PHOTO-FRAME-KEY-BOX-SHABBY-CHIC-STYLE-/00/s/NjAwWDYwMA==/$(KGrHqRHJDoE-PBe-SSLBPlrnIYb Q~~60_35.JPG";
$url = str_replace(' ', '+', $url);
$str = file_get_contents($url);