PHP FTP下载失败,“无法打开流:下载错误”

时间:2017-03-10 03:07:14

标签: php ftp filezilla

我正在尝试从FTP服务器(使用FileZilla服务器)下载到我的本地计算机,但我一直收到错误

这是我的代码

<?php
// connect and login to FTP server
$ftp_server = "127.0.0.1";
$ftp_username = "myusername";
$ftp_userpass = "mypassword";
$ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
$login = ftp_login($ftp_conn, $ftp_username, $ftp_userpass);
echo "success connect to FTP";

$local_file = "C:\Users\PROSIA\Desktop\test.docx";
$server_file = "C:\Users\PROSIA\Documents\dummyfile.docx";

// download server file
if (ftp_get($ftp_conn, $local_file, $server_file, FTP_ASCII))
  {
  echo "Successfully written to $local_file.";
  }
else
  {
  echo "Error downloading $server_file.";
  }
ftp_close($ftp_conn); 

这是我得到的错误:

  

警告:ftp_get(C:\ Users \ PROSIA \ Desktop \ test.docx):无法打开流:   下载C:\ Users \ PROSIA \ Documents \ dummyfile.docx时出错。

我的代码逻辑$local_file是将下载的文件保存到本地计算机的路径,$server_file是FTP服务器下载文件的路径

所以我对第一个警告感到困惑,“未能打开流”,而文件尚不存在,而且它似乎有空白(它应该是\ Desktop \ test.docx而不是Desktop \ test.docx)

还有一个问题,我可以在没有下载的情况下阅读吗?

1 个答案:

答案 0 :(得分:1)

您无法在FTP协议中使用远程文件的绝对路径。

FileZilla FTP服务器在其配置中具有映射,该映射将远程文件系统投影到虚拟FTP文件树中。您必须使用虚拟文件树的路径。

E.g。 C:\Users\PROSIA可以映射到/users/PROSIA之类的内容。在这种情况下,您使用:

$server_file = "/users/PROSIA/dummyfile.docx";

您可能根本没有配置映射。因此,在进行映射之前,您无法真正访问该文件。

首先使用某个GUI FTP客户端连接到FTP服务器,然后尝试找到该文件。客户端将向您显示在代码中使用的正确路径。

您遇到的下一个问题是,您需要启用FTP被动模式。如果您在NAT上的防火墙后面,则默认活动模式将很难工作。请参阅network configuration needed for active and passive FTP modes上的文章。

要切换到被动模式,请使用ftp_pasv function

ftp_login($ftp_conn, $ftp_username, $ftp_userpass);
ftp_pasv($ftp_conn, true);

是的,你可以在不下载的情况下阅读。