8

http://site.s3.amazonaws.com/images/some image @name.jpg内部のようなURLがあります$string

私がやろうとしていること(はい、URLの周りに空白があります):

$string = urlencode(trim($string));
$string_data = file_get_contents($string);

私が得るもの(@も置き換えられます):

file_get_contents(http%3A%2F%2Fsite.s3.amazonaws.com%2Fimages%2Fsome+image+@name.jpg)[function.file-get-contents]: failed to open stream: No such file or directory

http://site.s3.amazonaws.com/images/some image @name.jpgブラウザのアドレスバーにコピペすると画像が開きます。

何が悪いのか、それを修正する方法は?

4

2 に答える 2

11

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

$string = str_replace(' ', '%20', $string);
于 2012-06-17T12:56:03.573 に答える
1

指定したURLが無効です。file_get_contents有効なhttpURIを期待します(より正確には、基盤となるhttpラッパーはそうします)。無効なURIは有効なURIではないため、file_get_contents失敗します。

これを修正するには、無効なURIを有効なURIに変換します。有効なURIの記述方法については、RFC3986を参照してください。すべての特殊文字が正しく表現されるように注意する必要があります。たとえば、スペースからプラス記号まで、アットマークのコマーシャルはURLエンコードする必要があります。また、最初と最後の余分な空白を削除する必要があります。

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

于 2012-06-17T12:55:45.407 に答える