FTP 上传可通过本地命令行/远程 GUI 客户端进行,但不能通过 PHP 脚本进行

FTP 上传可通过本地命令行/远程 GUI 客户端进行,但不能通过 PHP 脚本进行

我最初发布这个问题在 StackOverflow,但我开始认为这更多的是一个服务器问题。

我在运行 Ubuntu 10.10 的 EC2 实例上安装了 ProFTPd。我管理了我的 proftpd.conf 文件以及服务器权限,以便能够使用 Filezilla 远程连接和使用 FTP 上传/移动文件,以及在连接到 127.0.0.1 时在服务器上连接和上传/移动文件。

我遇到的问题是当我尝试使用 Joomla 的界面上传/安装文件时。

我向 Joomla 提供了与 Filezilla 相同的登录信息,并以相同的方式建立连接。ftp.log 文件实际上显示 Joomla 能够登录到服务器:

localhost 未知 nobody [17/Jan/2011:14:09:17 +0000] “USER ftpuser” 331 -
localhost 未知 ftpuser [17/Jan/2011:14:09:17 +0000] “PASS (隐藏)” 230 -
localhost 未知 ftpuser [17/Jan/2011:14:09:17 +0000] “PASV” 227 -
localhost 未知 ftpuser [17/Jan/2011:14:09:17 +0000] “TYPE I” 200 -
localhost 未知 ftpuser [17/Jan/2011:14:09:17 +0000] “STOR /directory/store/location/file.zip” 550 -

但在尝试 STOR 命令时失败。我已将 Joomla 代码中的问题追溯到 PHP FTP 模块。代码(添加了我的跟踪语句):

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

如果您好奇的话,以下是使用 Filezilla 时的 FTP 日志示例:

my_client_ip 未知 nobody [17/Jan/2011:16:45:55 +0000] “USER ftpuser” 331 -
my_client_ip 未知 ftpuser [17/Jan/2011:16:45:55 +0000] “PASS (hidden)” 230 -
my_client_ip 未知 ftpuser [17/Jan/2011:16:45:55 +0000] “OPTS UTF8 ON” - -
my_client_ip 未知 ftpuser [17/Jan/2011:16:45:55 +0000] “PWD” 257 -
my_client_ip 未知 ftpuser [17/Jan/2011:16:45:55 +0000] “TYPE I” 200 -
my_client_ip未知 ftpuser [17/Jan/2011:16:45:55 +0000] “PASV” 227 -
my_client_ip 未知 ftpuser [17/Jan/2011:16:45:55 +0000] “MLSD” 226 3405
my_client_ip 未知 ftpuser [17/Jan/2011:16:46:06 +0000] “CWD 位置” 250 3405
my_client_ip 未知 ftpuser [17/Jan/2011:16:46:06 +0000] “PWD” 257 3405
my_client_ip 未知 ftpuser [17/Jan/2011:16:46:06 +0000] “PASV” 227 3405
my_client_ip 未知 ftpuser [17/Jan/2011:16:46:07 +0000] “MLSD” 226 3757
my_client_ip 未知 nobody [17/Jan/2011:16:46:37 +0000] “USER ftpuser” 331 -
my_client_ip 未知 ftpuser [17/Jan/2011:16:46:37 +0000] “PASS (hidden)” 230 -
my_client_ip 未知 ftpuser [17/Jan/2011:16:46:37 +0000] “OPTS UTF8 ON” - -
my_client_ip 未知 ftpuser [17/Jan/2011:16:46:37 +0000] “CWD /location” 250 -
my_client_ip 未知 ftpuser [17/Jan/2011:16:46:37 +0000] “PWD” 257 -
my_client_ip 未知 ftpuser [17/Jan/2011:16:46:37 +0000] “TYPE I” 200 -
my_client_ip 未知 ftpuser [17/Jan/2011:16:46:37 +0000] “PASV” 227 -
my_client_ip 未知 ftpuser [17/Jan/2011:16:46:39 +0000] “STOR file.zip” 226 125317
my_client_ip 未知 ftpuser [17/Jan/2011:16:46:39 +0000] “PASV” 227 -
my_client_ip 未知 ftpuser [17/Jan/2011:16:46:39 +0000] “MLSD” 226 497

答案1

看起来像是尝试以用户“www-data”的身份连接 - 至少错误显示当前用户“exec(“whoami”)”,

不确定 Joomla 是否向服务器传递了正确的用户名

如果没有 - www-data 已连接并且没有权限在服务器上创建文件 /directory/store/location/file.zip

相关内容