Скачивание файлов php
Ниже в этой статье вы можете увидеть универсальный скрипт для скачивание файлов на php, но давайте рассмотрим одну проблему и как скрипт её устраняет.
Если этот скрипт покажется вам сложным, советую посмотреть, как на простом примере реализуется скрипт cкачивания изображений и текстовых файлов на php.
Многие пользователи сталкиваются с одной необычной проблемой. К примеру необходимо реализовать скачивания mp3-файлов. С одной стороны, сделать это очень просто: необходимо лишь реализовать скрипт загрузки файлов, который также будет вести подсчет числу скачиваний.
После проверки выясняется, что файлы без проблем скачиваются. Однако вскоре возникает одна проблема: Internet Explorer не спрашивает, скачать файл или просто открыть, а запускает медиа-плеер.
Та же проблема встречается с файлами и других форматов. Пользователям не всегда нужно, чтобы файлы pdf, doc или gif способствовали открытию соответствующих программ. Для решения этой проблемы существует PHP-скрипт, предназначенный для скачивания файлов.
PHP скрипт для скачивания файлов:
elseif ( ! file_exists( $filename ) ) // проверяем файл на существование < echo "ОШИБКА: данного файла не существует."; exit; >; switch( $file_extension ) < case "pdf": $ctype="application/pdf"; break; case "exe": $ctype="application/octet-stream"; break; case "zip": $ctype="application/zip"; break; case "doc": $ctype="application/msword"; break; case "xls": $ctype="application/vnd.ms-excel"; break; case "ppt": $ctype="application/vnd.ms-powerpoint"; break; case "mp3": $ctype="audio/mp3"; break; case "gif": $ctype="image/gif"; break; case "png": $ctype="image/png"; break; case "jpeg": case "jpg": $ctype="image/jpg"; break; default: $ctype="application/force-download"; >header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: private",false); // нужен для Explorer header("Content-Type: $ctype"); header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" ); header("Content-Transfer-Encoding: binary"); // нужно сделать подсчет размера файла его пути header("Content-Length: ".filesize($filename)); readfile("$filename"); exit(); ?>
Этот скрипт будет делать пользователям запрос, которые смогут выбрать, сохранить тот или иной файл или открыть его. Вам необходимо создать файл dl_save.php, а затем скопировать в него нужный код. Ссылка, которая ведет на скачивание файла, выглядит примерно следующим образом:
Ссылку на скачивания файла оформлять нужно (примерно) так:
При этом file.mp3 – это ваш файл. При необходимости вы можете прописать к нему полный путь. А с помощью редиректа это выглядит так:
header("Location: dl_save.php?filename=file.mp3");
Получение PHP
Этот раздел содержит информацию о том, где получить PHP и вопросы, касающиеся OC.
- Где я могу взять PHP?
- Доступны ли прекомпилированная бинарная версия?
- Где я могу достать библиотеки, необходимые для компиляции некоторых дополнительных модулей PHP?
- Как подключить эти библиотеки?
- Я скачал последнюю версию исходных кодов PHP из Git-репозитория на мою машину Windows, как мне их скомпилировать?
- Где найти файл совместимости браузеров ?
- Что означает потокобезопасность при загрузке PHP?
Где я могу взять PHP?
Вы можете скачать PHP с любого сайта из сети сайтов PHP. Сайты сети можно найти на » https://www.php.net/. Вы также можете воспользоваться анонимным Git для получения самой последней версии исходников. За подробностями обращайтесь к » https://www.php.net/git.php.
Доступны ли прекомпилированная бинарная версия?
Мы распространяем прекомпилированные бинарники только для Windows, так как мы не в состоянии компилировать PHP со всеми возможными комбинациями модулей, даже для самых основных платформ Linux/Unix. Также заметьте, что на сегодня многие дистрибутивы Linux поставляются с PHP. Бинарники для Windows можно скачать с нашей страницы » Downloads, для бинарников под Linux, пожалуйста, посетите сайт вашего дистрибутива.
Где я могу достать библиотеки, необходимые для компиляции некоторых дополнительных модулей PHP?
Замечание: Звёздочкой (*) помечены библиотеки, которые исходя из нашего опыта являются потоко-небезопасными; эти библиотеки не рекомендуется использовать в многопоточной среде.
- » LDAP (Unix).
- » LDAP (Unix/Win) : Mozilla Directory (LDAP) SDK
- » бесплатный LDAP сервер.
- » Berkeley DB2 (Unix/Win) : http://www.sleepycat.com/.
- » SNMP* (Unix): .
- » GD (Unix/Win).
- » mSQL* (Unix).
- » PostgreSQL (Unix).
- » IMAP* (Win/Unix).
- » Sybase-CT* (Linux, libc5) : Available locally.
- » FreeType (libttf):.
- » ZLib (Unix/Win32).
- » expat XML parser (Unix/Win32).
- » PDFLib.
- » mcrypt.
- » mhash.
- » t1lib.
- » dmalloc.
- » aspell.
- » readline.
Как подключить эти библиотеки?
Вам необходимо следовать инструкциям, сопровождающим библиотеку. При запуске скрипта ‘configure’, некоторые библиотеки (такие как библиотека GD) находятся автоматически, другие должны быть включены с помощью опции ‘ —with-EXTENSION ‘ в ‘ configure ‘. Запустите ‘ configure —help ‘ для получения списка всех опций.
Я скачал последнюю версию исходных кодов PHP из Git-репозитория на мою машину Windows, как мне их скомпилировать?
Изучите раздел руководства, содержащий актуальное » пошаговое руководство по сборке
Где найти файл совместимости браузеров ?
Файл browscap.ini можно скачать с » http://browscap.org/.
Что означает потокобезопасность при загрузке PHP?
Потокобезопасность означает, что данный бинарный файл может работать с многопоточным веб-сервером, например таким, как Apache 2 под Windows. Потокобезопасность обеспечивается хранением локальных копий в каждом потоке, так что данные не вступят в противоречие с другим потокам.
Так что же выбрать? Если вы хотите использовать PHP в качестве бинарного файла CGI, то вам не нужна потокобезопасность, так как бинарный файл будет запускаться при каждом запросе. Для многопоточных веб-серверов, таких как IIS5 и IIS6, вам понадобится поточная версия PHP.
Скачать файл с другого сайта по url и загрузить по ftp
Есть ссылка на файл, хочу его загрузить на другой сервер (не тот, с которого запускаю PHP скрипт) по ftp. Файл из ссылки можно передать в ftp_put() ?
Отслеживать
5,821 3 3 золотых знака 15 15 серебряных знаков 24 24 бронзовых знака
задан 13 июн 2018 в 14:26
7 10 10 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Конечно, например с помощью этой функции:
else < return false; >ftp_put($connection, $remote_file, $local_file, FTP_BINARY); ftp_close($connection); return true; >
uploadFTP("127.0.0.1", "admin", "mydog123", "C:\\report.txt", "meeting/tuesday/report.txt");
Если нужно скачать файл по ссылке — то для этого подойдет функция file_get_contents($url)
file_put_contents("report.txt", fopen("http://someurl/report.txt", 'r'));
Как скачать файл средствами php?
В общем-то необходимо в коде PHP при срабатывании определённого условия начать скачку файла. Как это можно реализовать?
Под скачкой файла я подразумеваю:
Вывести в браузер посетителя сайта диалоговое окно загрузки файла на его компьютер (или если у него в браузере установлена автоматическая загрузка — загрузить файл на устройство посетителя)
- Вопрос задан более трёх лет назад
- 3961 просмотр
6 комментариев
Простой 6 комментариев