Php ftp find file

Php ftp find file

For those who dont want to deal with handling the connection once created, here is a simple class that allows you to call any ftp function as if it were an extended method. It automatically puts the ftp connection into the first argument slot (as all ftp functions require).

public function __construct ( $url ) <
$this -> conn = ftp_connect ( $url );
>

public function __call ( $func , $a ) <
if( strstr ( $func , ‘ftp_’ ) !== false && function_exists ( $func )) <
array_unshift ( $a , $this -> conn );
return call_user_func_array ( $func , $a );
>else <
// replace with your own error handler.
die( » $func is not a valid FTP function» );
>
>
>

// Example
$ftp = new ftp ( ‘ftp.example.com’ );
$ftp -> ftp_login ( ‘username’ , ‘password’ );
var_dump ( $ftp -> ftp_nlist ());
?>

Upload file to server via ftp.

$ftp_server = «» ;
$ftp_user_name = «» ;
$ftp_user_pass = «» ;
$file = «» ; //tobe uploaded
$remote_file = «» ;

// set up basic connection
$conn_id = ftp_connect ( $ftp_server );

// login with username and password
$login_result = ftp_login ( $conn_id , $ftp_user_name , $ftp_user_pass );

Читайте также:  String palindrome in python

// upload a file
if ( ftp_put ( $conn_id , $remote_file , $file , FTP_ASCII )) <
echo «successfully uploaded $file \n» ;
exit;
> else <
echo «There was a problem while uploading $file \n» ;
exit;
>
// close the connection
ftp_close ( $conn_id );
?>

In example 2 above you may need to set the system to to use pasv to get a result ie:

$ftp = new ftp(‘ftp.example.com’);
$ftp->ftp_login(‘username’,’password’);
$ftp->ftp_pasv(TRUE);
var_dump($ftp->ftp_nlist());

syntax error in the above example, ftp_nlist requires a directory parameter:

$ftp->ftp_nlist(‘.’); // retrieve contents of current directory

Источник

Работа с FTP в PHP

Протокол FTP – предназначен для передачи файлов на удаленный хост. В PHP функции для работы с FTP как правило всегда доступны и не требуется установка дополнительного расширения.

Как правило, при работе с FTP выполняются следующие действия:

  • Соединение с удаленным FTP-сервером (функция ftp_connect ).
  • Авторизация ( ftp_login ).
  • Действия с файлами.
  • Закрытие соединения ( ftp_close ).

Список директорий и файлов

Функция ftp_nlist ($ftp_stream, $directory) получает список имен файлов и директорий в виде массива, где $ftp_stream – идентификатор соединения с FTP-сервером, $directory – путь к директории (в примере переменная пуста – это соответствует домашней директории FTP-пользователя).

// Установка соединения $conn_id = ftp_connect('FTP сервер'); $login_result = ftp_login($conn_id, 'логин', 'пароль'); ftp_pasv($conn_id, true); // Получить содержимое директории $contents = ftp_nlist($conn_id, ''); print_r($contents); // Закрытие соединения ftp_close($conn_id);

Результат:

Array ( [0] => .bash_history [1] => .cache [2] => .gem [3] => .local [4] => .service [5] => snipp.ru [6] => demo ) 

Получить список с расширенной информацией поможет функция ftp_rawlist() .

// Установка соединения $conn_id = ftp_connect('FTP сервер'); $login_result = ftp_login($conn_id, 'логин', 'пароль'); ftp_pasv($conn_id, true); // Получить содержимое текущей директории $contents = ftp_rawlist($conn_id, '.'); print_r($contents); // Закрытие соединения ftp_close($conn_id);

Результат:

Array ( [0] => -rw------- 1 10378 601 1614 Oct 02 19:05 .bash_history [1] => drwx------ 2 10378 601 4096 Sep 30 16:53 .cache [2] => drwx------ 2 10378 601 4096 Sep 29 20:17 .gem [3] => drwx------ 2 10378 601 4096 Sep 29 20:17 .local [4] => dr-x------ 4 0 0 4096 Oct 01 13:04 .service [5] => drwx------ 3 0 0 4096 Dec 12 00:05 snipp.ru [6] => drwx------ 2 10378 601 4096 Nov 28 09:49 demo )

