2010-09-30 131 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; 

感謝成爲

所有優秀的,及時的提醒。