Скачать файл на сервере
Скачать указанный файл, можно передав следующие заголовки:
// Пусть к файлу $file_path = 'image.jpg'; // узнать MIME файла $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime = finfo_file($finfo, $file_path); // Отправка заголовков для скачиваний файла header('Content-Disposition: attachment; filename="'.basename($file_path).'"'); header('Content-Type: '.$mime); header('Content-Length: '.filesize($file_path)); header('Connection: close'); echo file_get_contents($file_path);
Заголовок Content-Disposition: attachment отвечает за скачивание файла. В поле filename указывается имя файла, под которым браузер предложит сохранить файл.
В параметре Content-Type рекомендуется указывать реальный MIME-файла, т.к. браузеры могут подставить нужные программы для сохранения файла. В данном параметре также часто указывают «application/octet-stream», который означает, что формат файла не указан.
Также есть параметр Content-Type: application/force-download , но его не рекомндуется использовать, т.к. данный MIME не является стандартном, и некоторые браузеры могут его не обработать.
Скачиваемый файл будет содержать содержимое текущей страницы, поэтому в конце кода выводится исходный код картинки через функцию file_get_contents() .
Обновлено: 20 сентября 2021
Комментарии
Авторизуйтесь, чтобы добавлять комментарии
Скачать файл с сервера (PHP)
Для работы с cURL, в PHP есть библиотека libcurl , при помощи которой можно скачивать файлы с удаленных серверов.
Проще всего написать функцию curl_download() и использовать ее для скачивания изображений, архивов и других файлов. Нам понадобится работающая библиотека libcurl и опция опция CURLOPT_FILE .
Функция curl_download()
✖ ❤ Мне помогла статья 4 оценки
16339 просмотров 3 комментария Артём Фёдоров 28 января 2011
Категории
Читайте также
- Как на PHP скачать файл
- Как записать массив в файл (PHP)
- Как скопировать файл (PHP)
- Как создать файл (PHP)
- Как очистить файл не удаляя его (PHP)
- Как очистить папку (PHP)
- Как проверить права доступа (PHP)
- Дата изменения файла (PHP)
- Singleton Trait (PHP)
- Редирект (PHP)
- Склонение числительных на PHP
- Транслит (PHP)
Комментарии
07 декабря 2021 в 09:05
А как скачать с ubuntu-машины, где указать логин и пароль ?
Alexander Bulatov 20 февраля 2018 в 11:33
Спасибо большое, Добрый Человек!
Артём Фёдоров 08 мая 2018 в 11:53
Alexander Bulatov, без проблем!
Написать комментарий
© Экспэнч 2010-2023
При полном или частичном копировании статей сайта указывайте пожалуйста ссылку на источник
Хотите узнать больше информации, пишите на: artem@expange.ru
Вход на сайт
Введите данные указанные при регистрации:
Социальные сети
Вы можете быстро войти через социальные сети:
Загрузка файла на сервер и скачивание файла с сервера в PHP
С помощью PHP можно загружать файлы на сервер и скачивать файлы с сервера. То есть, с помощью PHP можно легко организовать хранилище файлов, галерею.
Разберём, как создать на PHP загрузчик файлов на сервер
Чтобы организовать загрузку файла на сервер в PHP скрипте, необходимо использовать multipart-форму с полем ввода типа file. В атрибуте формы enctype необходимо указать multipart/form-data
Общий вид формы загрузки файла в PHP
Здесь используется поле ввода для файла input type=»file» Использование этого поля отображает на веб странице форму загрузки файла. upload_file — это имя загружаемого файла.
При обработке формы вся информация о файле в PHP записывается в глобальный массив $_FILES Основные значения глобального массива $_FILES:
$_FILES[‘upload_file’][‘name’] — имя файла до его отправки на сервер
$_FILES[‘upload_file’][‘size’] — размер загруженного файла в байтах;
$_FILES[‘upload_file’][‘type’] — тип загруженного файла
$_FILES[‘upload_file’][‘tmp_name’] — имя загруженного файла во временном каталоге
$_FILES[‘upload_file’][‘error’] — Код ошибки, которая может возникнуть при загрузке файла.
Указываем путь, куда необходимо загрузить файл
$переменная файла = «путь».$_FILES[‘upload_file’][‘name’];
Перед загрузкой файла в указанную папку, для безопасности он сохраняется во временную директорию. Путь к временному файлу указан в глобальном массиве $_FILES[‘upload_file’][‘tmp_name’]
Чтобы файл загрузить в нужную папку из временной директории, используем команду
move_uploaded_file($_FILES[‘upload_file’][‘tmp_name’], $переменная файла);
После загрузки файла делаем проверку на существование загружаемого файла и выводим информацию о загруженном файле.
if(isset($_FILES[‘upload_file’][‘name’]))
echo «Загруженный файл: «.$_FILES[‘upload_file’][‘name’].»«;
echo «Размер: «.$_FILES[‘upload_file’][‘size’].»байт»;
>
Полный PHP код скрипта загрузчика файла. Для примера загружается файл с именем itrobo.jpg, после загрузки файла выводится информация о загруженном файле и загруженный файл на веб страницу.
$file = «upload/».$_FILES[‘upload_file’][‘name’];
move_uploaded_file($_FILES[‘upload_file’][‘tmp_name’], $file);
if(isset($_FILES[‘upload_file’][‘name’]))
echo «Загруженный файл: «.$_FILES[‘upload_file’][‘name’].»«;
echo «Размер: «.$_FILES[‘upload_file’][‘size’].»байт»;
echo ‘

