php скопировать файл с другого сайта

Php скопировать файл с другого сайта

(PHP 4, PHP 5, PHP 7, PHP 8)

copy — Копирует файл

Описание

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

Путь к исходному файлу.

Путь к целевому файлу. Если dest является URL, то операция копирования может завершиться ошибкой, если обёртка URL не поддерживает перезаписывание существующих файлов.

Если целевой файл уже существует, то он будет перезаписан.

Возвращаемые значения

Возвращает true в случае успешного выполнения или false в случае возникновения ошибки.

Примеры

Пример #1 Пример использования функции copy()

= ‘example.txt’ ;
$newfile = ‘example.txt.bak’ ;

Смотрите также

User Contributed Notes 22 notes

Don’t forget; you can use copy on remote files, rather than doing messy fopen stuff. e.g.

Here is a simple script that I use for removing and copying non-empty directories. Very useful when you are not sure what is the type of a file.

I am using these for managing folders and zip archives for my website plugins.

A nice simple trick if you need to make sure the folder exists first:

Below a code snippet for downloading a file from a web server to a local file.

It demonstrates useful customizations of the request (such as setting a User-Agent and Referrer, often required by web sites), and how to download only files if the copy on the web site is newer than the local copy.

It further demonstrates the processing of response headers (if set by server) to determine the timestamp and file name. The file type is checked because some servers return a 200 OK return code with a textual «not found» page, instead of a proper 404 return code.

Источник

Отдаем файлы эффективно с помощью PHP

1. Используем readfile()

Метод хорош тем, что работает с коробки. Надо только написать свою функцию отправки файла (немного измененный пример из официальной документации):

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

2. Читаем и отправляем файл вручную

Метод использует тот же Drupal при отправке файлов из приватной файловой системы (файлы недоступны напрямую по ссылкам):

3. Используем модуль веб сервера

3a. Apache

Модуль XSendFile позволяет с помощью специального заголовка передать отправку файла самому Apache. Существуют версии по Unix и Windows, под версии 2.0.*, 2.2.* и 2.4.*

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

Также можно указать белый список директорий, файлы в которых могут быть обработаны. Важно: если у Вас сервер на базе Windows путь должен включать букву диска в верхнем регистре.

Описание возможных опций на сайте разработчика: https://tn123.org/mod_xsendfile/

Пример отправки файла:

3b. Nginx

Nginx умеет отправлять файлы из коробки через специальный заголовок.

Для корректной работы нужно запретить доступ к папку напрямую через конфигурационный файл:

Пример отправки файла (файл должен находиться в директории /some/path/protected):

Источник

Работа с файлами в PHP

Чтение файла: file_get_contents()

С помощью функции file_get_contents() можно получить содержимое файла:

Также мы можем получить html-код какой-либо страницы в интернете:

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

Чтение файла: file()

Функция file() позволяет получить содержимое файла в виде массива. Разделителем элементов является символ переноса строки.

Создадим в корне сайта файл data.txt со следующим содержимым:

Теперь запустим скрипт index.php со следующим кодом:

При запуске этого скрипта мы получим в браузере:

Заметили, что у первых двух строк длина 7 символов вместо пяти? Это из-за того, что каждая строка содержит в конце символы переноса строки.

Чаще всего они нам не нужны, поэтому их можно убрать, передав вторым параметром константу FILE_IGNORE_NEW_LINES :

Теперь у всех строк будет по 5 символов.

Если нам необходимо получить только заполненные строки в файле и пропустить пустые, можно передать вторым параметром константу FILE_SKIP_EMPTY_LINES :

Разумеется, мы можем передать сразу две константы:

Создание файла и запись в файл: file_put_contents()

Функция file_put_contents() позволяет создать файл и заполнить его данными.

Чтобы не перезаписывать данные, а добавить их в конец файла, нужно передать третьим параметром константу FILE_APPEND :

Также вторым параметром можно передать массив:

Но этот вариант не очень удобен, поскольку все элементы массива запишутся подряд, без каких-либо разделителей. Чтобы их добавить, можно использовать функцию implode:

Создание папки или структуры папок

Создать папку можно с помощью функции mkdir() (make directory):

Кроме этого, второй параметр может игнорироваться при заданной umask (пользовательская маска (user mask), которая нужна для определения конечных прав доступа). В этом случае принудительно сменить права можно функцией chmod() :

Также мы можем создать структуру папок рекурсивно, для этого нужно третьим параметром передать true :

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

Проверка существования файла или папки

Проверить существование папки или файла можно с помощью функции file_exists() :

Если вы хотите проверить существование только папки или только файла, для этого есть специальные функции is_dir() и is_file() :

Проверка прав доступа

Функции is_readable() и is_writable() проверяют, есть ли у пользователя, от имени которого запущен PHP, права на чтение и запись файла или папки:

Копирование, перенос и удаление файла

Для удаления файлов используется функция unlink() :

Чтобы скопировать файл, используем функцию copy() :

Для переименования и переноса файла в другую папку используется функция rename() :

Работа с файлами с помощью fopen()

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

Итак, открыть (или создать и открыть) файл можно с помощью функции fopen() :

Для построчного чтения файла используется функция fgets() :

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

Источник

Копирование, переименование и перемещение файлов в PHP

В статье продолжается описание способов работы с файлами в PHP и применение различных функций для управления ими. Информацию по созданию и записи файлов можно найти в статье «Создание, открытие, чтение, запись, удаление и проверка наличия файла в PHP». Здесь рассматривается работа с уже существующими файлами.

Копирование файла

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

Если файл скопирован, функция вернет значение True. Если копирование не выполнено, то будет возвращено значение False.

Если файл с заданным именем в директории уже есть, старый файл будет заменен новым с тем же именем. Поэтому, при копировании, стоит проверять, не существует ли файл в новой директории. Такую проверку выполняет функция file_exists.

Переименование и перемещение файла

Переименование и перемещение файла можно выполнить одной функцией rename.

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

При удачном выполнении функции, возвращается результат True, в противном случае False.

Для перемещения файла, задается новый путь к файлу:

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

Источник

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

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

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

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

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

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

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *