【问题标题】:ftp_get fails but no error reported by PHPftp_get 失败但 PHP 没有报错
【发布时间】:2011-06-21 19:04:38
【问题描述】:

我尝试使用 PHP 5.3.3 (linux build) 中的 ftp_get 从 FTP 服务器获取文件。 可以登录,可以列出文件,但是ftp_get命令没有下载文件。

这是我正在使用的代码。

$ftp_user_name = DBUSER;
$ftp_user_pass = DBUSERPASS;
$ftp_server = HOST;
$local_file = "poutarde.odt";
$server_file = "poutarde.odt";

// set up a connection to ftp server
$conn_id = ftp_connect($ftp_server);

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

// turn passive mode on
ftp_pasv($conn_id, true);

// try to download $server_file and save to $local_file
if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) {
  echo "Successfully written to $local_file\n";
} else {
  echo "There was a problem\n";
}

// close the connection
ftp_close($conn_id);

“poutarde.odt”文件位于 FTP 的根目录。

我从客户端(filezilla)检查了 FTP 下载,一切正常。 但是,使用 ftp_get,我什么也得不到(除了回显“There was a problem”),甚至没有 PHP 错误,它只是失败了。

感谢您的帮助。

里诺

【问题讨论】:

  • 使用 Wireshark 嗅探 FTP 会话,并检查您的 PHP 脚本是否可以写入 $local_file。
  • 您可能需要确保 ftp_connect 和 ftp_login 没有返回 false,您的代码当前假设连接和登录正常。
  • 我投票结束这个问题,因为这个问题似乎是由文件权限不足引起的,而不是由代码本身的任何内容引起的。
  • 尝试切换被动模式。它对我有用。

标签: php ftp


【解决方案1】:

ftp_get 需要一个文件处理程序,而不是文件名。

$local_file = fopen("poutarde.odt",'w');
//...
if(ftp_get($conn_id, $local_file, $server_file, FTP_BINARY))

【讨论】:

  • $local_file 实际上需要一个临时路径,如“/tmp/poutarde.odt”中,具有对 www-data 的写入权限。谢谢您的帮助!雷诺
  • @ben 你写了ftp_get 但链接了ftp_fget(这确实需要文件处理程序)。普通ftp_get 接受一个字符串。
猜你喜欢
  • 2023-03-10
  • 2015-03-09
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
  • 2012-06-19
相关资源
最近更新 更多