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-2024 The PHP Group
- My PHP.net
- Contact
- Other PHP.net sites
- Privacy policy
Скачать файл на сервере
Скачать указанный файл, можно передав следующие заголовки:
// Пусть к файлу $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
Комментарии
Авторизуйтесь, чтобы добавлять комментарии
Работа с удалёнными файлами
В случае, если опция allow_url_fopen включена в конфигурационном файле php.ini , вы можете использовать URL-адреса HTTP и FTP в большинстве функций, принимающих в качестве параметра имя файла. Также вы можете использовать ссылки в операторах include , include_once , require и require_once (для корректной работы этих функций должна быть включена опция allow_url_include). Дополнительную информацию о поддерживаемых в PHP протоколах вы можете найти в Поддерживаемые протоколы и обёртки.
Например, вы можете использовать это для того, чтобы открыть файл на удалённом сервере, извлечь необходимые вам данные и использовать их в запросе к базе данных или же просто отобразить их в дизайне вашего сайта.
Пример #1 Получение заголовка удалённой страницы
$file = fopen ( «http://www.example.com/» , «r» );
if (! $file ) echo «
Невозможно открыть удалённый файл.\n» ;
exit;
>
while (! feof ( $file )) $line = fgets ( $file , 1024 );
/* Сработает, только если заголовок и сопутствующие теги расположены в одной строке */
if ( preg_match ( «@\(.*)\@i» , $line , $out )) $title = $out [ 1 ];
break;
>
>
fclose ( $file );
?>?php
Вы также можете работать с удалёнными файлами, расположенными на FTP-сервере (подразумевается, что вы авторизовались с необходимыми для этого привилегиями). Таким образом вы можете только создавать новые файлы, но попытка перезаписать существующий файл при помощи функции fopen() приведёт к ошибке.
Для того, чтобы авторизоваться под пользователем, отличным от ‘anonymous’, вам необходимо указать логин (и, возможно, пароль) в адресной строке, например так: ‘ ftp://user:password@ftp.example.com/path/to/file ‘. (Вы можете использовать этот же синтаксис для доступа к удалённым файлам по HTTP -протоколу, если необходима Basic-аутентификация.)
Пример #2 Сохранение данных на удалённом сервере
$file = fopen ( «ftp://ftp.example.com/incoming/outputfile» , «w» );
if (! $file ) echo «
Невозможно перезаписать удалённый файл.\n» ;
exit;
>
/* Запись данных. */
fwrite ( $file , $_SERVER [ ‘HTTP_USER_AGENT’ ] . «\n» );
fclose ( $file );
?>?php
Замечание:
Глядя на приведённый выше пример, у вас может возникнуть идея использовать эту технику для ведения удалённого лог-файла. К сожалению, это нереализуемо, поскольку попытка записи в уже существующий удалённый файл при помощи функции fopen() приведёт к ошибке. В реализации распределённого логирования, возможно, вам поможет функция syslog() .
User Contributed Notes
There are no user contributed notes for this page.
- Особенности
- HTTP-аутентификация в PHP
- Cookies
- Сессии
- Работа с XForms
- Загрузка файлов на сервер
- Работа с удалёнными файлами
- Работа с соединениями
- Постоянные соединения с базами данных
- Работа с PHP из командной строки
- Сборка мусора
- Динамическая трассировка DTrace
- Copyright © 2001-2024 The PHP Group
- My PHP.net
- Contact
- Other PHP.net sites
- Privacy policy
Загрузка файла с сервера
Помигите организовать загрузку файла. Что я только не перпробывал, но браузер настойчиво пытается открыть файл, а не скачать.
Отслеживать
141 1 1 золотой знак 2 2 серебряных знака 9 9 бронзовых знаков
задан 16 июл 2012 в 10:47
alexxxer1234 alexxxer1234
73 1 1 золотой знак 2 2 серебряных знака 11 11 бронзовых знаков
16 июл 2012 в 10:49вы о header(‘Location: ‘.$fileName)? как ни странно редирект не работает вообще. Тоесть игнорируется абсолютно, как будто там его и нет. header(‘Location: ya.ru’) -даже на это ноль эмоций..
16 июл 2012 в 11:04
Вообще-то не редирект, а указание типа файла, чтобы отдать его на скачку.
16 июл 2012 в 11:402 ответа 2
Сортировка: Сброс на вариант по умолчанию
$file = '/path/to/file.jpg'; header('Content-Type: image/jpeg'); header('Content-Disposition: attachment; filename="file.jpg"'); readfile($file);Имя файла и Content-type указываете для своего конкретного файла.
Отслеживать
ответ дан 16 июл 2012 в 12:49
125 7 7 бронзовых знаков$file_name=$myrow['file']; header("Content-Length: ".filesize($file_name)); header("Content-Disposition: attachment; filename=".$file_name); header("Content-Type: application/x-force-download; name=\"".$file_name."\""); dfile($file_name);качает файлы любого расширения
Отслеживать
ответ дан 19 июл 2012 в 5:19
51 5 5 бронзовых знаков-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.17.3574