Ответов: 1 Просмотров: 44
|
Скрипт благополучно скомунизжен с Хабрахабр. Раньше никогда с какими-либо скриптами не связывался и это дремучий лес для меня, но наткнулся на этот пост и стало интересно самому попробовать.
На хабре расписано как действует скрипт, но посту уже 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:
скопировать код в буфер обмена
<?PHP set_time_limit(0 ); // убираем ограничение по времени выполнения скрипта function random_string($length){ // функция генерации рандомной строки $chars = "abcdefghijklmnopqrstuvwxyz1234567890"; // символы из которых генерируем $numChars = strlen($chars); // Определяем длину $chars $string = ''; // задаем пустую переменную for ($i = 0; $i < $length; $i++) { // Собираем строку $string .= substr($chars, rand(1 , $numChars) - 1 , 1 ); } return $string; // Возвращаем готовую строку } while (1) { $randstring = random_string(5); // генерируем рандомную сроку $htmldata = file_get_contents('http://prnt.sc/1'.$randstring); // подставляем рандомную строку и получаем код страницы preg_match_all('/<meta name=\"twitter:image:src\" content=\"(.*?)\"\/>/is',$htmldata,$img_url); // парсим регуляркой url картинки if (strlen($img_url[1][0]) > 1) { // проверяем длину полученной строки, если больше 1 - картинка по этому адресу есть $localname = array_pop(explode('/',$img_url[1 ][0 ])); // разбиваем строку в массив и извлекаем последний элемент массива (т.е. imagename.png) $localpath = "./images/".$localname; // определяем куда будет сохраняться картинка локально. у меня заранее создана папка images echo "<span style='color: green; display: block; margin-bottom: 50px;'>Сохранение - ".$localname." , url - http://prnt.sc/1".$randstring." , скачиваем с ".$img_url[1][0]."</span>"; } else { echo "<span style='color: red; display: block; margin-bottom: 50px;'>По адресу http://prnt.sc/1".$randstring." нет картинки</span>"; } } ?>
Что из себя представляет ошибка:
Ошибка как написано в 17 строке:
Пытался найти решение в интернете, но ничего понятного для себя не смог найти Помогите, пожалуйста, если сможете. |