Sdscompany.ru

Компьютерный журнал
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как вытянуть php с сайта

Snip Code

Скачивание файла с чужого сервера скриптом PHP

Данный код позволяет скачать практически любой файл и друго сервера к себе на сервер (сайт). Можно скачивать картинки, документы, музыку, видео и т.д. Для примера скачаем логотип с сайта php.ru

Решение

результатом работы куска кода будет сохраненная на нашем сервере картинка

Рейтинг:

Если вы знаете более оригинальное, красивое, ЛУЧШЕЕ решение этой задачи, у вас есть шанс заработать 100 рублей. Если ваше решение будет признано лучшим, деньги ваши! Мы гарантируем выплату!

Всего 11 комментариев

Andrey

Вариант для Unix хостингов:

Дмитрий

как вариант
Комментарий добавлен 16-10-2012 в 10:13:21 ID# 51
Ответить на комментарий пользователя Дмитрий

Андрей

Конечно как вариант. Что бы был выбор т.к. Curl к примеру не на всех хостингах включают по дефолту.
Комментарий добавлен 16-10-2012 в 10:19:00 ID# 52
Ответить на комментарий пользователя Андрей

Динар

file_get_contents тоже не всегда подходит
Комментарий добавлен 04-12-2012 в 12:05:54 ID# 71
Ответить на комментарий пользователя Динар

SnipCode.ru

Динар, а есть что-то, что работает всегда?
Если есть, поделитесь!
Комментарий добавлен 04-12-2012 в 12:07:21 ID# 72
Ответить на комментарий пользователя SnipCode.ru

r3l0c

Если исходящие соединения будут запрещены то вообще никакой способ скачивания работать не будет).
Комментарий добавлен 02-02-2013 в 16:01:02 ID# 129
Ответить на комментарий пользователя r3l0c

SnipCode.ru

r3l0c, а как можно на уровне php проверить, разрешены исходящие соединения или нет?
Комментарий добавлен 02-02-2013 в 16:16:21 ID# 130
Ответить на комментарий пользователя SnipCode.ru

r3l0c

Самый простой — попробовать подключиться к гуглу или яндексу)
Комментарий добавлен 05-02-2013 в 11:03:43 ID# 133
Ответить на комментарий пользователя r3l0c

SnipCode.ru

это понятно ) ну а программно никак? Ну там может константу какую проверить, или настройку?
Комментарий добавлен 05-02-2013 в 11:05:03 ID# 134
Ответить на комментарий пользователя SnipCode.ru

Resage

copy() хоть и не для этого, но по умолчанию работает всегда
Комментарий добавлен 02-02-2013 в 13:16:53 ID# 128
Ответить на комментарий пользователя Resage

Resage

copy(‘http://site.domain/file.type’,’new_name.type’);
Чем хуже?
Я просто недавно начал интересваться серверными языками. Да и вообще программированием.
Комментарий добавлен 02-02-2013 в 21:34:17 ID# 131
Ответить на комментарий пользователя Resage

phpguru

Функция отличная только надо бы добавить для utf8 кодировку обработать строку, а то не все понимают как сделать подобное!
$str = iconv_strlen($str,’UTF-8′);
Я так считаю!
13-12-2013 в 12:59:38 ID# 454 посмотреть.

SnipCode.ru

Возможно Вы правы, непонятно только зачем тут iconv_strlen (((
13-12-2013 в 13:02:55 ID# 455 посмотреть.

Сергей

поторопился, так надо в конце, пардон.
return $v[‘pass’];
>
return FALSE;
>

02-12-2013 в 23:33:41 ID# 377 посмотреть.

Сергей

Думаю все же логичней использовать foreach, т.к. можно промахнуться с ключами, а если массив ассоциативный (я раньше делал ключ = дата и время регистрации), то вообще работать не будет.

function search($array,$login)
<
foreach ($array as $k=>$v)
if($v[‘login’] == $login) <
return $v[‘pass’];
>
>
return FALSE;
Так, на минутку.
Время исполнения смысла не имеет, авторизация используется 1 раз, если юзер не параноик)))

02-12-2013 в 23:33:41 ID# 376 посмотреть.

Пабло

Как сделана ваша система рейтинга,с учетом количеством людей,проголосовавших?
11-11-2013 в 17:04:39 ID# 207 посмотреть.

SnipCode.ru

ну. вобщем то все просто: берем общую оценку, делим на кол-во проголосовавших, получаем рейтинг
11-11-2013 в 17:07:06 ID# 208 посмотреть.

Пабло

Да,просто у меня возникли проблемы,при сохранении данных,в бд и отображение количество проголосовавших людей,у вас где нибудь на сайте описано как это сделано или будет?

Мне нужна система рейтинга точно такая же как у вас=)
11-11-2013 в 17:10:56 ID# 209 посмотреть.

