Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: проблема с PHP для скачивания картинки
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » проблема с PHP для скачивания картинки

Страниц (1): [1]
 

1. Gonila - 22 Октября, 2016 - 01:13:00 - перейти к сообщению
Скрипт благополучно скомунизжен с Хабрахабр. Раньше никогда с какими-либо скриптами не связывался и это дремучий лес для меня, но наткнулся на этот пост и стало интересно самому попробовать.

На хабре расписано как действует скрипт, но посту уже 3 года и что-то поменялось:
На сайте lightshot (prnt.sc) существует баг, как и на некоторых других похожих сервисах - доступ к картинке можно получив банально перебором символов в URL.
В lightshot это устроено следующей маской:
prnt.sc/......, вместо многоточия идет 4-5 символов (пока, потом возможно и больше) в диапазоне [a-z; 0–9]
Раньше маска была другой: prnt.sc/1..... и после единицы все было точно также
По этому php нужно подредактировать и под новую маску. Подскажите и с этим, что кроме самих ссылок [prnt.sc/1..... -> prnt.sc/......] менять нужно?
Скрипт генерирует ссылку, переходит на нее, проверяет есть ли по ней изображение (и "говорит" об этом), берет на картинку прямую ссылку и по ней качает изображение в папку images.
Делаю все так же как и автор через Denwer.
*папку images я создал рядом с самим php фалом (надеюсь правильно)

Вот сам php:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. set_time_limit(0); // убираем ограничение по времени выполнения скрипта
  3. if (!is_dir("images")) mkdir(__DIR__.'/images');
  4. function random_string($length){ // функция генерации рандомной строки
  5.         $chars = "abcdefghijklmnopqrstuvwxyz1234567890"; // символы из которых генерируем
  6.         $numChars = strlen($chars); // Определяем длину $chars
  7.         $string = ''; // задаем пустую переменную
  8.         for ($i = 0; $i < $length; $i++) { // Собираем строку
  9.                 $string .= substr($chars, rand(1, $numChars) - 1, 1);
  10.         }
  11.         return $string; // Возвращаем готовую строку
  12. }
  13.  
  14.  
  15. while (1) {
  16.         $randstring = random_string(5); // генерируем рандомную сроку
  17.         $htmldata = file_get_contents('http://prnt.sc/1'.$randstring); // подставляем рандомную строку и получаем код страницы
  18.         preg_match_all('/<meta name=\"twitter:image:src\" content=\"(.*?)\"\/>/is',$htmldata,$img_url); // парсим регуляркой url картинки
  19.         if (strlen($img_url[1][0]) > 1) { // проверяем длину полученной строки, если больше 1 - картинка по этому адресу есть
  20.                 $localname = array_pop(explode('/',$img_url[1][0])); // разбиваем строку в массив и извлекаем последний элемент массива (т.е. imagename.png)
  21.                 $localpath = "./images/".$localname; // определяем куда будет сохраняться картинка локально. у меня заранее создана папка images
  22.                 file_put_contents($localpath, file_get_contents($img_url[1][0])); // скачиваем, можно было бы реализовать через curl, но на мой взгляд это проще и быстрее
  23.                
  24.                 echo "<span style='color: green; display: block; margin-bottom: 50px;'>Сохранение - ".$localname." , url - http://prnt.sc/1".$randstring." , скачиваем с ".$img_url[1][0]."</span>";
  25.         } else {
  26.                 echo "<span style='color: red; display: block; margin-bottom: 50px;'>По адресу http://prnt.sc/1".$randstring." нет картинки</span>";
  27.                
  28.         }
  29.        
  30. }
  31. ?>

Что из себя представляет ошибка:
Спойлер (Отобразить)


Ошибка как написано в 17 строке:
PHP:
скопировать код в буфер обмена
  1. $htmldata = file_get_contents('http://prnt.sc/1'.$randstring);


Пытался найти решение в интернете, но ничего понятного для себя не смог найти ??? Непонял! В затруднении Радость Помогите, пожалуйста, если сможете.
2. vova3261 - 22 Октября, 2016 - 01:50:09 - перейти к сообщению
Ошибка в том что Http request failed с кодом 403 который говорит о том что доступ запрещен. Тут 2 варианта или вас заблокировали за брутфорс или же сервис возвращает просто 403 если картинки нет, проверьте если второй вариант, тогда в самом простом случае сделать так
ну или разбирать заголовки и делать все действия только если заголовок 200

 

Powered by ExBB FM 1.0 RC1