【发布时间】:2014-07-02 15:49:17
【问题描述】:
我使用 cURL 在两台服务器之间传输数据 - 都运行 Ubuntu 12.04、Lighttpd 和 PHP5.5 FastCGI。我曾经 bzcompress 数据 - 这纯粹是一个遗留问题:我发现 bzcompress 在将文本数据写入文件时提供更有效的压缩。传输的数据往往非常小——通常在 512 字节以下。
但是,今天我遇到了一个问题,即数据有点长 - 接近 1 kB。 curl_exec 适时返回 true 并且没有报告错误。但是,数据从未到达目的地。我原来的代码如下
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,"{$cql}");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,false);
我怀疑编码存在问题,也许是我的 bzcompression 问题。所以我用 gzdeflate 替换了 bzcompress 并将我的 curl 代码更改为
curl_setopt($ch,CURLOPT_HTTPHEADER,array('Content-Type:text/plain'));
curl_setopt($ch,CURLOPT_ENCODING,'');
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,"{$cql}");
这行得通 - 不再有消失的数据。但是,“解决方案”纯粹是根据对 PHP 文档和此处的一些帖子的一些阅读,拼凑出一个替代方案的结果——对于我的一个小但任务关键的部分来说,这不是一个可以依赖的东西做。
所以问题 - 这里发生了什么?为什么原始代码会因较长的数据字符串而失败,为什么后一个版本可以工作?它会一直有效还是缺少其他东西?
我将非常感谢任何帮助和提示。
【问题讨论】:
标签: php curl encoding compression gzip