【问题标题】:files being transmitted with PHP cURL/FTP with zero bytes使用零字节的 PHP cURL/FTP 传输的文件
【发布时间】:2012-12-11 09:26:10
【问题描述】:

我最近遇到了一个问题,在我的应用程序的高流量期间,使用 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 服务器只有一个零字节文件,是否有任何原因?这是否表明传输问题,可能是由于每年这个时候的高流量造成的?

【问题讨论】:

  • 听起来像一个真正的熊去解决问题。考虑在curl_exec 调用前后添加日志点?您是否安装了FTP extension?使用起来更烦人,但你也许可以从中哄出更好的错误。
  • 是的,排除故障是一个尴尬的问题,因为它不是在每个文件上都发生,甚至不是那么频繁。这就像 500 个文件中的 1 个,甚至更多。

标签: php curl file-io ftp


【解决方案1】:

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

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

【讨论】:

  • CSV 文件由一个脚本(发送它的同一个脚本)创建、写入然后删除,所以我认为不会有很多读/写活动文件。所以记录文件的文件大小是一个好点,我想我需要这样做。
  • 我已经添加了这样的检查 if (filesize($bFile) == false or filesize($bFile) == '0') {if ($fp === false) { 以检查 fopen 是否失败,因此我们将看看这是否可以缩小我发送空文件的问题。
猜你喜欢
  • 1970-01-01
  • 2013-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 2010-11-18
相关资源
最近更新 更多