提问者:小点点

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


我试图从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\u get(C:\Users\PROSIA\Desktop est.docx):无法打开流:下载C:\Users\PROSIA\Documents\dummyfile时出错。docx。

我的代码逻辑是$local\u file是将下载的文件保存到本地计算机的路径,$server\u file是从FTP服务器下载文件的路径

因此,我对第一个警告“无法打开流”有点困惑,因为文件还不存在,而且它似乎有空白(应该是\Desktop\test.docx,而不是Desktop est.docx)

还有一个问题,我可以不下载就直接阅读吗?


共1个答案

匿名用户

在FTP协议中不能使用远程文件的绝对路径。

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

例如,C:\Users\PROSIA可以映射到类似于/Users/PROSIA的内容。在这种情况下,您可以使用:

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

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

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

下一个问题是,您需要启用FTP被动模式。如果您在NAT上的防火墙后面,默认的主动模式将很难工作。请参阅我关于主动和被动FTP模式所需的网络配置的文章。

要切换到被动模式,请使用ftp\u pasv功能。

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

是的,你不需要下载就可以阅读。

看见

  • PHP:我如何阅读一本书。txt文件从FTP服务器转换成变量?或
  • 流式FTP下载到输出