‘;
>
?>
Пример вывода скрипта на веб страницу


Скачивание файла с сервера с помощью PHP
Чтобы скачать файл с сервера в PHP, используется следующая конструкция
$переменная файла = путь к файлу;
header(‘Content-Type: тип файла);
header(‘Content-Disposition: attachment; filename=»имя файла»‘);
readfile($переменная файла);
Пример скачивания файла с сервера с помощью PHP
$file = ‘upload/itrobo.jpg’;
header(‘Content-Type: image/jpeg’);
header(‘Content-Disposition: attachment; filename=»itrobo.jpg»‘);
Напишем пример PHP скрипта, который выводит на веб страницу изображение с кнопкой «Загрузить!». При нажатии на кнопку «Загрузить!», картинка скачивается с веб сервера на компьютер.
Скрипты, в которых идёт вызов команды «Header», необходимо сохранять в кодировке UTF-8 без BOM. Это можно сделать с помощью редактора Notepad++. PHP обработчик следует писать в самом начале страницы.
Создаём HTML форму с кнопкой «Загрузить!». Она нужна для того, чтобы загрузить PHP обработчик скачивания файлов. Размещаем изображение на веб странице.
Тег для вывода изображения в форме. Подробнее о работе с формами в PHP
Напишем PHP обработчик кнопки Если кнопка нажата, скачиваем файл
if(isset($_POST[‘info’])) $file = ‘upload/itrobo.jpg’;
header(‘Content-Type: image/jpeg’);
header(‘Content-Disposition: attachment; filename=»itrobo.jpg»‘);
readfile($file);
>
?>
Полный код PHP скрипта для скачивания файла с сервера
if(isset($_POST[‘info’])) $file = ‘upload/flower.jpg’;
header(‘Content-Type: image/jpeg’);
header(‘Content-Disposition: attachment; filename=»itrobo.jpg»‘);
readfile($file);
>
?>

