1

明確化のために編集:

URL のどの文字が原因で file_get_contents / curl が失敗するか知りたいです。

以下の例では、問題を引き起こす唯一の文字はスペースであるため、私にとって最善の方法はstr_replace%20. 失敗の原因となる他の文字はありますか? もしそうなら、それらは何ですか? 私に代わってこれを行う機能はありますか?


元の言い回し:

ユーザーが選択した URL で任意のファイルをダウンロードし、文字列としてアクセスできるようにしたいと考えています。私の最初の反応は:

$str = file_get_contents($url);

ただし、これは次のような 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;
}

ただし、同じ URL の場合、cURL は「無効な URL」で失敗します。

ここで、任意の文字を含む URL からダウンロードする場合は、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

どちらの方法を使用しても、どちらもフェッチされません。これは、ローカルファイルであると見なされるためだと思います。任意の URL を取得するにはどうすればよいですか?

4

1 に答える 1

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);
于 2013-02-23T19:15:12.333 に答える