PHP Curl POST问题导致PHP使用100%CPU

PHP Curl POST问题导致PHP使用100%CPU,php,curl,libcurl,Php,Curl,Libcurl,我试图用POST将数据上传到我的Web服务器,但有时cURL会暂停,并导致PHP无限期地使用100%的CPU 我正在使用下面的代码 $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $URL); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($curl, CURLOPT_POSTFIELDS

我试图用POST将数据上传到我的Web服务器,但有时cURL会暂停,并导致PHP无限期地使用100%的CPU

我正在使用下面的代码

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $URL);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)');
curl_setopt($curl, CURLOPT_HEADER, true);
$page = curl_exec($curl);
curl_close($curl);

任何关于导致此问题的原因或如何跟踪此问题的见解都将非常有用。

升级到PHP的最新版本PHP5.3.1

如果问题仍然存在,并且您的服务器运行的是Windows,请将其升级到任何其他版本,特别是*NIX的形式:GNU/Linux发行版、BSD、SunOS等形式

如果问题仍然存在,或者您认为Windows是服务器的良好操作系统[1],则跟踪问题并发送错误报告的说明如下:


[1] Microsoft自己每月都必须重新启动Microsoft.com后面的每台计算机。

您能确定它是否与特定文件相关吗?也许这与编码或上传长度有关


我的第一个想法是,至少要确定某个特定文件/文件集是否导致了问题;在上传前写出文件名(可能还有内容)和类型,在上传完成后写出文件名。这样你就可以知道哪些文件导致了问题,你可以从那里继续下去。

< P>如果它实际上是挂起并执行100%个CPU的实际卷曲“调用”,那么这是一个卷曲错误,你应该考虑升级LIbCURL。

< P>也许这个问题与你指定的POST数据有关。在调用cURL并将输出发布到此处之前,您是否可以执行
var\u dump($postdata)
?cURL可能因为类型转换/序列化问题而挂起,或者您的帖子数据根本无效(希望我们能纠正它!)。

您确定这就是挂起的地方吗?例如,您是否可以在curl_exec之前和之后打印一些内容,但却看不到第二次打印?您正在发布哪些类型的数据?接收脚本如何处理数据?哪个服务器正在暂停,发送还是接收?我已经在我的机器上运行了大约15次该代码。$page变量的响应很好。这是随机发生的,有时有效,有时发生。我正在通过另一台服务器通过post将文件上载到我的Web服务器。在上载所有脚本后,运行要上载的脚本的服务器上会出现问题。请检查脚本是否成功。当这个问题发生时,我注意到使用CURL\u VERBOSE选项时,它没有检查文件上传是否正确,所以我猜这就是问题发生的地方。我每10分钟通过cron运行一次脚本,大部分时间它都可以运行,但当这种情况发生时,PHP进程会消耗100%的CPU,并一直停留在那里,直到我杀死该进程为止。因为随机的CPU使用问题而丢弃操作系统是一个疯狂的想法。许多人都可以证明,PHP在Windows上运行得很好。对包含他问题答案的答案投否决票也不是好的因果报应:P我实际上做的是告诉他“bug”可能在哪里,如何修复它,和/或如何报告它。这是胡说八道。Windows也不是我的服务器操作系统的首选,但我相信在Windows上有许多完美的PHP生产站点,没有任何问题。由于一个未识别的错误而建议“升级”到*nix是愚蠢的。我建议在另一个操作系统上尝试代码以确定错误的来源:是因为PHP中的windows特定部分,还是因为它是通用的?它在最新版本的PHP中的行为是否相同?如果是的话,哪一个操作系统。这些都是创建bug报告时要问自己的问题。我刚刚升级到最新的PHP,问题仍然存在。我对这个过程进行了分析,得到了一个回应:poll([{fd=3,events=pollut,revents=POLLERR | POLLHUP}],1,0)=1 poll([{fd=3,events=pollut,revents=POLLERR | POLLHUP}),1,1000)=1 poll([{fd fd=3,events=POLLERR | POLLHUP}),1,0)=1 poll([{fd 3,events=pollut=3,events=POLLERR | POLLHUP},1,1000}),1([{fd=3,events=pollut,revents=POLLERR | POLLHUP}],1,0)=1个poll([{fd=3,events=pollut,revents=POLLERR | POLLHUP}],11000)=1有没有办法在不重新编译PHP的情况下更新libcurl?我正在使用Yum进行安装,因此从源代码处编译会把其他一切都搞糟。7.12.1非常古老,因此您确实应该升级它。您应该能够在不重新编译的情况下升级,但这是一个完全不同的主题。。。