У меня есть сценарий, который входит на удаленный сервер и пытается переименовать файлы с помощью PHP.
В настоящее время код выглядит примерно так, как в этом примере с веб-сайта php.net:
if (ftp_rename($conn_id, $old_file, $new_file)) {
echo "successfully renamed $old_file to $new_file\n";
} else {
echo "There was a problem while renaming $old_file to $new_file\n";
}
но ... в чем была ошибка? Разрешения, нет такого каталога, диск заполнен?
Как я могу заставить PHP возвращать ошибку FTP? Что-то вроде этого:
echo "There was a problem while renaming $old_file to $new_file:
the server says $error_message\n";






Посмотрите на FTP API здесь:
http://us.php.net/manual/en/function.ftp-rename.php
Кажется, нет никакого способа узнать что-либо, кроме правды или лжи.
Однако вы можете использовать ftp_raw для отправки необработанной команды RENAME, а затем проанализировать возвращенное сообщение.
Вы можете использовать error_get_last (), если возвращаемое значение ложно.
Я делаю что-то вроде:
$trackErrors = ini_get('track_errors');
ini_set('track_errors', 1);
if (!@ftp_put($my_ftp_conn_id, $tmpRemoteFileName, $localFileName, FTP_BINARY)) {
// error message is now in $php_errormsg
$msg = $php_errormsg;
ini_set('track_errors', $trackErrors);
throw new Exception($msg);
}
ini_set('track_errors', $trackErrors);
Обновлено:
Обратите внимание, что $ php_errormsg устарел с PHP 7.
Вместо этого используйте error_get_last ().
См. Ответ @Sascha Schmidt
Основываясь на ответе @Sascha Schmidt, вы могли бы сделать что-то вроде этого:
if (ftp_rename($conn_id, $old_file, $new_file)) {
echo "successfully renamed $old_file to $new_file\n";
} else {
echo "There was a problem while renaming $old_file to $new_file\n";
print_r( error_get_last() ); // ADDED THIS LINE
}
print_r отобразит содержимое массива error_get_last (), чтобы вы могли точно определить ошибку.
Для меня это всегда ноль. Моя проблема -
ftp_put, а неftp_rename, поэтому я не уверен, что это полностью относится к OP. Для меня исправление заключалось в том, чтобы вызватьftp_pasvпередftp_put. Я использую Ubuntu 14.04 с php 5.5.9.