Подтвердить что ты не робот

Как получить ошибку FTP при использовании PHP

У меня есть script, который регистрируется на удаленном сервере и пытается переименовать файлы, используя 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";
4b9b3361

Ответ 1

Посмотрите на API FTP здесь:

http://us.php.net/manual/en/function.ftp-rename.php

Кажется, нет никакого способа получить что-либо, кроме true или false.

Однако вы можете использовать ftp_raw для отправки необработанной команды RENAME, а затем проанализировать возвращаемое сообщение.

Ответ 2

Вы можете использовать error_get_last(), если возвращаемое значение равно false.

Ответ 3

Я делаю что-то вроде:

$trackErrors = ini_get('track_errors');
ini_set('track_errors', 1);
if ([email protected]_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

Ответ 4

Основываясь на ответе @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(), чтобы вы могли точно определить ошибку.