Итак, ситуация такова, что, скажем, «клиент» изменил свой 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);
}
Он отсутствует в документации на php.net, но упоминается в комментарии.
ftp_put пытается перезаписать существующий файл, и именно поэтому у вас есть проблемы с разрешениями. Удвоение может заключаться в том, что без чтения исходного кода функции php ftp_put перезаписью действительно является удаление и выгрузка или что вы запускаете функцию несколько раз.
Я рекомендую проверить, существует ли файл, прежде чем пытаться загрузить его (независимо от того, что проверка файлов обходится дешевле в сетевом трафике, чем загрузка файла полного размера).
Используйте ftp_nlist, чтобы получить контент в целевом пути и посмотреть, существует ли он.
http://php.net/manual/en/function.ftp-nlist.php
Если вам нужно загрузить уже существующий файл, вам нужно просмотреть свои разрешения у владельца сервера.
Других решений пока нет …