php7.3 ftp_cdup() 在某些 FTP 服务器中抛出 "CDUP successful" 异常
php7.3 ftp_cdup() throws "CDUP successful" exception in some FTP servers
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 successful. "/" is current directory
其实这是正常的。
首先,我不认为 ftp_cdup
(或任何其他 PHP FTP 函数)会抛出任何异常。您可能有一些错误处理程序 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 的回复代码相同。”
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 successful. "/" is current directory
其实这是正常的。
首先,我不认为 ftp_cdup
(或任何其他 PHP FTP 函数)会抛出任何异常。您可能有一些错误处理程序 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 的回复代码相同。”