You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP ftp_get()连接正常但无法下载文件问题求助

问题

我通过二维码匹配订单商品与带相同二维码的个性化印刷内容,避免发错货。之前一直用FileZilla手动将二维码图片下载到工作电脑,现在尝试用PHP脚本自动化这个流程。脚本能成功连接FTP服务器、查看目录文件、修改文件权限,但调用ftp_get()时显示下载成功,本地指定路径却找不到对应的.png文件。网站部署在Hostgator服务器,运行PHP 7.4,为什么FileZilla能正常下载,但脚本不行?

代码示例
<?PHP

//ERROR REPORTING ON, NO ERRORS SHOW AT ALL
error_reporting(E_ERROR | E_WARNING | E_PARSE); 

$qrcodigo1="3574975711.png"; // 要传输的文件名
$source_file = "$qrcodigo1";  // 赋值给源文件字符串
$destination_file = "C:\Users\*USER*\*MAIN-FOLDER-1*\*SUB-FOLDER-1*\*SKU-FOLDER1*\*PRODUCT-FOLDER1*\*PRODUCT-CODE-FOLDER"; // 我想要保存到本地电脑的路径

$ftp_server = "ftp.XXXXXXXXXX.co.uk"; // FTP服务器地址
$ftp_user_name = "XXXXXX";        // 用户名
$ftp_user_pass = "XXXXXXXXXXXXXXXX";  // 密码

// FTP连接,能成功连接
$ftp = ftp_connect($ftp_server); 
$login_result = ftp_login($ftp, $ftp_user_name, $ftp_user_pass); 
ftp_pasv($ftp, true); // 设置被动模式避免问题

if ((!$ftp) || (!$login_result)) {
    die("FTP connection has failed !");
}

// 通过列出目录内容确认连接成功 - 正常工作
ftp_chdir($ftp, "XXX/XXXXXXXX");
echo "Connected - Current directory is now:".ftp_pwd($ftp)."<br><br>";

$file_list = ftp_nlist($ftp, ".");
var_dump($file_list);
echo "<br><br>";

// 修改文件权限确认权限正常 - 正常工作
if (ftp_chmod($ftp, 0777, $source_file) !== false)
{
    echo "Successfully chmoded $source_file to 777.<br><br>";
}
else
{
    echo "chmod failed.<br><br>";
}

// 从服务器下载到本地电脑,显示下载成功但找不到文件?
// 屏幕输出:"Successfully downloaded 3574975711.png to C:\Users\*USER*\*MAIN-FOLDER-1*\*SUB-FOLDER-1*\*SKU-FOLDER1*\*PRODUCT-FOLDER1*\*PRODUCT-CODE-FOLDER"
// 文件在哪?文件夹里没有?
    
if (ftp_get($ftp, $destination_file, $source_file, FTP_BINARY))
{
    echo "Successfully downloaded $source_file to $destination_file <br>";
}
else
{
    echo "There was a problem while downloading $source_file <br>";
}

// 关闭连接
ftp_close($ftp);
?>
核心问题与解决方法
  • 运行环境混淆(最关键):你的PHP脚本部署在Hostgator服务器上,运行环境是服务器的操作系统,而非你本地工作电脑。ftp_get()是将FTP服务器上的文件下载到运行脚本的Hostgator服务器文件系统中,不是你本地的C盘路径。你指定的C:\Users\...路径是服务器端的路径(Hostgator一般是Linux服务器,该路径大概率不存在),文件要么被写入服务器的异常位置,要么因路径无效被静默处理,所以本地找不到。

    • 解决方向:
      1. 在本地电脑搭建PHP环境,运行脚本直接下载到本地;
      2. 让服务器脚本将文件下载到服务器的可访问目录,再通过浏览器或FTP工具从服务器转存到本地。
  • 目标路径不完整:你指定的$destination_file只有文件夹路径,未包含文件名。ftp_get()需要完整的文件路径(文件夹+文件名),否则PHP无法确定要创建的文件,可能导致文件写入错误位置或无法生成。

    • 修正示例:$destination_file = "C:\Users\*USER*\*MAIN-FOLDER-1*\*SUB-FOLDER-1*\*SKU-FOLDER1*\*PRODUCT-FOLDER1*\*PRODUCT-CODE-FOLDER\3574975711.png";
  • 路径转义问题:Windows路径中的反斜杠\在PHP字符串中是转义字符,需用双反斜杠\\或正斜杠/替代,否则路径会被解析错误。

    • 修正示例:$destination_file = "C:/Users/*USER*/MAIN-FOLDER-1/SUB-FOLDER-1/SKU-FOLDER1/PRODUCT-FOLDER1/PRODUCT-CODE-FOLDER/3574975711.png";
  • 错误报告限制:你设置的error_reporting(E_ERROR | E_WARNING | E_PARSE)屏蔽了部分错误信息(如路径不存在、权限不足的通知),可临时改为error_reporting(E_ALL); ini_set('display_errors', 1);查看完整错误,辅助定位问题。

内容的提问来源于stack exchange,提问作者Sweets-n-Stuff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 22:34:59