2010-09-30 99 views
0

我想获得一个PHP脚本工作。该脚本的目的是呼叫Web服务。我已经将脚本简化为最简单的组件,但仍然失败。那就是:呼叫新的HttpRequest失败

<?php 
print "Hello"; 
$request = new HttpRequest('http://www.pivotaltracker.com/services/v3/source_commits', HttpRequest::METH_POST); 
print "Done"; 
?> 

输出是:

D:\svn\svndb\hooks>"c:\Program Files\PHP\php.exe" -f test.php 
Hello 
D:\svn\svndb\hooks> 

正如你所看到的,试图实例的HttpRequest的实例时,脚本失败。但是,不会抛出异常。

我不是一个PHP程序...我只是想让这个功能工作。我怀疑我没有加载我需要的扩展库......但我无法弄清楚哪一个是,如果确实是这个问题。任何帮助,将不胜感激。

我在Windows 2003上运行。我正在运行php 5.3.3。

我确实运行过phpinfo(),但因为它太大而不愿在此发布结果。有没有phpinfo()输出的一部分有助于提供?

在此先感谢。

鲍勃

+2

在前面加一个'error_reporting(E_ALL);'看看会发生什么。 – 2010-09-30 18:13:07

+1

如果你设置了'error_reporting(E_ALL); ini_set('display_errors','1');'在开始的时候? – Tomalak 2010-09-30 18:14:12

回答

1
  1. 通过error_reporting(E_ALL)报告错误;
  2. 启用显示错误ini_set('display_errors',1);

更好地从php.ini更改这些设置。 如果它不工作看Apache日志(error.log中)

1

你可以使用卷曲为目的很简单:

<?php 
$url = "http://www.pivotaltracker.com/services/v3/source_commits"; 
$ch = curl_init(); 

// set the target url 
curl_setopt($ch, CURLOPT_URL, $url); 

// howmany parameter to post 
curl_setopt($ch, CURLOPT_POST, 1); 

// parameters 
curl_setopt($ch, CURLOPT_POSTFIELDS, "someParameter=someValue"); 

$result = curl_exec ($ch); 
curl_close ($ch); 

print $result; 
?> 

或者使用fsockopen()连接到服务器,并fwrite发送原始HTTP POST请求。

+0

谢谢。这很完美。我最终实现了这一点,它效果很好。 – Spob 2010-10-01 15:57:40

1

谢谢大家的回答。他们都是现场。我以为我会在最后帮助其他人的情况下取消我所做的。

问题的确是我没有安装http PECL扩展。不幸的是,我在Windows上,没有扩展这个扩展,我不想在这个盒子上安装微软工具来编译源代码。所以,我去了上面列出的建议,并使用curl来实现它。

我正在处理的脚本是使用在http://phpjack.com/content/pivotal-tracker-and-subversion处找到的优秀php脚本将svn集成到http://www.pivotaltracker.com。我修改了脚本如下(万一别人是在一个类似点):

$request = new HttpRequest('http://www.pivotaltracker.com/services/v3/source_commits', HttpRequest::METH_POST); 
$headers = array(
    'X-TrackerToken' => $token, 
    'Content-type' => 'application/xml' 
); 
$request->setHeaders($headers); 
$request->setBody("<source_commit><message>$message</message><author>$author</author><commit_id>$rev</commit_id></source_commit>"); 
$request->send(); 

再次

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/xml","X-TrackerToken: $token")); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $body); 
curl_setopt($ch, CURLOPT_POST, 1); 
$result = curl_exec ($ch); 
curl_close ($ch); 
print $result; 

感谢成为

所有优秀的,及时的提醒。