Всем привет, Програмно скачиваю картинку по ссылке Код (Text): https://i.guim.co.uk/img/media/68853f611fce721fd4816e75e2b3e25f8f6265bd/192_0_4380_2629/master/4380.jpg?w=300&q=55&auto=format&usm=12&fit=max&s=9d7100c8f792e38f3f02bd76991da7e2 используя функцию Код (Text): protected function getImageByUrl(string $url) { $ret= preg_match('~^http[s]:\/\/~i',$url); if ( !$ret ) { $url= 'http://'.$url; } echo '<pre>$url::'.print_r($url,true).'</pre>'; $file_content= file_get_contents( ($url) ); $image = ImageCreateFromString($file_content); if (is_resource($image) === true) { // image is valid, do your magic here return $file_content; } return false; } Вывод на экран переменной url: Код (Text): $url::https://i.guim.co.uk/img/media/68853f611fce721fd4816e75e2b3e25f8f6265bd/192_0_4380_2629/master/4380.jpg?w=300&q=55&auto=format&usm=12&fit=max&s=9d7100c8f792e38f3f02bd76991da7e2 И получаю ошибку: file_get_contents(https://i.guim.co.uk/img/media/6885...ax&amp;s=9d7100c8f792e38f3f02bd76991da7e2): failed to open stream: HTTP request failed! HTTP/1.1 401 No signature found. Обращает внимание что ошибке сообщение с декодированными параметрами... Если же ссылку прописать в самой функции: Код (Text): protected function getImageByUrl(string $url) { $ret= preg_match('~^http[s]:\/\/~i',$url); if ( !$ret ) { $url= 'http://'.$url; } $url= 'https://i.guim.co.uk/img/media/68853f611fce721fd4816e75e2b3e25f8f6265bd/192_0_4380_2629/master/4380.jpg?w=300&q=55&auto=format&usm=12&fit=max&s=9d7100c8f792e38f3f02bd76991da7e2'; echo '<pre>$url::'.print_r($url,true).'</pre>'; $file_content= file_get_contents( ($url) ); $image = ImageCreateFromString($file_content); if (is_resource($image) === true) { // image is valid, do your magic here return $file_content; } return false; }[/B] то картинка скачивается нормально с выводом: http://imgur.com/a/7AhC7 Не пойму почему в 1м случае когда в getImageByUrl передается ссылка - ошибка? Не вижу разницы... signature - это последний параметр - если его в ссылке изменить - ошибка . Спасибо!
var_dump вывел длину строки и сравнивая параметр в функцию и введденный в редакторе я увидел Код (Text): $url_2= 'https://i.guim.co.uk/img/media/68853f611fce721fd4816e75e2b3e25f8f6265bd/192_0_4380_2629/master/4380.jpg?w=300&q=55&auto=format&usm=12&fit=max&s=9d7100c8f792e38f3f02bd76991da7e2'; echo '<pre>$url_2 '.strlen($url_2).'::'.print_r($url_2,true).'</pre>'; var_dump($url_2); echo '<hr><pre>$url '.strlen($url).'::'.print_r($url,true).'</pre>'; var_dump($url); что в параметре длина на 20 символов длиннее http://imgur.com/a/Kwx4T и при этом поиск браузера отображает что строки равны картинку выдергиваю со страницы https://www.theguardian.com/us-news/2017/jul/02/donald-trump-foreign-policy-diplomacy и там прописан utf8 непонятно откуда лишние 20 символв и как их удалить?
mb_strlen вывело такую же длину строк 176 и 196 Код (Text): mb_check_encoding($url,'UTF-8') вывело 1 для обоих переменных что еще можно проверить ?
да и типа чето я такого не знаю PHP: protected function getImageByUrl(string $url) сделайте просто PHP: protected function getImageByUrl($url)
Как в функцию передается $url? И в регулярке можно не экранировать слеши, если в качестве начала и конца они не используются. К тому же, в php даже в одинарных кавычках ставится двойной экран (\\) - для php и для регулярного выражения.