PHPを使用して、リモートサーバーにログオンし、ファイルの名前を変更しようとするスクリプトがあります。
コードは現在、php.netWebサイトの次の例のようになっています。
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";
}
しかし...エラーは何でしたか?権限、そのようなディレクトリはありません、ディスクがいっぱいですか?
FTPエラーを返すためにPHPを取得するにはどうすればよいですか?次のようなものです:
echo "There was a problem while renaming $old_file to $new_file:
the server says $error_message\n";
ここでFTPAPIを見てください:
http://us.php.net/manual/en/function.ftp-rename.php
真か偽か以外に何かを得る方法はないようです。
ただし、ftp_rawを使用して生のRENAMEコマンドを送信し、返されたメッセージを解析することはできます。
戻り値がfalseの場合は、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()を使用してください。
@SaschaSchmidtによる回答を参照してください
@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()配列の内容を表示するので、エラーを正確に特定できます。