Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

PHP и активный FTP-сервер

333
12 апреля 2007 года
GHopper
200 / / 28.12.2004
Здравствйте!
Нужно раз в сутки файлик выкладывать на разные фтп-сервера. Все работает, только вот один сервер никак не хочет получать файл! Работаю с фтп через CURL (пробовал через стандартные ftp-функции PHP, но они тоже не работают). Начал рыть:
Код:
1:Connect ok!
1:PWD
1:257 "/"
1:Get directory
1:TYPE A
1:200 Switching to ASCII mode.
1:PASV
1:550 Permission denied.
1:PORT 192,168,1,2,4,129
1:200 PORT command successful. Consider using PASV.
1:LIST
1:150 Here comes the directory listing.
1:Download
1:Waiting for server...
1:226 Directory send OK.


т.е. клиент пытается перейти в пассивный режим, а сервер этого сделать не позволяет. Вопрос: как работать на php с активным FTP-сервером?
239
12 апреля 2007 года
Dolonet
1.7K / / 20.05.2000
Возможно, поможет явный перевод в активный режим?
 
Код:
<?php
$pasv_flag = true;
ftp_pasv($connect, $pasv_flag);
?>
333
12 апреля 2007 года
GHopper
200 / / 28.12.2004
помогло. спасибо
239
13 апреля 2007 года
Dolonet
1.7K / / 20.05.2000
Пожалуйста. Для этого я тут и есть )
333
13 апреля 2007 года
GHopper
200 / / 28.12.2004
ничего не понимаю...
сегодня ночью проверил - все работает. Теперь делаю тоже самое - болт!
$pasv_flag = false;
if (!ftp_pasv($conn_id, $pasv_flag))
echo "ftp_pasv() error!<br>";
else
echo "ftp_pasv($pasv_flag) ok!<br>";

проходит без ошибок, а вот

$upload = ftp_put($conn_id, "del.me", "local.file", FTP_BINARY);

выдает ошибку!

Решил попробовать через сокеты сделать. Задача простая - подключиться к фтп и залить файл в корень. Вопрос - какие команды вводить через telnet, чтобы добиться требуемого результата?

/* Connect */
$fc = fsockopen($server, 21);
if (!$fc) {
print('Server is unavailable<br>');
}
fgets($fc);
/* Authentication */
fputs($fc, 'user '.$user."\r\n");
$res = fgets($fc);
if (substr($res, 0, 3) != 331) {
print('Invalid user name<br>');
}
fputs($fc, 'pass '.$pass."\r\n");
$res = fgets($fc);
if (substr($res, 0, 3) != 230) {
print('Invalid password<br>');
}
/* Set passive mode for transaction */

fputs($fc, "TYPE A\r\n");
$res = fgets($fc);
if (substr($res, 0, 3) != 200) {
print('TYPE A has failed!<br>');
}
fputs($fc, "PORT 217,116,151,36,6,120\r\n");
$res = fgets($fc);
echo "PORT answer: ".$res;
echo "<br>";
exit;

Выдает: PORT answer: 500 Illegal PORT command.

RFC 959 видел. Запутался в нем. Может кто уже разбирался - помогайте. Еще было-бы неплохо увидеть готовые классы для работы с фтп через сокеты.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог