За последние 24 часа нас посетили 21873 программиста и 1018 роботов. Сейчас ищут 723 программиста ...

Скачивание картинки с парамеиром signature

Тема в разделе "Обработка изображений средствами PHP", создана пользователем mstdmstd, 4 июл 2017.

  1. mstdmstd

    mstdmstd Активный пользователь

    С нами с:
    28 фев 2010
    Сообщения:
    83
    Симпатии:
    1
    Всем привет,
    Програмно скачиваю картинку по ссылке
    Код (Text):
    1. 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):
    1.  
    2. protected function getImageByUrl(string $url)
    3. {
    4. $ret= preg_match('~^http[s]:\/\/~i',$url);
    5. if ( !$ret ) {
    6. $url= 'http://'.$url;
    7. }
    8. echo '<pre>$url::'.print_r($url,true).'</pre>';
    9. $file_content= file_get_contents( ($url) );
    10. $image = ImageCreateFromString($file_content);
    11. if (is_resource($image) === true) { // image is valid, do your magic here
    12. return $file_content;
    13. }
    14. return false;
    15. }
    Вывод на экран переменной url:
    Код (Text):
    1. $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;amp;s=9d7100c8f792e38f3f02bd76991da7e2): failed to open stream: HTTP request failed! HTTP/1.1 401 No signature found.

    Обращает внимание что ошибке сообщение с декодированными параметрами...

    Если же ссылку прописать в самой функции:
    Код (Text):
    1. protected function getImageByUrl(string $url)
    2. {
    3. $ret= preg_match('~^http[s]:\/\/~i',$url);
    4. if ( !$ret ) {
    5. $url= 'http://'.$url;
    6. }
    7. $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';
    8. echo '<pre>$url::'.print_r($url,true).'</pre>';
    9. $file_content= file_get_contents( ($url) );
    10. $image = ImageCreateFromString($file_content);
    11. if (is_resource($image) === true) { // image is valid, do your magic here
    12. return $file_content;
    13. }
    14. return false;
    15. }[/B]
    то картинка скачивается нормально с выводом:
    http://imgur.com/a/7AhC7
    Не пойму почему в 1м случае когда в getImageByUrl передается ссылка - ошибка? Не вижу разницы...
    signature - это последний параметр - если его в ссылке изменить - ошибка .

    Спасибо!
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    PHP:
    1. print_r($url,true)
    замени на var_dump
    чет ощущение что типы разные
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
  4. mstdmstd

    mstdmstd Активный пользователь

    С нами с:
    28 фев 2010
    Сообщения:
    83
    Симпатии:
    1
    var_dump вывел длину строки и сравнивая параметр в функцию и введденный в редакторе я увидел

    Код (Text):
    1. $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';
    2. echo '<pre>$url_2 '.strlen($url_2).'::'.print_r($url_2,true).'</pre>';
    3. var_dump($url_2);
    4. echo '<hr><pre>$url '.strlen($url).'::'.print_r($url,true).'</pre>';
    5. 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 символв и как их удалить?
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    mb_strlen не?
     
  6. mstdmstd

    mstdmstd Активный пользователь

    С нами с:
    28 фев 2010
    Сообщения:
    83
    Симпатии:
    1
    mb_strlen вывело такую же длину строк 176 и 196
    Код (Text):
    1. mb_check_encoding($url,'UTF-8')
    вывело 1 для обоих переменных
    что еще можно проверить ?
     
  7. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    да и типа чето я такого не знаю
    PHP:
    1. protected function getImageByUrl(string $url)
    сделайте просто
    PHP:
    1. protected function getImageByUrl($url)
     
  8. mstdmstd

    mstdmstd Активный пользователь

    С нами с:
    28 фев 2010
    Сообщения:
    83
    Симпатии:
    1
    Код (Text):
    1.     protected function getImageByUrl($url)  
    Не помогло и я не уловил разницы...
     
  9. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Как в функцию передается $url?
    И в регулярке можно не экранировать слеши, если в качестве начала и конца они не используются. К тому же, в php даже в одинарных кавычках ставится двойной экран (\\) - для php и для регулярного выражения.