KorniloFF

Приведенный код обрезает до первой точки в строке, в случае, если в ней будет их несколько, что не соответствует теме.
Вот код, обрезающий до последней точки:

Виктор

Все отлично работает! Извините , у меня есть задача отрезать после второй и до второй запятой , что нужно поправить в первом примере?
Спасибо!
30-09-2013 в 20:34:07 ID# 204 посмотреть.

23 человека и 29 роботов за 24ч
Online: 0 посетителей (15 мин.)
Добро пожаловать!

Как вывести файл PHP, чтобы «замутить» чужой код

Дата публикации: 2017-01-24

От автора: мне всегда было интересно, как работают чужие сайты. Так и хочется подсмотреть код стороннего скрипта, чтоб и себе такой «замутить». Вот только PHP – это серверный язык, поэтому «списать» чужой код не удастся. Но все-таки, как вывести файл PHP?

О чем это я?

Согласен, заголовок статьи больше ориентирован на продвинутых юзеров. Если вы таким не являетесь (пока), я сейчас поясню, почему скрипт PHP просто так не получится «подсмотреть».

Этот программный язык является серверным. То есть, выполняется на стороне сервера (на хостинге), а не на стороне клиента (в пользовательском браузере). Чтобы все это продемонстрировать, я вставлю в HTML несколько строк кода PHP.

Бесплатный курс по PHP программированию

Читать еще:  Android код ошибки 190

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Теперь сохраним его в файле с расширением .php и откроем в браузере.

Пока ничего необычного. Но теперь давайте просмотрим разметку страницы в браузере:

В ней мы не увидим код скрипта, поэтому вывести файл PHP стороннего ресурса не удастся, если только у вас нет доступа к его серверу. Что мы и доказали путем эксперимента .

А если надо?

Вы, как владелец собственного ресурса, можете предоставить своим пользователям доступ к определенным файлам. Для этого нужно отобразить их содержимое в браузере. Чем мы и займемся.

Чтобы реализовать данное решение, придется выполнить несколько операций:

Считать его содержимое в буфер.

Вывести содержимое на экран.

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Так можно в PHP вывести содержимое текстового файла, картинку. Но код скрипта или разметку страницы точно не получится. Проверено на себе .

Отображаем скрипт

Немного «подровняем» предыдущий пример с помощью функции htmlspecialchars(), которая преобразовывает весь программный код в «читаемый» для браузера:

А можно вообще обойтись всего несколькими строчками. Для этого нам понадобится функция file_get_contents():

Но перед тем как вывести файлы из папки PHP, хотелось бы сделать «допилинг» предыдущего примера. Чтобы код скрипта отображался на экране построчно, нужно все содержимое файла преобразовать в массив. Воспользуемся функцией file():

Получаем имена файлов

Теперь с помощью PHP выведем список файлов. Так как я по своей натуре личность ленивая, то использую самый короткий метод без всяких там функций типа opendir():

В примере для получения имен файлов мы использовали функцию glob(). Она осуществляет поиск согласно шаблону, который передается ей в качестве обязательного параметра.

В качестве необязательных аргументов данная функция принимает различные флаги. Например, с помощью флага GLOB_NOSORT можно отключить сортировку по алфавиту, применяемую функцией к элементам возвращаемого массива.

Ну, на этом и закончим. Вывести список файлов в папке PHP мы научились, отображать содержимое скриптов тоже. Думаю, пока я удовлетворил ваше любопытство .

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Разработка веб-приложения на PHP

