for($i=1;$i<=$path_div;$i++)
{
try{
$res = ftp_cdup($this->conn);
if(!$res){
throw new \Exception('ftp_cdup fail');
}
}catch (\Exception $e){
/**
* :ftp_cdup(): CDUP successful. "/" is current directory
*/
if(strpos($e->getMessage(),'ftp_cdup(): CDUP successful')>=0){
//normal
}else{
throw new \Exception('ftp_cdupfail:'.$e->getMessage());
}
}
}例外是
ftp_cdup():CDUP成功。"/“是当前目录
事实上,这是正常的。
发布于 2020-12-07 07:12:50
首先,我不认为ftp_cdup (或任何其他PHP函数)会抛出任何异常。您可能已经设置了一些converts PHP warnings into exceptions错误处理程序,不是吗?
无论如何,PHP期望服务器用代码250响应成功的CDUP命令。您的服务器可能会使用其他一些2xx成功代码(比如平原200)进行响应。我不认为PHP就在这里。我不认为你真的能做点什么。
不用使用ftp_cdup,您可以这样做:
$resp = ftp_raw("CDUP");并检查$resp中的2xx代码。
或者只使用ftp_chdir而不是ftp_cdup。
我不认为FTP RFC 959真的要求响应必须是200。只是个例子。问题可能来自于CWD和CDUP示例中的不一致。我希望两者使用相同的代码。但是RFC显示CWD为250个,而CDUP为200个。甚至RFC也说:“CDUP的回复代码与CWD的回复代码相同。”
https://stackoverflow.com/questions/65175414
复制相似问题