Для получения детальных данных о файлах в виде массива есть функция ftp_mlsd(), но она появилась в PHP 7 и не всегда работает, для более ранних версий PHP:

// Установка соединения $conn_id = ftp_connect('FTP сервер'); $login_result = ftp_login($conn_id, 'логин', 'пароль'); ftp_pasv($conn_id, true); // Получить содержимое текущей директории $contents = ftp_rawlist($conn_id, '.'); $items = array(); foreach ($contents as $row) < $chunks = preg_split("/\s+/", $row); $items[] = array( 'name' =>$chunks[8], 'chmod' => $chunks[0], 'number' => $chunks[1], 'user' => $chunks[2], 'group' => $chunks[3], 'size' => $chunks[4], 'month' => $chunks[5], 'day' => $chunks[6], 'time' => $chunks[7], 'type' => $chunks[0] === 'd' ? 'directory' : 'file' ); > print_r($items); // Закрытие соединения ftp_close($conn_id);

Результат:

Array( [0] => Array( [name] => .bash_history [chmod] => -rw------- [number] => 1 [user] => 10378 [group] => 601 [size] => 1614 [month] => Oct [day] => 02 [time] => 19:05 [type] => file ) [1] => Array( [name] => .cache [chmod] => drwx------ [number] => 2 [user] => 10378 [group] => 601 [size] => 4096 [month] => Sep [day] => 30 [time] => 16:53 [type] => directory ) [2] => Array( [name] => .gem [chmod] => drwx------ [number] => 2 [user] => 10378 [group] => 601 [size] => 4096 [month] => Sep [day] => 29 [time] => 20:17 [type] => directory ) [3] => Array( [name] => .local [chmod] => drwx------ [number] => 2 [user] => 10378 [group] => 601 [size] => 4096 [month] => Sep [day] => 29 [time] => 20:17 [type] => directory ) [4] => Array( [name] => .service [chmod] => dr-x------ [number] => 4 [user] => 0 [group] => 0 [size] => 4096 [month] => Oct [day] => 01 [time] => 13:04 [type] => directory ) [5] => Array( [name] => snipp.ru [chmod] => drwx------ [number] => 3 [user] => 0 [group] => 0 [size] => 4096 [month] => Dec [day] => 12 [time] => 00:05 [type] => directory ) [6] => Array( [name] => demo [chmod] => drwx------ [number] => 2 [user] => 10378 [group] => 601 [size] => 4096 [month] => Nov [day] => 28 [time] => 09:49 [type] => directory ) )

Поверка наличия файла/директории

Специальных функций для проверки существования файлов и директорий нет, поэтому можно использовать следующие варианты:

Проверить наличие файла на FTP-сервере

Функция ftp_size() возвращает «-1» если файл не найден.

// Установка соединения $conn_id = ftp_connect('FTP сервер'); $login_result = ftp_login($conn_id, 'логин', 'пароль'); ftp_pasv($conn_id, true); $file_size = ftp_size($conn_id, 'test.txt'); if ($file_size != -1) < echo 'Файл существует'; >else < echo 'Файл не найден'; >// Закрытие соединения ftp_close($conn_id);

Поверить наличие директории

Функция ftp_chdir() изменяет текущую директорию на FTP-сервере, возвращает false в случае возникновения ошибки.

// Установка соединения $conn_id = ftp_connect('FTP сервер'); $login_result = ftp_login($conn_id, 'логин', 'пароль'); ftp_pasv($conn_id, true); // Поверка директории function ftp_directory_exists($conn_id, $dir) < $origin = ftp_pwd($conn_id); if (@ftp_chdir($conn_id, $dir)) < ftp_chdir($conn_id, $origin); return true; >return false; > if (ftp_directory_exists($conn_id, 'path')) < echo 'Директория существует'; >else < echo 'Директория не существует'; >// Закрытие соединения ftp_close($conn_id);

Размер файла/директории

Получить размер файла

Функция ftp_size() возвращает размер файла в байтах.

// Установка соединения $conn_id = ftp_connect('FTP сервер'); $login_result = ftp_login($conn_id, 'логин', 'пароль'); ftp_pasv($conn_id, true); echo ftp_size($conn_id, 'test.txt'); // 38490 // Закрытие соединения ftp_close($conn_id);

Получить размер FTP директории

