Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP时如何获取FTP错误_Php_Error Handling_Ftp - Fatal编程技术网

使用PHP时如何获取FTP错误

使用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"; } 但是。。。错误是什

我有一个脚本,可以登录到远程服务器并尝试使用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";
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。