web-dev-qa-db-ja.com

ストリームを開くことができませんでした:HTTPリクエストが失敗しました! HTTP / 1.1400不正なリクエスト

別のウェブサイトから画像にアクセスしています。このエラーが発生します:

「ストリームを開くことができませんでした:HTTP要求に失敗しました!HTTP/1.1 400不正な要求」「一部(すべてではない)」の画像をコピーするときにエラーが発生しました。これが私のコードです。

$img=$_GET['img']; //another website url
$file=$img;

function getFileextension($file) {
       return end(explode(".", $file));
}
$fileext=getFileextension($file);
if($fileext=='jpg' || $fileext=='gif' || $fileext=='jpeg' || $fileext=='png' || $fileext=='x-png' || $fileext=='pjpeg'){
if($img!=''){
$Rand_variable1=Rand(10000,100000);
              $node_online_name1=$Rand_variable1."image.".$fileext;

                $s=copy($img,"images/".$node_online_name1);

}

11
murali krishna

Preg_replaceは、非推奨になった私にとってereg_replaceが機能しなかったため、最新バージョンのPHPで機能するため、より理にかなっていると思います。

$url = preg_replace("/ /", "%20", $url);
17
Ravish Kumar

私は同じ問題を抱えていましたが、それはによって解決されました

$url = str_replace(" ", "%20", $url);

投稿してくれたCello_Guyに感謝します。

12
npcoda

私が考えることができる唯一の問題は、スペースがURLにあり、おそらくファイル名にあることです。 URL内のすべてのスペースは、適切なエンコーディング(%20)に変換する必要があります。

次のようなファイル名がある場合:

" http://www.somewhere.com/images/img 1.jpg"

上記のエラーが発生しますが、これでは次のようになります。

" http://www.somewhere.com/images/img%201.jpg "

あなたは問題を抱えているはずです。

str_replace()を使用して、スペース( "")を適切なエンコーディング( "%20")に置き換えます。

次のようになります。

_$url = str_replace(" ", "%20", $url);
_

str_replace()の詳細については、チェックアウト PHP Manual

6
Cello_Guy

関数rawurlencode()を使用します

指定された文字列を"RFC3986に従ってエンコードします。

http://php.net/manual/ru/function.rawurlencode.php

1
anydasa

URLの末尾が空白であっても、phpファイル($ url)が失敗する可能性があります。最近のバージョンのphpまたはApacheでは、URLの末尾に空白がある場合でもエラーが発生します。したがって、ブラウザは末尾の空白を%20または無視するのに十分な知識があるため、URLはブラウザで機能しているように見えます。それはとにかく私のエラーでした。

古いランプはそれを許可しました。 (つまり、同じコードが正常に実行されました)。簡単な修正。

1
denpick