別のウェブサイトから画像にアクセスしています。このエラーが発生します:
「ストリームを開くことができませんでした: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);
}
Preg_replaceは、非推奨になった私にとってereg_replaceが機能しなかったため、最新バージョンのPHPで機能するため、より理にかなっていると思います。
$url = preg_replace("/ /", "%20", $url);
私は同じ問題を抱えていましたが、それはによって解決されました
$url = str_replace(" ", "%20", $url);
投稿してくれたCello_Guyに感謝します。
私が考えることができる唯一の問題は、スペースが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 。
関数rawurlencode()
を使用します
指定された文字列を"RFC3986に従ってエンコードします。
URLの末尾が空白であっても、phpファイル($ url)が失敗する可能性があります。最近のバージョンのphpまたはApacheでは、URLの末尾に空白がある場合でもエラーが発生します。したがって、ブラウザは末尾の空白を%20または無視するのに十分な知識があるため、URLはブラウザで機能しているように見えます。それはとにかく私のエラーでした。
古いランプはそれを許可しました。 (つまり、同じコードが正常に実行されました)。簡単な修正。