在我看来,你遇到了一个奇怪的 PHP 错误。
The Delete operation successful.
不是 PHP 错误消息,它是成功删除 (DELE) 命令的 FTP 服务器响应消息。
经过对 PHP 源代码的分析,我能找到的对这个问题的唯一解释是ftp_get
函数失败,但没有从 FTP 服务器收到错误消息,因此它显示上一个执行的命令的 FTP 服务器响应,在本例中,该命令是删除命令。
PHP FTP 函数将 FTP 服务器响应文本存储在输入缓冲区字段 https://github.com/frice2014/php_source/blob/master/ext/ftp/ftp.h#L63 of the ftpbuf
结构:
typedef struct ftpbuf {
...
char inbuf[FTP_BUFSIZE]; /* last response text */
...
}
然后将该字段用于ftp_get 函数 https://github.com/frice2014/php_source/blob/master/ext/ftp/php_ftp.c#L902显示警告消息:
if (!ftp_get(ftp, outstream, remote, xtype, resumepos TSRMLS_CC)) {
php_stream_close(outstream);
VCWD_UNLINK(local);
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
RETURN_FALSE;
}
The ftp->inbuf
字段由ftp_getresp fnc https://github.com/frice2014/php_source/blob/master/ext/ftp/ftp.c#L1194,但可能由于某些不明原因,低水平ftp_get 函数 https://github.com/frice2014/php_source/blob/master/ext/ftp/ftp.c#L788失败而没有调用ftp_getresp
函数,因此显示误导性的错误消息。
也许 FTP 服务器错误日志可以提供一些有关真正问题所在的线索,但如果没有进一步的信息,确实很难说why您遇到了这个问题,甚至提出了解决方法。
我唯一的建议是针对不同的 FTP 服务器测试您的代码(如果可能),然后最终将您的 PHP 升级到较新的版本。