php сохранить файл по ссылке
Скачать файл с URL, используя PHP
Существует множество подходов для загрузки файла с URL-адреса, некоторые из них обсуждаются ниже:
Способ 1: использование функции file_get_contents () : функция file_get_contents () используется для чтения файла в строку. Эта функция использует методы отображения памяти, которые поддерживаются сервером, и, таким образом, повышает производительность, делая ее предпочтительным способом чтения содержимого файла.
Синтаксис:
Программа 1:
// Инициализируем URL файла в переменную
// Используем функцию basename () для возврата базового имени файла
// Используем функцию file_get_contents () для получения файла
// из url и используем функцию file_put_contents () для
// сохранить файл, используя базовое имя
echo «File downloaded successfully» ;
echo «File downloading failed.» ;
Выход:
Перед запуском программы:
После запуска программы:
Метод 2: Использование PHP Curl: cURL расшифровывается как «Клиент для URL», первоначально с URL, прописанным в верхнем регистре, чтобы было очевидно, что он имеет дело с URL. Это произносится как «см. URL». В проекте cURL есть два продукта libcurl и curl.
Шаги для загрузки файла:
Пример:
// Инициализируем URL файла в переменную
// Инициализируем сессию cURL
// Инициализировать имя каталога, где
// файл будет сохранен
// Используем функцию basename () для возврата
// базовое имя файла
// Сохранить файл в папку
// Он устанавливает опцию для передачи cURL
// Выполнить сеанс cURL
// Закрывает сеанс cURL и освобождает все ресурсы
Выход:
Перед запуском программы:
После запуска программы:
PHP class для скачки и закачки файлов на сервер
Предисловие
В интернете есть много информации о том как скачивать файлы с сервера и загружать файлы на сервер, а также между серверами. Но нигде нет простого решения которое было бы более ли менее универсально.
И лишь благодаря единичным статьям, кусочкам информации с форумов и всяким комментариям удалось собрать пазл воедино. Я не утверждаю что мое решение полностью универсально, но очень удобное во многих случаях, хотя это вам решать.
Если у кого-либо возникнет желание улучшить мое решение этого вопроса и хватает знаний в этом направлении, то я буду рад, если вы сделаете какие-либо исправления или добавления к коду который лежит в открытом доступе на GitHub.
А теперь к делу, функции класса CargaDes:
Для начала нужно скачать и подключить класс CargaDes:
1. Отдача файла через браузер без показа его места хранения с возможностью докачки и регулирования скорости
Этот метод очень похож на Drupal и иже с ним:
Я добавил еще отдачу с помощью Apache, но должна быть включена директива XSendFile On
Сразу после выполнения метода браузер выдаст окно для сохранения файла
2. Загрузка файла/ов на сервер через браузер с индикатором прогресса
После выполнения метода появится кнопка для выбора файлов и кнопка для загрузки файлов. Индикатор будет появляться для каждого выбранного файла в отдельности.
3. Скачивание файлов с удаленного сервера на свой сервер
4. Отдаем файл на удаленный сервер со своего сервера
По итогу хочу сказать
Если этот класс поможет хотя бы одному человеку я буду очень рад этому. Как я уже говорил в начале буду рад конструктивной критике и дополнениям которые могут привести к улучшению класса. Ссылка на CargaDes.class.
Изменил в статье способы использования класса. И добавил описание того что изменилось в классе.
Вот закончил работу над ошибками, если это можно так назвать.
Что было не сделано:
В целом я постарался исправить, то о чем говорили в комментариях, если будут найдены еще какие либо недочеты или ошибки — пишите постараюсь исправить.
Благодарю за конструктивную критику webdevium и alutskevich, если бы мог, то плюсанул бы вам обязательно.
Так же благодарю всех остальных т.к. у меня появилось понимание моей главной ошибки и родилось пару идей.
Отдаем файлы эффективно с помощью 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):
Download File to server from URL
Well, this one seems quite simple, and it is. All you have to do to download a file to your server is:
Only there is one problem. What if you have a large file, like 100mb. Then, you will run out of memory, and not be able to download the file.
What I want is a way to write the file to the disk as I am downloading it. That way, I can download bigger files, without running into memory problems.
12 Answers 12
I’m not sure but I believe with the CURLOPT_FILE option it writes as it pulls the data, ie. not buffered.
prodigitalson’s answer didn’t work for me. I got missing fopen in CURLOPT_FILE more details.
This worked for me, including local urls:
Downloader :
You can find examples from here.
Use a simple method in php copy()
Note: if the destination file already exists, it will be overwritten
Note: You need to set permission 777 for the destination folder. Use this method when you are downloading to your local machine.
Special Note: 777 is a permission in Unix based system with full read/write/execute permission to owner, group and everyone. In general we give this permission to assets which are not much needed to be hidden from public on a web server. Example: images folder.
Скачивание файлов php
Ниже в этой статье вы можете увидеть универсальный скрипт для скачивание файлов на php, но давайте рассмотрим одну проблему и как скрипт её устраняет.
Если этот скрипт покажется вам сложным, советую посмотреть, как на простом примере реализуется скрипт cкачивания изображений и текстовых файлов на php.
Многие пользователи сталкиваются с одной необычной проблемой. К примеру необходимо реализовать скачивания mp3-файлов. С одной стороны, сделать это очень просто: необходимо лишь реализовать скрипт загрузки файлов, который также будет вести подсчет числу скачиваний.
После проверки выясняется, что файлы без проблем скачиваются. Однако вскоре возникает одна проблема: Internet Explorer не спрашивает, скачать файл или просто открыть, а запускает медиа-плеер.
Та же проблема встречается с файлами и других форматов. Пользователям не всегда нужно, чтобы файлы pdf, doc или gif способствовали открытию соответствующих программ. Для решения этой проблемы существует PHP-скрипт, предназначенный для скачивания файлов.
PHP скрипт для скачивания файлов:
Этот скрипт будет делать пользователям запрос, которые смогут выбрать, сохранить тот или иной файл или открыть его. Вам необходимо создать файл dl_save.php, а затем скопировать в него нужный код. Ссылка, которая ведет на скачивание файла, выглядит примерно следующим образом:
Ссылку на скачивания файла оформлять нужно (примерно) так: