我正在尝试从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)
还有一个问题,我可以在没有下载的情况下阅读吗?
答案 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);
是的,你可以在不下载的情况下阅读。
见