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

问题描述 投票:1回答:1

我试图从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)

还有其他问题,我可以直接阅读,无需下载吗?

php ftp filezilla
1个回答
1
投票

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

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

例如。 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);

是的,您无需下载即可阅读。

看到

© www.soinside.com 2019 - 2024. All rights reserved.