// Установка соединения $conn_id = ftp_connect('FTP сервер'); $login_result = ftp_login($conn_id, 'логин', 'пароль'); ftp_pasv($conn_id, true); // Получить размер директории function ftp_size_dir($conn_id, $directory) < $size = 0; $origin = ftp_pwd($conn_id); if (ftp_chdir($conn_id, $directory))< ftp_chdir($conn_id, $origin); $filelist = @ftp_nlist($conn_id, $directory); foreach($filelist as $file) < $size += ftp_size_dir($conn_id, $file); >> else < $size += ftp_size($conn_id, $directory); >return $size; > echo ftp_size_dir($conn_id, 'demo'); // 769588 // Закрытие соединения ftp_close($conn_id);

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

Время модификации файла

// Установка соединения $conn_id = ftp_connect('FTP сервер'); $login_result = ftp_login($conn_id, 'логин', 'пароль'); ftp_pasv($conn_id, true); echo ftp_mdtm($conn_id, 'test.txt'); // 1605347682 // Закрытие соединения ftp_close($conn_id);

Установка прав доступа

// Установка соединения $conn_id = ftp_connect('FTP сервер'); $login_result = ftp_login($conn_id, 'логин', 'пароль'); ftp_pasv($conn_id, true); if (ftp_chmod($conn_id, 0777, 'test.txt') !== false) < echo 'Права доступа к файлу успешно изменены'; >else < echo 'Не удалось изменить права доступа к файлу'; >// Закрытие соединения ftp_close($conn_id);

Создание файла/директории

Создание файла

// Установка соединения $conn_id = ftp_connect('FTP сервер'); $login_result = ftp_login($conn_id, 'логин', 'пароль'); ftp_pasv($conn_id, true); // Создание файла на сервере $text = 'Содержимое файла file.txt'; $file = fopen('php://temp', 'r+'); fwrite($file, $text); rewind($file); if (ftp_fput($conn_id, 'file.txt', $file, FTP_ASCII)) < echo 'Файл создан'; >else < echo 'Не удалось создать файл'; >// Закрытие соединения ftp_close($conn_id);

Создание директории

// Установка соединения $conn_id = ftp_connect('FTP сервер'); $login_result = ftp_login($conn_id, 'логин', 'пароль'); ftp_pasv($conn_id, true); // Cоздания директории if (ftp_mkdir($conn_id, 'new_patch')) < echo 'Директория создана'; >else < echo 'Не удалось создать директорию '; >// Закрытие соединения ftp_close($conn_id);

Переименование файла/директории

// Установка соединения $conn_id = ftp_connect('FTP сервер'); $login_result = ftp_login($conn_id, 'логин', 'пароль'); ftp_pasv($conn_id, true); // Переименовать файл и папку if (ftp_rename ($conn_id, 'test.txt', 'test_1.txt')) < echo 'Файл переименован'; >else < echo 'Не удалось переименовать файл'; >// Закрытие соединения ftp_close($conn_id);

Загрузка файлов

Загрузка файла на FTP-сервер

// Установка соединения $conn_id = ftp_connect('FTP сервер'); $login_result = ftp_login($conn_id, 'логин', 'пароль'); ftp_pasv($conn_id, true); // Загрузка файла $file = __DIR__ . '/test.txt'; if (ftp_put($conn_id, basename($file), $file, FTP_ASCII)) < echo 'Файл успешно загружен'; >else < echo 'Не удалось загрузить файл'; >// Закрытие соединения ftp_close($conn_id);

Загрузка директории с файлами на FTP-сервер

// Установка соединения $conn_id = ftp_connect('FTP сервер'); $login_result = ftp_login($conn_id, 'логин', 'пароль'); ftp_pasv($conn_id, true); // Закачать папку с файлами function ftp_upload_dir($conn_id, $src, $drc) < @ftp_mkdir($conn_id, $drc); $objs = scandir($src); foreach($objs as $obj) < if ($obj == '.' || $obj == '..') < continue; >elseif (is_dir($src . '/' . $obj)) < ftp_upload_dir($conn_id, $src . '/' . $obj, $drc . '/' . $obj); >else < @ftp_chdir($conn_id, $drc . '/' . $obj); ftp_put($conn_id, $drc . '/' . $obj, $src . '/' . $obj, FTP_BINARY); >> > ftp_upload_dir($conn_id, __DIR__ . '/trash', 'trash'); // Закрытие соединения ftp_close($conn_id);