Пример вывода скрипта на веб страницу 
Комментарии ( 0 )
Нет комментариев. Ваш будет первым!
ftp_fget
ftp_fget() загружает файл remote_filename с FTP-сервера и записывает его в переданный файловый дескриптор.
Список параметров
Открытый файловый дескриптор, в который будут сохранены данные.
Путь к удалённому файлу.
Режим передачи. Должен быть либо FTP_ASCII , либо FTP_BINARY .
Позиция начала загрузки в удалённом файле.
Возвращаемые значения
Возвращает true в случае успешного выполнения или false в случае возникновения ошибки.
Список изменений
| Версия | Описание |
|---|---|
| 8.1.0 | Параметр ftp теперь ожидает экземпляр FTP\Connection ; ранее ожидался ресурс (resource). |
| 7.3.0 | Теперь параметр mode опционален. Раньше он был обязательным. |
Примеры
Пример #1 Пример использования ftp_fget()
// путь к удалённому файлу
$remote_file = ‘somefile.txt’ ;
$local_file = ‘localfile.txt’ ;
// открываем файл для записи
$handle = fopen ( $local_file , ‘w’ );
// установка соединения
$ftp = ftp_connect ( $ftp_server );
// вход с именем пользователя и паролем
$login_result = ftp_login ( $ftp , $ftp_user_name , $ftp_user_pass );
// пытаемся скачать файл и сохранить его в $handle
if ( ftp_fget ( $ftp , $handle , $remote_file , FTP_ASCII , 0 )) echo «Произведена запись в $local_file \n» ;
> else echo «При скачивании $remote_file в $local_file произошла проблема\n» ;
>
// закрытие соединения и локального файла
ftp_close ( $ftp );
fclose ( $handle );
?>
Смотрите также
- ftp_get() — Скачивает файл с FTP-сервера
- ftp_nb_get() — Скачивает файл с FTP-сервера в асинхронном режиме и сохраняет его в локальный файл
- ftp_nb_fget() — Скачивает файл с FTP-сервера в асинхронном режиме и сохраняет его в предварительно открытом файле
User Contributed Notes 6 notes
15 years ago
Another ftp_get_contents approach, using a temperary stream handler. Returns file contents as string.
function ftp_get_contents ( $conn_id , $filename ,
//Create temp handler:
$tempHandle = fopen ( ‘php://temp’ , ‘r+’ );
//Get file from FTP assuming that it exists:
ftp_fget ( $conn_id , $tempHandle , $filename , FTP_ASCII , 0 ));
//Getting detailed stats to check filesize:
$fstats = fstat ( $tempHandle );
return fread ( $tempHandle , $fstats [ ‘size’ ]);
>
?>
15 years ago
/**
* Function returns contents via FTP connection and returns it as string (right version. )
*/
function ftp_get_contents ( $conn_id , $filename ) <
//Create temp handler:
$tempHandle = fopen ( ‘php://temp’ , ‘r+’ );
?php>
//Get file from FTP:
if (@ ftp_fget ( $conn_id , $tempHandle , $filename , FTP_ASCII , 0 )) <
rewind ( $tempHandle );
return stream_get_contents ( $tempHandle );
> else <
return false ;
>
>
?>
6 years ago
if you are using windows ftp-server with cp1251 encoding there are some troubles with russian «я» in filename\path.
php use telnet to connect ftp-server and there are special symbol with code 255 in telnet protocol. You can try use ftp_raw($connection, ‘OPTS UTF8 ON’); and work in utf-8 (if server provides it).
P.S. sorry for my bad english
10 years ago
You might need to use ftp_pasv() if you’re behind a firewall and receiving odd timeouts, file creation but now local data saving, etc.
15 years ago
I was in need to synchronize two folders on two separate servers, one is a Windows server, and the other is a Linux server. I created this short and sweet function to help me do this. PLEASE NOTICE: This will not copy folders, and probably will fail if remote folder contains anything else than files.
function sync_folders($host, $port, $username, $password, $remote_dir, $local_dir, $passive_mode = true) $conn_id = ftp_connect($host, $port);
if (!$conn_id) return false; # fail to connect
if (!ftp_login($conn_id, $username, $password)) < ftp_close($conn_id); return false; ># fail to login
ftp_pasv($conn_id, $passive_mode);
if (!ftp_chdir($conn_id, $remote_dir)) < ftp_close($conn_id); return false; ># fail to change dir
if (substr($local_dir, -1) != ‘/’) $local_dir .= ‘/’;
$list = ftp_nlist($conn_id, ‘.’);
sort($list);
foreach ($list as $file) if (!file_exists($local_dir . $file)) $is_copied = ftp_get($conn_id, $local_dir . $file, $file, FTP_BINARY);
>
>
ftp_close($conn_id);
return true;
>
21 years ago
If you suply only a filename to the second parameter of function the ftp_get will open a pointer to the local file creating it and write to it.It’s ok if your server dont execute for to mutch time and you dont get too many files but if you do it too many times the pointers created by ftp_get will not be closed and will end your opened files capacity at your server making it to do not open any more files until you restart it.
- Copyright © 2001-2023 The PHP Group
- My PHP.net
- Contact
- Other PHP.net sites
- Privacy policy
