Предупреждение: ftp_get (): успешное удаление операции

У меня есть немного кода, который передает резервные копии с наших серверов разработки, и это случайное поведение ведет себя очень странно и дает следующие ошибки / вывод:

Warning: ftp_get(): Delete operation successful. in /root/cron/get_dev_archives.php on line 106 ERR blahjob: Failed to get file: 2013-09-25_18-22-04-blahjob_dev18.tgz PHP Warning: ftp_get(): Delete operation successful. in /root/cron/get_dev_archives.php on line 106 Warning: ftp_get(): Delete operation successful. in /root/cron/get_dev_archives.php on line 106 ERR blahjob: Failed to get file: 2013-09-25_18-22-37-blahjob_dev19.tgz PHP Warning: ftp_get(): Delete operation successful. in /root/cron/get_dev_archives.php on line 106 Warning: ftp_get(): Delete operation successful. in /root/cron/get_dev_archives.php on line 106 ERR blahjob: Failed to get file: 2013-09-25_18-23-05-blahjob_dev5.tgz PHP Warning: ftp_get(): Delete operation successful. in /root/cron/get_dev_archives.php on line 106 Warning: ftp_get(): Delete operation successful. in /root/cron/get_dev_archives.php on line 106 ERR blahjob: Failed to get file: 2013-09-25_18-23-37-blahjob_dev33.tgz 

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

Код, о котором идет речь:

 // ftp connection established, file list acquired, yadda yadda foreach( $targets as $target ) { $localfile = $backup_dir . $target; if( file_exists($localfile) ) { do_log($task['name'], "Local file ".$target." already exists, skipping.", 1); continue; } if( ! ftp_get($conn, $localfile, $target, FTP_BINARY) ) { // line 106 do_log($task['name'], "Failed to get file: ".$target, 2); } else { do_log($task['name'], "Got file: ".$target); ftp_delete($conn, $target); } } 

Solutions Collecting From Web of "Предупреждение: ftp_get (): успешное удаление операции"

По-моему, вы столкнулись с странной ошибкой PHP.

Операция Delete operation successful. не является сообщением об ошибке PHP, это ответное сообщение FTP-сервера для успешной команды delete (DELE).

После анализа исходного кода PHP единственным объяснением, которое я могу найти для этой проблемы, является то, что функция ftp_get не работает, не получая сообщение об ошибке с FTP-сервера, поэтому оно отображает ответ FTP-сервера предыдущей выполненной команды, которая в этот конкретный случай, является командой удаления.

Функции FTP FTP хранят текст ответа сервера FTP в поле inbuf структуры ftpbuf :

 typedef struct ftpbuf { ... char inbuf[FTP_BUFSIZE]; /* last response text */ ... } 

Такое поле затем используется в функции ftp_get для отображения предупреждающего сообщения:

 if (!ftp_get(ftp, outstream, remote, xtype, resumepos TSRMLS_CC)) { php_stream_close(outstream); VCWD_UNLINK(local); php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf); RETURN_FALSE; } 

Поле ftp->inbuf записывается ftp_getresp fnc , но может быть, что по какой-то неясной причине функция ftp_get с низким уровнем не работает , не вызывая функцию ftp_getresp , поэтому появляется сообщение об ошибке.
Возможно, журналы ошибок FTP-сервера могут дать некоторые подсказки о том, что представляет собой настоящая проблема, но без дополнительной информации действительно сложно сказать, почему вы столкнулись с этой проблемой и даже предложили обходной путь.

Мое единственное предложение – проверить ваш код (если возможно) на другом FTP-сервере, а затем в конечном итоге обновить ваш PHP до более новой версии.