使用PHP时如何获取FTP错误
我有一个脚本,可以登录到远程服务器并尝试使用PHP重命名文件 代码当前类似于php.net网站上的以下示例:使用PHP时如何获取FTP错误,php,error-handling,ftp,Php,Error Handling,Ftp,我有一个脚本,可以登录到远程服务器并尝试使用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"; } 但是。。。错误是什
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";
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
}
在这里查看FTP API: 除了真假之外,似乎没有任何方法可以得到任何东西
但是,您可以使用ftp\u raw发送原始重命名命令,然后解析返回的消息。如果返回值为false,您可以使用error\u get\u 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从PHP7开始就被弃用了
改为使用error\u get\u last()
请参见@Sascha Schmidt的答案基于@Sascha Schmidt答案,您可以这样做:
echo "There was a problem while renaming $old_file to $new_file:
the server says $error_message\n";
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\u r将显示错误\u get\u last()数组的内容,以便您可以查明错误。这对我来说总是空的。我的问题是
ftp\u put
,而不是ftp\u rename
,因此我不确定它是否与OP完全相关。我的解决方法是在ftp\u put
之前调用ftp\u pasv
。我使用的是Ubuntu 14.04和PHP5.5.9。