Работаем с FTP на уровне PHP
slissovski@hot.ee
Я почти на 100% уверен , что вы уже работали с FTP. Сейчас я поведаю, как работать с ним на уровне языка PHP. Итак , для начала вам необходимо вспомнить, как работать в PHP с обычными файлами: сначала надо открыть файл, выполнить с ним какие-либо действия и, наконец, закрыть его. Причем при записи и чтении файла вы не обойдетесь без помощи функции "fopen" (если только вы не используете функцию "file").
Итак, теперь, собственно, про сам FTP.
Работа с FTP начинается с открытия "потока" (stream) и делается это функцией "ftp_connect()" (аналогично функции fopen в работе с файлами).
ftp_connect("имя хоста","порт","timeout");
Вместо "имя хоста" пропишите имя сайта, к которому вы хотите подключиться. В параметре "порт" укажите ftp-порт удаленного сервера (обычно "21"), а в "timeout" - на какое время (в секундах) вы хотите открыть соединение. Результат выполнения функции нужно присвоить какой-либо переменной, в нашем примере это переменная $open.
Пример:
$open = ftp_connect("ftp.server.com", 21, 30);
Для входа по вашему аккаунту на сервере воспользуйтесь функцией "ftp_login()".
Пример:
ftp_login($open, "your_username", "your_password");
А лучше это сделать следующим образом:
if (!ftp_login($open, "your_username", "your_password")) exit("Не могу соединиться");
Параметр "your_username" должен содержать ваш username для входа, а "your_password" - соответственно, ваш пароль. Переменная $open является идентификатором соединения с ftp узлом, к которому вы подключились с помошью "ftp_connect".
Все. Если вышеуказанный код не выдал вам никаких ошибок, значит вы успешно подключились к ftp узлу.
А теперь поговорим о функциях работы с FTP:
Функция ftp_mkdir() создаёт директорию, пример:
ftp_mkdir($open,"test"); //Создали папку "test".
Функция ftp_rmdir удалит папку:
ftp_rmdir($open,"test"); //Удалили ранее созданную нами папку папку "test".
Переименовать файл можно функцией "ftp_rename()":
ftp_rename($open,"test.txt","ok_test.txt");
Мы переименовали "test.txt" в "ok_test.txt" , вместо "test.txt" может быть любой другой файл.
Просмотреть содержимое вашего каталога можно следующим образом:
$site = ftp_nlist($open,""); $d = 5; for ($i = 0; $i < $d; $i++) echo $site[$i];
Функция "ftp_nlist()" возвращает один файл из вашего каталога , если вам нужно просмотреть все файлы, то ее сдедует использовать в цикле, как сделано выше.
Функция "ftp_size()" возвращает размер файла, либо значение "-1" в случае неудачи:
echo ftp_size($open, "test.txt");
Вам может понадобится узнать дату последнего изменения файла . Это осуществимо с помощью функции ftp_mdtm (учтите, что время возвращается в UNIX-формате):
$mod = ftp_mdtm($open,"test.txt"); echo $mod;
Заметьте, функция не работает с директориями. Для удаления файла воспользуйтесь функцией ftp_delete(), например:
ftp_delete($open,"test.txt");
Закрывается же соединение функцией "ftp_close()".
ftp_close($open);
Эта функция аналогична функции fclose() при работе с файлами, в нашем примере идентификатор соединения находится в переменной "$open". Теперь просто фрагмент бессмысленного кода :
ftp_connect("ftp.hot.ee","21","100"); if(!ftp_login($open,"prosto_user","ahahaha")) exit("Не могу соединиться"); mkdir($open,"test"); //Создали директорию rmdir($open,"test"); //Удалили директорию rename($open,"test.txt","test_i_eche_raz_test.txt"); //Переименовали файл ftp_close($open); //Закрыли поток
Всё, на этом первая глава заканчивается . Здесь дано только представление о возможностях PHP относительно FTP, если как говорится руки дойдут, то напишу вторую главу про FTP , в которой расскажу всё более подробно.
Спасибо за внимание :)
Оставить комментарий
Комментарии
Не секрет что дефолтный таймаут PHP скрипта 30 секунд.
т.е. в эти 30 секунд надо вложится в типовую процедуру
1. подключиться
2. залить файл
3. отключиться.
есть очень большая вероятность что на моменте заливки файла скрипт слетит по таймауту.
Кончено, можно выставить время побольше (если позволит провайдер) через set_time_limit(), но по логике вещей правильнее было бы:
1. получить дескриптов ФТП соединения.
2. сериализировать (serialize()) его, например, в сессию... (в других скриптах (или при повторном вызове этого же) доставать и восстанавливать дескриптор из сессии (unserialize()))
3. работать с фтп дальше. типа заливать следующий файл и все такое...
4. завернуть подобную прцедуру как обработчик для ajax интерфейса. кстати вопрос с прогрессбаром всплывает...
5. закрывать по команде.
в общем, хотелось бы видеть живой пример фтп менеджера. Думаю, будет востребовано во многих приложениях.