这样的情况是,假设“客户端”更改了他们的ftp服务器,而我有一个脚本可以通过ftp_put()在他们的服务器上上传内容。我认为当我上传文件时,他们现在在其ftp服务器上具有不同的权限。在新服务器上进行上传的行为确实很奇怪,它会将某些文件复制大约5次,而其他文件则根本不复制。请记住,同一脚本在其旧服务器上可以正常工作。
我从他们发送给我的屏幕截图中注意到,现在他们的服务器上只有读写权限。它曾经也具有删除权限。当我尝试将文件上传到我们自己的服务器并取消删除权限时,一切都停止了工作。
所以我的想法是,这可能是问题所在,因为日志显示出来了,在这里我可能完全错了,ftp_put()尝试在将文件上传到服务器之前删除文件以避免重复。那是正确的,并且有解决方法吗?
发送文件的函数本身非常简单:
function send_to_ftp($ftp_server, $ftp_username, $ftp_password, $fileName,
$subFolder = "n/") {
$ftp_conn = ftp_connect($ftp_server);
if (!$ftp_conn) return false;
$login = ftp_login($ftp_conn, $ftp_username, $ftp_password);
$reciver_path = $subFolder . end(explode('/', $fileName));
$local_folder = $fileName;
return (ftp_put($ftp_conn, $reciver_path, $local_folder, FTP_ASCII));
//ftp_close($ftp_conn);
}
答案 0 :(得分:0)
它在php.net的文档中丢失,但在注释中提到。 ftp_put尝试覆盖现有文件,这就是为什么权限有问题的原因。在不阅读php ftp_put函数的源代码的情况下,可能会进行两次加倍操作,即覆盖实际上是删除并上载,或者您正在多次运行该功能。
我建议在尝试上传文件之前先检查文件是否已存在(无论如何,与上传完整尺寸的文件相比,检查文件在网络流量中的开销要小一些)。
使用ftp_nlist在目标路径中获取内容,然后查看其是否存在。 http://php.net/manual/en/function.ftp-nlist.php
如果需要上传已经存在的文件,则需要与服务器所有者一起查看权限。