PHP脚本上传文件至FTP服务器失败求助
PHP FTP上传失败排查与修复
针对你遇到的FTP上传报错问题,结合代码逐一排查核心问题:
1. 本地文件路径错误(最可能原因)
你的代码中$src_file = $_FILES['srcfile']['name'];仅获取了上传文件的原始文件名,但ftp_put需要的是服务器临时存储文件的路径,而非文件名。正确的临时文件路径是$_FILES['srcfile']['tmp_name'],这是PHP接收上传文件后存在服务器临时目录的真实路径。
2. 远程目录路径不匹配
你设置的$remote_dir = '/upload/'是FTP根目录下的upload文件夹,但你的目标是网站目录mydomain/test/upload/,而FTP的根目录通常与网站根目录(比如public_html或www)不同。需要确认FTP服务器上对应网站目录的实际路径,比如可能是/public_html/test/upload/,而非直接/upload/。
3. 文件传输模式错误
使用FTP_ASCII模式仅适合文本类文件(如txt、php),如果上传二进制文件(图片、视频、压缩包等)会导致文件损坏上传失败。建议统一使用FTP_BINARY模式,兼容性更强。
4. 未确认FTP目录权限与存在性
- 需确保FTP用户对目标远程目录有写入权限
- 可提前用
ftp_chdir()切换到目标目录,验证目录是否存在;若不存在,可尝试用ftp_mkdir()创建(需权限)
修正后的完整代码示例
// ftp settings $ftp_hostname = 'xxxx'; // 修改为你的FTP主机 $ftp_username = 'xxxx'; // 修改为你的FTP用户名 $ftp_password = 'xxxx'; // 修改为你的FTP密码 // 替换为FTP服务器上的实际目标路径,例如 /public_html/test/upload/ $remote_dir = '/public_html/test/upload/'; $tmp_file = $_FILES['srcfile']['tmp_name']; // 服务器临时文件路径 $src_filename = $_FILES['srcfile']['name']; // 原始文件名 if (!empty($tmp_file) && is_uploaded_file($tmp_file)) { // 拼接远程文件完整路径 $dst_file = rtrim($remote_dir, '/') . '/' . $src_filename; // 连接FTP $ftpcon = ftp_connect($ftp_hostname) or die('连接FTP服务器失败...'); // FTP登录 $ftplogin = ftp_login($ftpcon, $ftp_username, $ftp_password); // 切换到目标目录(验证目录是否存在且有权限) if (!ftp_chdir($ftpcon, $remote_dir)) { echo '无法访问目标目录,请检查路径或权限!'; ftp_close($ftpcon); exit; } // 二进制模式上传 if (ftp_put($ftpcon, $src_filename, $tmp_file, FTP_BINARY)) echo '文件成功上传至FTP服务器!'; else echo '文件上传失败,请稍后重试!'; // 关闭FTP连接 ftp_close($ftpcon); } else header('Location: index.php');
额外排查建议
- 开启PHP错误提示,添加
error_reporting(E_ALL); ini_set('display_errors', 1);在脚本开头,查看是否有隐藏错误 - 用FTP客户端(如FileZilla)手动连接FTP,确认目标目录路径、权限是否正常,手动上传文件验证是否可行
内容的提问来源于stack exchange,提问作者Mdev2023it
相关产品推荐
相关产品推荐

