使用PHP cURL/FTP以零字节传输的文件

crm*_*cco 5 php ftp file-io curl

我最近遇到了一个问题,在我的应用程序流量很大的时候,使用零字节的cURL/FTP发送小型CSV文件.但是,当我在我的文件系统上查看文件时,我可以看到它绝对不是空的,而且大小不是零字节.

这是我的PHP代码:

$ch = curl_init();
$fp = fopen($bFile, 'r');
curl_setopt($ch, CURLOPT_URL, 'ftp://'.FTP_SERVER .'/'.FTP_DIRECTORY.$file_name);
curl_setopt($ch, CURLOPT_USERPWD, FTP_USER.':'.FTP_PASS);
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($bFile));
curl_setopt($ch, CURLOPT_FTP_USE_EPSV, false);
curl_exec($ch);
Run Code Online (Sandbox Code Playgroud)

我在cURL返回错误的代码中也有一些基本的错误处理:

if ( curl_error($ch) ) {
    throw new Exception("File could not be sent via FTP: " . curl_error($ch));
}
Run Code Online (Sandbox Code Playgroud)

但是,我注意到在这个例子中没有抛出异常并且代码执行继续的情况.

我的文件系统上是否有任何原因,例如5Kb的CSV文件,但我发送文件的FTP服务器只有零字节文件?这是否意味着传输问题,可能是由于每年这个时候的大量流量造成的?

Hug*_*ing 2

既然你在高流量期间提到了它。您尝试发送的 CSV 文件是否可能存在大量读/写活动?也许 fopen 实际上失败了,因此您发送了 0 个字节,但文件名正确。这只会产生警告,因此不会被捕获。

也许您应该向使用curl发送的不同值添加一些日志记录,例如filesize($bFile)$fp