Создайте веб-приложение на PHP на примере приема платежей на сайте

Быстрое копирование информации с Web-страницы (Парсинг на PHP)

Заметил, что на форумах часто задают вопросы про парсинг сайтов. Решил написать небольшую статью, в которой попытаюсь объяснить азы парсинга и привести некоторые примеры работы с ним.
Итак, начнём с самого начала.

Что такое парсинг? Это слово является переведенным, а вернее просто написанным на кириллице (как это часто встречается в интернете) словом из английского языка «parsing». Оно переводится с английского как «разбор». Т.е. парсинг — это анализ и разбор какой-либо web-страницы с целью получения информации, содержащейся на ней.

Можно подумать: а зачем вообще нужно получать информацию с web-страницы таким способом? Приведу пример: допустим, Вам нужна база данных MySQL с марками и моделями автомобилей (недавно как раз мне пришлось писать парсер именно для этого). Как Вам её получить? Есть два варианта. Первый — это купить такую базу у человека, у которого она есть. Второй — составить её самому.
Если Вас устраивает первый вариант — Вы, не тратя время, покупаете её и всё. Вот так просто. Вспомнилась поговорка: счастье не в деньгах, а в больших деньгах.

Но, допустим, Вы человек с пытливым умом и Вам интересно сделать что-то своими руками и Вы выбираете второй вариант.
Итак, Вы решили составить базу данных сами. Но откуда и как брать информацию? — Как откуда? — спросите Вы, можно найти какой-нибудь сайт, на котором есть списки марок и моделей автомобилей. Вы мыслите в правильном направлении, читатель. Итак, положим, Вы нашли сайт, на котором есть такие списки, создали у себя новую базу данных с двумя таблицами (одна для марок, другая для моделей автомобилей) и, довольные собой, начали копировать данные с сайта и вставлять в соответствующую таблицу.

Прошло полчаса (тут щелчки старинных часов), Вы смотрите, сколько уже накопировали и, вот досада, обнаруживаете, что скопировали только сто марок (грубо говоря, мягко выражаясь), а ведь их около двухсот пятнадцати (на сайте авто.ру, будем считать, что Вы с него копируете). Ваше довольство собой как рукой сняло, внутри всё оборвалось (особенно если срочно нужна база).
Что делать, где пути, куда податься? Вы судорожно набираете в поисковике что-то типа «быстро получить информацию с web-страницы» и попадаете на этот замечательный форум и читаете данную статью.

Читать еще:  Эксель ошибка число

А в данной статье находите решение — парсинг! Вы подпрыгиваете. Да, точно, мне нужен парсинг! А что это? Что это — я объяснил выше, а вот зачем он, объясняю сейчас. Он затем, чтобы БЫСТРО (буквально за 20-40 секунд) получить необходимые данные с web-страницы.
Программа для парсинга называется «парсер». Итак, парсер — это программа-«робот» (робот — потому что делает всё автоматически, без постоянного вмешательства человека), которая проходится по web-странице, и вытягивает нужные данные (нужные Вам, она вытягивает то, на что Вы её запрограммировали).

Использовать для разбора web-страницы регулярные выражения в чистом виде — не самый удачный выбор. Поэтому я Вам рекомендую использовать специальную библиотеку SimpleHTMLDom. Она составляет из HTML-документа дерево DOM, из которого потом и получает информацию. Что такое DOM, Вы можете узнать в википедии.