Чтение файла в переменную

// Установка соединения $conn_id = ftp_connect('FTP сервер'); $login_result = ftp_login($conn_id, 'логин', 'пароль'); ftp_pasv($conn_id, true); // Прочитать файл в переменную $file = 'test.txt'; $handle = fopen('php://temp', 'r+'); if (ftp_fget($conn_id, $handle, $file, FTP_BINARY, 0)) < $fstats = fstat($handle); fseek($handle, 0); $contents = fread($handle, $fstats['size']); echo $contents; >else < echo 'Произошла ошибка при чтении файла'; >// Закрытие файла и соединения fclose($handle); ftp_close($conn_id);

Скачивание

Скачать файл с FTP-сервера

// Установка соединения $conn_id = ftp_connect('FTP сервер'); $login_result = ftp_login($conn_id, 'логин', 'пароль'); ftp_pasv($conn_id, true); // Скачать файл $file = 'test.txt'; $handle = fopen(__DIR__ . '/' . $file, 'w'); if (ftp_fget($conn_id, $handle, $file, FTP_ASCII, 0)) < echo 'Файл успешно скачен'; >else < echo 'Ошибка'; >// Закрытие файла и соединения fclose($handle); ftp_close($conn_id);

Скачать папку с файлами

// Установка соединения $conn_id = ftp_connect('FTP сервер'); $login_result = ftp_login($conn_id, 'логин', 'пароль'); ftp_pasv($conn_id, true); // Скачать папку с файлами function ftp_download_dir($conn_id, $src, $drc) < if (ftp_chdir($conn_id, $src) === FALSE) < return; >if (!(is_dir($drc))) < mkdir($drc); >chdir($drc); $contents = ftp_nlist($conn_id, '.'); foreach ($contents as $file) < if ($file == '.' || $file == '..') < continue; >if (@ftp_chdir($conn_id, $file)) < ftp_chdir($conn_id, ".."); ftp_download_dir($conn_id, $file, $drc . '/' . $file); >else < ftp_get($conn_id, $file, $file, FTP_BINARY); >> ftp_chdir($conn_id, '..'); chdir('..'); > ftp_download_dir($conn_id, 'trash', __DIR__ . '/trash'); // Закрытие соединения ftp_close($conn_id);

Удаление

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

Удалить файл с FTP-сервера

// Установка соединения $conn_id = ftp_connect('FTP сервер'); $login_result = ftp_login($conn_id, 'логин', 'пароль'); ftp_pasv($conn_id, true); // Удалить файл с FTP-сервера if (ftp_delete($conn_id, 'demo.txt')) < echo 'Файл удален'; >else < echo 'Не удалось файл'; >// Закрытие соединения ftp_close($conn_id);

Очистить директорию на FTP-сервере

// Установка соединения $conn_id = ftp_connect('FTP сервер'); $login_result = ftp_login($conn_id, 'логин', 'пароль'); ftp_pasv($conn_id, true); // Удаление содержимого директории function ftp_clear_dir($conn_id, $directory, $remove_parent = false) < if (!(@ftp_rmdir($conn_id, $directory) || @ftp_delete($conn_id, $directory))) < $filelist = @ftp_nlist($conn_id, $directory); foreach($filelist as $file) < ftp_clear_dir($conn_id, $file, true); >if ($remove_parent == true) < ftp_clear_dir($conn_id, $directory, true); >> > ftp_clear_dir($conn_id, 'trash'); // Закрытие соединения ftp_close($conn_id);

Удалить директорию со всем содержимым

// Установка соединения $conn_id = ftp_connect('FTP сервер'); $login_result = ftp_login($conn_id, 'логин', 'пароль'); ftp_pasv($conn_id, true); // Удаление директории со всем содержимым function ftp_remove_dir($conn_id, $directory) < if (!(@ftp_rmdir($conn_id, $directory) || @ftp_delete($conn_id, $directory))) < $filelist = @ftp_nlist($conn_id, $directory); foreach($filelist as $file) < ftp_remove_dir($conn_id, $file); >ftp_remove_dir($conn_id, $directory); > > ftp_remove_dir($conn_id, 'trash'); // Закрытие соединения ftp_close($conn_id);

Источник

Оцените статью