не удалось открыть поток: HTTP-запрос не выполнен! HTTP / 1.1 400 неверный запрос - PullRequest
11 голосов
/ 27 декабря 2010

Я получаю доступ к изображениям с другого сайта. Я получаю эту ошибку:

«Не удалось открыть поток: ошибка HTTP-запроса! HTTP / 1.1 400 Bad Request» ошибка при копировании некоторых (не всех) изображений. вот мой код.

$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);

}

Ответы [ 5 ]

14 голосов
/ 04 февраля 2013

Я думаю, что preg_replace имеет больше смысла, так как он будет работать с последними версиями PHP, так как ereg_replace не сработал для меня, потому что устарел

$url = preg_replace("/ /", "%20", $url);
11 голосов
/ 18 мая 2012

У меня была такая же проблема, но она была решена

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

Спасибо Cello_Guy за сообщение.

5 голосов
/ 07 июня 2011

Единственная проблема, о которой я могу подумать, это наличие пробелов в 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() check Руководство по PHP .

1 голос
/ 11 апреля 2018

Даже завершающий пробел в URL может привести к сбою файла php ($ url).В последних версиях php или apache даже завершающий пробел в URL вызовет ошибку.Похоже, что URL работает в браузере, потому что браузер знает достаточно, чтобы% 20 завершить пробел или игнорировать егоВ любом случае, это была моя ошибка.

Старая ЛАМПА позволила это.(т.е. тот же код работал нормально).Легко исправить.

1 голос
/ 02 декабря 2013

Используйте функцию rawurlencode()

Кодирует данную строку в соответствии с »RFC 3986.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...