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

У меня есть сценарий, который входит на удаленный сервер и пытается переименовать файлы с помощью 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";
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
23
0
41 335
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

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

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

Кажется, нет никакого способа узнать что-либо, кроме правды или лжи.

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

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

Для меня это всегда ноль. Моя проблема - ftp_put, а не ftp_rename, поэтому я не уверен, что это полностью относится к OP. Для меня исправление заключалось в том, чтобы вызвать ftp_pasv перед ftp_put. Я использую Ubuntu 14.04 с php 5.5.9.

Tyler Collier 12.08.2014 23:52

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

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

Другие вопросы по теме