PHP + cURL:简单的测试脚本无法工作(在一台机器上)

时间:2015-07-05 08:20:34

标签: php apache curl

我有一个非常简单的PHP脚本,它使用cURL加载网页并显示它

<?php
  $ch = curl_init("http://www.reddit.com/");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
  $content = "Hello, World!";
  $content = curl_exec($ch);
  curl_close($ch); 
  echo $content;
?>

在我的本地计算机上,它运行良好 - 但不在我的服务器计算机上。在这里,我得到一个&#34;连接被重置&#34; Firefox中的错误。导致麻烦的行似乎是$content = curl_exec($ch);。如果我对此行发表评论,我会在两台机器上看到Hello, World!

在两台计算机上调用phpinfo()时,cURL部分看起来非常相似。这里可能存在的问题是它可以在一台机器上运行而在另一台机器上运行。基本上,两者都运行Ubuntu 14.04,Apache 2和PHP 5.哪些配置或权限可能不同。我有点不知所措。

编辑:正如arkascha建议的那样,我已经检查了Apache error.log文件。事实上,如果我在执行curl_exec命令时看到以下错误:

[core:notice] [pid 28267] AH00051: child pid 28274 exit signal Segmentation fault (11), possible coredump in /etc/apache2

2 个答案:

答案 0 :(得分:0)

之前我遇到过类似问题,并使用解决方案given here解决了问题。在您的文件顶部,在下面添加一行并再次测试。

<?php
ini_set('zend.enable_gc', 0);
....
....

答案 1 :(得分:0)

我刚刚经历过类似的事情。两个服务器之间的CURL连接,大部分时间都在工作,但在五个中大约会崩溃一次。

当它崩溃时,Firefox会报告&#34;连接被重置&#34;并且Safari会告诉我&#34;服务器意外地断开了连接&#34;。 Apache错误日志将显示if ( (self.fbGraph.accessToken == nil) || ([self.fbGraph.accessToken length] == 0) ) { [self.fbGraph authenticateUserWithCallbackObject:self andSelector:@selector(fbGraphCallback:)andExtendedPermissions:@"email,publish_stream,public_profile,user_checkins,publish_actions,status_update,user_friends,read_stream,user_photos,friends_photos"]; } else { if([self.fbGraph.accessToken length] > 0){ NSMutableDictionary *variables = [NSMutableDictionary dictionaryWithCapacity:4]; NSString *Header; if(self.AutoMatedSahre==100){ Header=[NSString stringWithFormat:@"'%@ is planning to use this offer'\n%@",[[self.shareDelegate.userdetails valueForKey:@"firstname"] capitalizedString],[self.dForDetail valueForKey:@"business_name"]]; }else{ Header=[self.dForDetail valueForKey:@"business_name"]; } NSString *dealdesc=[NSString stringWithFormat:@"%@ offer on ABC.\n %@.\n http://www.example.com/deal_summary.html?deal_id=%@",[self.dForDetail valueForKey:@"business_name"],[self.dForDetail valueForKey:@"deal_name"],[self.dForDetail valueForKey:@"id"]]; [variables setObject:dealdesc forKey:@"message"]; [variables setObject:Header forKey:@"name"]; [variables setObject:[self.dForDetail valueForKey:@"image_url"] forKey:@"link"]; FbGraphResponse *fb_graph_response = [self.fbGraph doGraphPost:@"me/feed" withPostVars:variables]; NSLog(@"postMeFeedButtonPressed: %@", fb_graph_response.htmlResponse); //parse our json SBJSON *parser = [[SBJSON alloc] init]; NSDictionary *facebook_response = [parser objectWithString:fb_graph_response.htmlResponse error:nil]; [parser release]; self.feedPostId = (NSString *)[facebook_response objectForKey:@"id"];

添加跟踪,我发现它实际上是导致崩溃的exit signal Segmentation fault (11)函数,而不是实际工作正常的curl_close(其结果出现在我的日志中)。 / p>

最后,我在我的代码中确定了这一行......

curl_exec

...我用它来将CURL会话的原始数据输出到日志文件,以便进行调试。由于我注释掉了那一行,错误就停止了。

因此,使用CURLOPT_VERBOSE似乎会导致CURL崩溃,并使用PHP / Apache。 (我也看到CPP程序员的讨论在CPP上对CURL说了同样的话。)