2010-09-30 3 views
0

Я пытаюсь получить скрипт php. Цель скрипта - обратиться к веб-службе. Я сократил скрипт до самых простых компонентов, и он все еще не работает. Вот оно:Ошибка при вызове нового 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);' впереди и посмотрите, что произойдет. –

+1

Что он делает, если вы установите 'error_reporting (E_ALL); ini_set ('display_errors', '1'); 'прямо в начале? – Tomalak

ответ

6

Поместите error_reporting(E_ALL); спереди и посмотреть, что происходит.

Моя ставка заключается в том, что класс HTTPRequest не существует. Расширение HTTP - это PECL package that needs to be installed separately.

+0

Ты был прав. Спасибо за помощь. – Spob

1
  1. Сообщение об ошибке error_reporting (E_ALL);
  2. Включить ошибки отображения ini_set ('display_errors', 1);

Лучше изменить эти настройки на php.ini. Если это не работает, посмотрите на апача журналы (Error.log)

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 POST запрос.

+0

Спасибо. Это было прекрасно. Я закончил реализацию этого, и он отлично работает. – Spob

1

Спасибо всем за ваши ответы. Они все были на месте. Я подумал, что в конце концов я подберу то, что сделал, если это поможет кому-то другому.

Проблема в том, что я не установил расширение http PECL. К сожалению, я нахожусь в окнах и не было дистрибутива этого расширения, и я не хотел устанавливать инструменты Microsoft на этом поле, чтобы иметь возможность скомпилировать источник. Итак, я пошел с указанным выше предложением и реализовал его с помощью curl.

Сценарий, над которым я работал, состоял в интеграции svn в http://www.pivotaltracker.com, используя отличный скрипт php, найденный по адресу 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; 

Еще раз спасибо за прекрасную и своевременную посоветуйте.

Смежные вопросы