2012-06-17 6 views
7

私たちは、私は何をしようとしているが(はい、URLの周りの空白があります)http://site.s3.amazonaws.com/images/some image @name.jpgURLENCODEとのfile_get_contentsは

$stringの内側のようなURLを持っていますまた)に置き換え:

file_get_contents(http%3A%2F%2Fsite.s3.amazonaws.com%2Fimages%[email protected])[function.file-get-contents]: failed to open stream: No such file or directory

あなたは/ブラウザのアドレスバー、画像意志OPにhttp://site.s3.amazonaws.com/images/some image @name.jpgをコピー&ペーストした場合en。

何が問題なのですか?それを修正する方法はありますか?

+2

だから、無効なURLにURLをオンにして、あなたはそれが動作しないということだろうか?質問には何がありますか?詳しく教えてください。 – hakre

+1

PHPの 'file_get_contents'やPHPのhttpストリームラッパーは、あなたのブラウザのアドレスバーのように正確に動作するとお伝えしましたか? PHPでその機能を使用する前に、技術仕様について最初に読んでみることをお勧めします。私はあなたがマニュアルを読むことから始めることをお勧めします。 – hakre

+0

私はこの周りに私の頭を包むことはできません。私にあなたの完全なコードを提供できますか? –

答えて

1

指定したURLは無効です。 file_get_contentsは、有効なhttp URI(より正確には、基礎となるhttpラッパーが行います)を想定しています。無効なURIは有効なURIではないため、file_get_contentsは失敗します。

無効なURIを有効なURIにすることでこれを修正できます。有効なURIを記述する方法は、RFC3986にあります。すべての特殊文字が正しく表現されるように注意する必要があります。例えばスペースはプラス記号に、コマーシャル記号はURLでエンコードする必要があります。また、先頭と末尾の余分な空白も削除する必要があります。

これが完了すると、Webサーバーはアクセスが禁止されていることを通知します。これを解決するために、HTTPファイルラッパーのHTTPコンテキストオプションを使用して、追加のヘッダーを追加する必要があります。 PHPマニュアルの情報は、http:// -- https:// — Accessing HTTP(s) URLs

+0

実例:http://codepad.viper-7.com/jkJjgW – hakre

9

です。関数urlencode()をURL全体に使用すると、無効なURLが生成されます。ブラウザとは対照的に、file_get_contents()機能はURL normalizationを実行しないため、URLをそのままの状態にしておくことは正しくありません。あなたの例では、%20とスペースを交換する必要があります。

$string = str_replace(' ', '%20', $string); 
+0

が動作しますが、非常に汚れた回避策です。 – s3v3n

+1

最後に何かが動作します。ありがとう – nowhere

+0

これはすばらしい答えです:http://stackoverflow.com/questions/8260564/php-file-get-contents-downloading-files-spaces-in-the-filename-not-work/8260942#8260942 –