Назад | Перейти на главную страницу

Загрузка по FTP работает из локальной командной строки / удаленного клиента с графическим интерфейсом, но не из сценария PHP

Я изначально опубликовал этот вопрос в StackOverflow, но я начинаю думать, что это скорее вопрос сервера.

Я установил ProFTPd на экземпляр EC2 под управлением Ubuntu 10.10. Я управлял своим файлом proftpd.conf, а также своими разрешениями на сервере, чтобы иметь возможность подключаться и загружать / перемещать файлы с помощью FTP как удаленно с помощью Filezilla, так и на самом сервере при подключении к 127.0.0.1.

Проблема, с которой я сталкиваюсь, - это когда я пытаюсь загрузить / установить файл с помощью интерфейса Joomla.

Я передаю Joomla ту же информацию для входа, что и Filezilla, и соединение устанавливается таким же образом. Файл ftp.log фактически показывает, что Joomla может войти на сервер:

localhost НЕИЗВЕСТНО никто [17 / Янв / 2011: 14: 09: 17 +0000] "ПОЛЬЗОВАТЕЛЬ ftpuser" 331 -
localhost НЕИЗВЕСТНО ftpuser [17 / Янв / 2011: 14: 09: 17 +0000] «ПРОЙТИ (скрыто)» 230 -
localhost НЕИЗВЕСТНО ftpuser [17 / Янв / 2011: 14: 09: 17 +0000] "PASV" 227 -
localhost НЕИЗВЕСТНО ftpuser [17 / Янв / 2011: 14: 09: 17 +0000] «ТИП I» 200 -
localhost НЕИЗВЕСТНО ftpuser [17 / Янв / 2011: 14: 09: 17 +0000] "STOR /directory/store/location/file.zip" 550 -

Но не удается выполнить команду STOR. Я проследил проблему в коде Joomla до FTP-модуля PHP. Код (с добавленными моими операторами трассировки):

if (@ftp_put($this->_conn, $remote, $local, $mode) === false) {
    echo "\n FTP PUT failed.";
    echo "\n Remote: $remote ; Local: $local ; Mode: $mode - Either ASCII: ".FTP_ASCII." or Binary: ".FTP_BINARY;
    echo "\n The user: ".exec("whoami");
    JError::raiseWarning('35', 'JFTP::store: Bad response' );
    return false;
}

Выводы трассировки:

Ошибка FTP PUT.
Удаленный: /directory/store/location/file.zip; Локальный: / tmp / phpwuccp4; Режим: 2 - Либо> ASCII: 1, либо двоичный: 2
Пользователь: www-data

И если вам было интересно, вот пример журнала FTP при использовании Filezilla:

my_client_ip НЕИЗВЕСТНО никто [17 / Янв / 2011: 16: 45: 55 +0000] "ПОЛЬЗОВАТЕЛЬ ftpuser" 331 -
my_client_ip НЕИЗВЕСТНЫЙ ftpuser [17 / Янв / 2011: 16: 45: 55 +0000] «ПРОЙДЕН (скрыт)» 230 -
my_client_ip НЕИЗВЕСТНЫЙ ftpuser [17 / Янв / 2011: 16: 45: 55 +0000] «OPTS UTF8 ON» - -
my_client_ip НЕИЗВЕСТНЫЙ ftpuser [17 / Янв / 2011: 16: 45: 55 +0000] "PWD" 257 -
my_client_ip НЕИЗВЕСТНЫЙ ftpuser [17 / Янв / 2011: 16: 45: 55 +0000] «ТИП I» 200 -
my_client_ip НЕИЗВЕСТНЫЙ ftpuser [17 / Янв / 2011: 16: 45: 55 +0000] "PASV" 227 -
my_client_ip НЕИЗВЕСТНЫЙ ftpuser [17 / Янв / 2011: 16: 45: 55 +0000] "MLSD" 226 3405
my_client_ip НЕИЗВЕСТНО ftpuser [17 / Янв / 2011: 16: 46: 06 +0000] «Местоположение CWD» 250 3405
my_client_ip НЕИЗВЕСТНО ftpuser [17 / Янв / 2011: 16: 46: 06 +0000] "PWD" 257 3405
my_client_ip НЕИЗВЕСТНЫЙ ftpuser [17 / Янв / 2011: 16: 46: 06 +0000] "PASV" 227 3405
my_client_ip НЕИЗВЕСТНО ftpuser [17 / Янв / 2011: 16: 46: 07 +0000] "MLSD" 226 3757
my_client_ip НЕИЗВЕСТНО никто [17 / Янв / 2011: 16: 46: 37 +0000] "ПОЛЬЗОВАТЕЛЬ ftpuser" 331 -
my_client_ip НЕИЗВЕСТНЫЙ ftpuser [17 / Янв / 2011: 16: 46: 37 +0000] «ПРОЙТИ (скрыто)» 230 -
my_client_ip НЕИЗВЕСТНЫЙ ftpuser [17 / Янв / 2011: 16: 46: 37 +0000] «OPTS UTF8 ON» - -
my_client_ip НЕИЗВЕСТНЫЙ ftpuser [17 / Янв / 2011: 16: 46: 37 +0000] «CWD / location» 250 -
my_client_ip НЕИЗВЕСТНЫЙ ftpuser [17 / Янв / 2011: 16: 46: 37 +0000] "PWD" 257 -
my_client_ip НЕИЗВЕСТНЫЙ ftpuser [17 / Янв / 2011: 16: 46: 37 +0000] «ТИП I» 200 -
my_client_ip НЕИЗВЕСТНЫЙ ftpuser [17 / Янв / 2011: 16: 46: 37 +0000] "PASV" 227 -
my_client_ip НЕИЗВЕСТНЫЙ ftpuser [17 / Янв / 2011: 16: 46: 39 +0000] "STOR file.zip" 226 125317
my_client_ip НЕИЗВЕСТНЫЙ ftpuser [17 / Янв / 2011: 16: 46: 39 +0000] "PASV" 227 -
my_client_ip НЕИЗВЕСТНО ftpuser [17 / Янв / 2011: 16: 46: 39 +0000] "MLSD" 226 497

похоже, что вы пытаетесь подключиться как пользователь "www-data" - по крайней мере, ошибка показывает текущего пользователя "exec (" whoami ")",

не уверен, передает ли Joomla правильное имя пользователя на сервер

если нет - www-data подключены и не имеют прав на создание файла /directory/store/location/file.zip на сервере