Если Вы работали ранее с jQuery, Вам будет просто понять принцип работы данный библиотеки (а кто не работал — ещё проще).
Скачайте себе библиотеку SimpleHTMLDom (с сайта http://simplehtmldom.sourceforge.net) и скопируйте в папку Вашего сайта. Затем подключите его в Вашем скрипте:

Тут свойство «plaintext» возвращает весь текст (без HTML тегов), который содержится в элементе, который в данный момент обрабатывается циклом. Таким образом, Вы получили названия марок. Вы спросите,- а как я узнаю, какой selector у элемента, из которого мне нужно получить текст? Всё просто, Вам нужно тщательно просмотреть исходный код той страницы, с которой Вы планируете получить данные, найти нужный элемент, узнать его selector и затем передать его в аргументе методу.

Давайте попробуем написать парсер для получения марок автомобилей с сайта авто.ру. Открываем сайт и смотрим исходный код. Видим, что все марки находятся в HTML-тегах с классом «marks-col-a». Отсюда следует, что именно этот selector мы должны передать в метод find().
Пишем код:

Затем прямо в этом цикле можно обратиться на страницу с моделями для данной марки по аналогии (можно написать рекурсивную функцию даже) и, получить названия моделей для марки. Только предварительно нужно узнать selector, в котором содержатся названия моделей.

Немного дополню. Функция file_get_html() получает данные с помощью file_get_contents(). Так как эта функция может работать не на всех хостингах, я рекомендую переписать эту функцию (у себя я переписал) под использование CURL.

Как вытянуть php с сайта

Недавно, для одного интернет-магазина на базе joomla-virtuemart , сделал скрипт, позволяющий на основе информации о товарах в базе данных генерировать каталоги товаров в виде XML документа с соблюдением формата Yandex Market Language (YML-формат каталога). Скрипт генерирует такие каталоги и сохраняет в файловой системе сайта. Но, клиент очень скоро пожаловался, что неудобно скачивать каталоги с сайта. И правда, при прямом обращении к каталогу, он просто открывается в браузере и чтобы его скачать нужно дополнительно нажать правой кнопкой мыши и кликнуть «сохранить как…».

Действительно, для рядового пользователя интернета, это может быть довольно не удобно, и к тому же нужно еще додуматься, что можно кликнуть мышкой и скачать. Не для всех это кажется очевидным. Поэтому я решил написать коротенький скриптик, который по запросу позволял бы скачать текстовый файл с сервера, без открытия его в браузере. В этой статье я предлагаю листинг его кода с комментариями.

Принцип работы этого скрипта довольно прост. Допустим, скрипт записан в php файл с именем «download.php» и помещен в папку «files». Формируется ссылка на этот скрипт, в которой передается GET параметр file и в этом параметре передается имя требуемого текстового документа. Например, мы хотим скачать текстовый файл с именем test.xml или test.txt:

При этом, если файл найден в файловой системе, в браузере всплывает диалоговое окно сохранения документа на компьютер.

Безопасность

Однако, в такой организации скачивания документов с сервера таится одна серьезная опасность. Если я введу в адресной строке браузера такой запрос:

в таком случае начнется то, чего ни в коем случае допускать нельзя! Начнется скачивание файла конфигурации Вашего сайта (в данном случае имеется ввиду файл конфигурации joomla, однако это в равной степени касается всех CMS). А это автоматически означает полный крах, потому что в таком случае в руки пользователю попадает вся жизненно важная информация связанная с работоспособностью сайта. И вопрос взлома – это уже вопрос ближайшего времени. Поэтому, чтобы предотвратить такую возможность, мы должны позаботиться о безопасности. Именно для этого в первой строке скрипта полученный запрос проходит проверку регулярным выражением.

В данном случае, регулярное выражение допускает возможность скачивания только документа, имя которого может быть следующим:

и тому подобное… То есть имя файла, в данном случае, должно начинаться с «Catalog» и заканчиваться на «.xml», с учетом регистра — любые другие вариации будут отклонены и на экран будет выведено сообщение «файл не найден». Хотя, физически он может находиться на сервере, но его скачивать не разрешено.

Читать еще:  Ошибка принтера usb001

Причем, так же в этом регулярном выражении нет возможностьи пропустить символ «/» и «.» (кроме точки в окончании имени файла). Это предотвращает возможность в качестве имени файла указать путь до файла в другой папке, аналогично примеру с «configuration.php», или например:

То есть, данный скрипт позволит скачивать xml файлы только из той папки, в которой находится сам скрипт.

Однако, Вы можете изменить структуру регулярного выражения так, чтобы допустить скачивание любых «txt», «xml», «pdf», а так же любых графических файлов типа «png», «gif» и прочее… В общем, тут Вы можете полностью сами решать какие файлы можно скачивать с помощью этого скрипта. Главное ни в коем случае не допускайте через этот скрипт скачивание системных файлов вашего сайта, которые могут нести какие-то важные настройки, логины и пароли. Если с помощью этого скрипта захотите организовать скачивание из разных директорий файловой системы, то подумайте о том чтобы не было возможности скачивать из папки типа «administrator» или «admin», или из папок, которые содержат файлы расширений CMS, в том числе их файлы конфигурации.

На этом, собственно, вопрос безопасности завершается и дальше идет просто техническая работа по подготовке к скачиванию, если проверка пройдена успешно и файл с таким именем существует.

Во второй строке скрипта запрашивается содержимое целевого файла и помещается в переменную.

Далее передаются заголовки, в первом заголовке определяется тип данных и кодировка, а во втором заголовке передается требование вывести диалог сохранения документа на компьютер до вывода его в окне браузера.

Далее предварительно опустошается (на всякий случай) и разрушается буфер. Затем запускается буферизация и все что выводится из переменной $content помещается в буфер, после чего выводится оттуда для скачивания.

Алтернативный код

Здесь представлен код того же скрипта, но чтение и дальнейшее скачивание файла с сервера происходит через функцию readfile(), что согласно документации php точно не должно вызвать проблем с переполнением памяти. На всякий случай, перед вызовом этой функции происходит очищение буфера с помощью ob_clean().

Однако, я не хочу сказать что скрипт указанный в первой части статьи хуже, просто для него я не могу сказать как он поведет себя при скачивании файлов большого размера. В случае же второго варианта, со слов самих разработчиков php – таких проблем точно не возникнет.

Дополнительное улучшение

Если Вы надумаете использовать скрипт для скачивания файлов разных форматов, то будет полезно при каждом скачивании в заголовках правильно указывать тип передаваемых данных, т.н. MIME-типы (подробнее можно прочитать здесь). Для этого нужно добавить анализ имени файла на предмет его расширения, тогда скрипт будет примерно таков:

Кроме того, при желании, можно скрипт доработать таким образом чтобы ограничить количество скачиваний конкретного файла для одного пользователя. При этом прямой доступ к файлам перекрыть настройками сервера (например, через .htaccess на apache).

Если информация этой статьи будет интересна и полезна Вашему кругу друзей и знакомых, то Вы можете опубликовать ссылку — тогда им проще будет ее найти. Они Вам будут благодарны:).

