PHP使用FTP跨服务器复制文件失败,两种方案均无效求排查
问题:跨服务器FTP复制WordPress文件失败(两种方案均无效)
先明确你的场景:服务器A根目录下的wordpress子文件夹里有some_file.php(权限0644),需要把它复制到服务器B的根目录。你尝试了两种FTP方案都没成功,但已经确认FTP连接和登录凭证是正常的。
你尝试的两种方案代码
方案1:本地中转(先下载到本地再上传)
步骤1:从服务器A下载到本地
$local_file="some_file.php"; $remote_file="wordress/some_file.php"; ftp_get( $connect_it, $local_file, $remote_file, FTP_BINARY );
步骤2:从本地上传到服务器B
$local_file="some_file.php"; $remote_file="some_file.php"; ftp_put($connect_it,$remote_file,$local_file,FTP_BINARY);
方案2:直接从服务器A上传到服务器B
$local_file="wordpress/some_file.php"; $remote_file="some_file.php"; ftp_put($connect_it,$remote_file,$local_file,FTP_BINARY);
我帮你排查几个大概率的问题点:
低级拼写错误(方案1致命问题)
方案1步骤1里的$remote_file写的是wordress/some_file.php——这里少了一个p!正确的路径应该是wordpress/some_file.php,这个拼写错误直接导致ftp_get找不到目标文件,第一步就失败了,后面的上传自然也无法完成。权限与目录访问限制
- 本地存储目录权限:方案1中,你把下载的文件存在脚本运行的当前目录吗?要确保这个目录有写入权限(至少设置为0755),否则
ftp_get无法把文件保存到本地。 - 服务器B根目录权限:很多FTP服务器会默认限制用户只能访问自己的家目录,而不是系统根目录。你要确认用来连接服务器B的FTP用户是否有根目录的写入权限,如果没有,要么调整FTP用户的权限,要么上传到该用户的家目录下再手动移动。
- 服务器A文件读取权限:方案2中,脚本运行的用户(比如
www-data)需要能读取服务器A上wordpress/some_file.php的权限。虽然文件权限是0644,但如果脚本用户和文件的所属组不一致,可能会出现读取失败的情况,你可以临时给文件加0755权限测试一下。
- 本地存储目录权限:方案1中,你把下载的文件存在脚本运行的当前目录吗?要确保这个目录有写入权限(至少设置为0755),否则
错误信息捕获很重要
你现在的代码没有做错误判断,根本不知道到底是哪一步出了问题。建议给FTP函数加上返回值判断,获取具体错误:// 示例:排查ftp_get的错误 $get_success = ftp_get($connect_it, $local_file, $remote_file, FTP_BINARY); if (!$get_success) { echo "从A下载失败:" . ftp_errno($connect_it) . " - " . ftp_error($connect_it); } // 示例:排查ftp_put的错误 $put_success = ftp_put($connect_it, $remote_file, $local_file, FTP_BINARY); if (!$put_success) { echo "上传到B失败:" . ftp_errno($connect_it) . " - " . ftp_error($connect_it); }这些错误信息会直接告诉你是“文件不存在”“权限不足”还是“目录不可访问”,能帮你快速定位问题。
内容的提问来源于stack exchange,提问作者JMB




