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

PHP ftp_get报错PORT命令禁用,FTP文件下载失败求助

FTP下载脚本报错:PORT command is disabled

问题详情

同一FTP下载脚本在其他服务器运行正常,部署到Plesk Obsidian服务器后执行失败,日志报错:

AH01071: Got error 'PHP message: PHP Warning: ftp_get(): PORT command is disabled in /path/to/file

脚本执行后输出There was a problem,FTP连接与登录步骤均成功,但执行ftp_get时触发异常。

脚本完整代码

<?php

$server_file = "testfile.xml.gz";
$local_file = 'tfs.xml.gz';
$ftp_server="aftp.xxx.com";
$ftp_user_name="xxx_xxxx";
$ftp_user_pass="xxxxx";

$conn_id = ftp_connect($ftp_server);
ftp_pasv($conn_id, true);

// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// try to download $server_file and save to $local_file
if (ftp_get($conn_id, $local_file, $server_file)) {
    echo "Successfully written to $local_file
";
}
else {
    echo "There was a problem
";
}
// close the connection
ftp_close($conn_id);

?>

已完成的排查操作

  • 临时关闭服务器防火墙,无效果
  • 本地目标文件已设置777权限
  • 确认远程服务器要求使用Binary传输模式
  • 可通过FileZilla正常连接并下载目标文件
  • 当前服务器环境为Plesk Obsidian

解决思路

  1. 调整被动模式调用时机
    当前代码在ftp_connect后立即开启被动模式,部分FTP服务器要求完成登录后才能切换被动模式,提前调用可能导致模式切换失败,脚本自动 fallback 到主动模式(PORT命令),而当前服务器禁用了PORT命令。修改代码顺序:
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// 登录成功后再开启被动模式
ftp_pasv($conn_id, true);
  1. 显式设置Binary传输模式
    既然远程服务器要求Binary模式,需在下载前明确配置传输模式:
// 方式一:用ftp_set_option
ftp_set_option($conn_id, FTP_BINARY, true);
// 方式二:用ftp_binary()
ftp_binary($conn_id);
  1. 检查Plesk相关配置
  • 查看PHP配置,确认未禁用ftp_get等FTP相关函数
  • 检查Plesk防火墙/安全组,确保开放FTP被动模式的端口范围(通常为1024-65535),允许服务器对外发起被动连接
  1. 尝试FTPS连接
    若远程服务器支持FTPS,改用加密连接可能绕过端口限制:
$conn_id = ftp_ssl_connect($ftp_server);
  1. 检查SELinux状态
    如果服务器开启了SELinux,可能阻止PHP进程写入本地文件。执行getenforce查看状态,若为Enforcing,可临时执行setenforce 0测试,若问题解决则配置SELinux规则允许PHP写入目标目录。

内容的提问来源于stack exchange,提问作者bertster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:23:26