PHP, скачать файл по его URL

22 апреля 2016 г. 3 Александр Хмельницкий 9614

Простой пример скрипта загрузки файла по его URL.

Рассмотрим на примере скачивания картинки по ее URL.

С помощью функции PHP file_get_contents() и file_put_contents():

Пример с использованием с cURL:

Web разработчик, специализируюсь на разработке full stack веб-приложений.
Если у вас есть предложения или вопросы свяжитесь со мной: facebook

Рекомендуемые

Комментарии

А как наоборот защитить страницу от скачивания картинок?

Говорят есть один способ, но никто его не знает)))
А если серьезно, то никак

Векторизуете картинку (благо сервисов полно), далее работаете как с текстовым файлом. Берете из него данные и подставляете в PHP.

Кстати тоже самое можно сделать и на JS, но достаточно добавить
и скопируется тот де самый рисунок. но уже как растровая картинка

C позволяет легко выстрелить себе в ногу; C++ делает это сложнее, но, когда вы это делаете, отстреливает всю вашу ногу.

кодер.укр

Мы публикуем полезные материалы для веб разработчика с подробным описанием без лишней «воды», с рабочими (проверенными) примерами.

Основная наша задача — это донести материалы максимально просто и понятно до читателя.

Вы можете связаться с нами по э-почте: info@кодер.укр
или с помощью формы обратной связи

Здравствуйте! У меня такая задачка. Я убрал всюду на сайте в конце последний слеш таки.

прошу продлить сертификат чтобы браузер не боялся.

Здравствуйте! Подскажите пожалуйста, какие нужно внести правки в файл nginx.conf, если у м.

Подпишитесь на рассылку и Вы будете получать новые статьи первым.

Copyright © 2014 — 2020 by кодер.укр. All Rights Reserved.

Ссылка на основную публикацию
ВсеИнструменты 220 Вольт
Adblock
detector
×
×