Дубликаты файлов при загрузке с помощью ftp_put () в php - PullRequest
0 голосов
/ 28 сентября 2018

Итак, ситуация такова, что, скажем, «клиент» изменил свой 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);
    }

1 Ответ

0 голосов
/ 28 сентября 2018

Отсутствует в документации на php.net, но упоминается в комментарии.ftp_put пытается перезаписать существующий файл, и именно поэтому у вас есть проблемы с разрешениями.Удвоение может заключаться в том, что без чтения исходного кода функции php ftp_put перезаписью действительно является удаление и выгрузка или что вы запускаете функцию несколько раз.

Я рекомендую проверить, существует ли файл, прежде чем пытаться загрузить его (независимо от того, что проверка файлов обходится дешевле в сетевом трафике, чем загрузка файла полного размера).

Используйте ftp_nlist, чтобы получить контент в целевом пути и посмотреть, существует ли он.http://php.net/manual/en/function.ftp-nlist.php

Если вам нужно загрузить уже существующий файл, вам нужно просмотреть свои разрешения у владельца сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...