我正在尝试使用PHP脚本。该脚本的目的是调用Web服务。我已经将脚本简化为最简单的组件,但它仍然失败了。这是:
<?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()输出有助于提供?
提前致谢。
鲍勃
答案 0 :(得分:6)
将error_reporting(E_ALL);
放在前面,看看会发生什么。
我敢打赌,HTTPRequest
类不存在。 HTTP扩展名为PECL package that needs to be installed separately。
答案 1 :(得分:2)
谢谢大家的回答。他们都被发现了。我以为我会对我最后所做的事情进行总结,以防它帮助其他人。
问题确实是我没有安装http PECL扩展。不幸的是,我在Windows上并且没有这个扩展的分配,我不想在这个盒子上安装microsoft工具以便能够编译源代码。所以,我采用了上面列出的建议并使用curl实现了它。
我正在处理的脚本是使用http://www.pivotaltracker.com上的优秀php脚本将svn集成到http://phpjack.com/content/pivotal-tracker-and-subversion。我修改了该脚本如下(如果其他人在类似的地方):
$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;
再次感谢所有优秀及时的建议。
答案 2 :(得分:1)
最好从php.ini更改这些设置。 如果它不工作,请查看apache logs(error.log)
答案 3 :(得分:1)
你可以将cURL用于这个简单的目的:
<?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发布请求。