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

时间:2012-12-11 09:26:10

标签: php curl file-io ftp

我最近遇到一个问题,在我的应用程序流量很大的时候,使用零字节的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);

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

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

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

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

1 个答案:

答案 0 :(得分:2)

因为你在高流量时提到它。您尝试发送的CSV文件是否有很多或读/写活动?也许它的fopen实际上失败了,因此你发送0个字节,但文件名正确。这只会产生警告,所以不会被抓住。

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