Как прочитать HTTP получить запрос с PHP-сервера - PullRequest
1 голос
/ 08 июля 2011

У меня есть клиент в php, который отправляет запрос http на сервер.это код:

клиент

<?php

function xml_post($xml_request)
{
    $url="http://localhost/malakies/server.php?xml=" . urlencode($xml_request);
    $ch=curl_init();

    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    $result=curl_exec($ch);

    if (curl_errno($ch)){
    $ERR .= "cURL ERROR: ".curl_errno($ch).": ".curl_error($ch)."\n";
    }

    return $result;
}

$result=xml_post("Send sth");
echo $result; ?>

и код сервера:

<?php
$postdata = $_GET['xml'];
echo $postdata; ?>

Все работает идеально.Но у меня есть вопрос, что это может быть новичком :) Я хочу на стороне сервера иметь что-то вроде слушателя, который слушает, когда пришел запрос http get и делает что-то с этим запросом.я не знаю, является ли http-запрос техникой, которая дает мне такую ​​возможность ... я хочу вот что:

while(http request hasn't come yet) 
   just wait;
do sth with the http request.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 08 июля 2011

PHP скрипт запускается автоматически для каждого отдельного запроса.Так что на самом деле PHP / Apache уже делает то, что вы просите.

Возможно, это немного сбивает с толку, если вы работаете с другим языком программирования (например, Java), где у вас обычно есть цикл обработки событий, ожидающий новыхподключение.

С другой стороны, возможно, у вас в голове была особая ситуация.Пожалуйста, объясните ваши требования далее, если это так ...

0 голосов
/ 14 июля 2011

Поскольку ваш URL-адрес «заканчивается» в server.php, вам необходимо разместить на вашем сервере файл с именем «server.php». Если ваш скрипт curl возвращает ошибку 404, у вас нет файла в нужном месте. Где вам нужно разместить файл, зависит от операционной системы. В Linux это МОЖЕТ быть / var / www /. Так что вам нужно выяснить, каков ваш «корень документа». Там вы создали бы subdir malakies. В примере с Linux это будет /var/www/malakies/server.php. Затем PHP выполнит скрипт внутри вашего файла, когда поступит запрос. Передаваемые вами данные будут помещены в ассоциативный массив с именем $ _GET. Я предлагаю следующее содержимое для server.php:

<?php
echo "Have a first line so you see something even when no data is passed\n";
var_dump($_GET['xml']);
?>

xml_post в вашей функции curl вернет (не обращая внимания на цвета)

Have a first line so you see something even when no data is passed
Send sth

Если он не работает, какой код ошибки вы получаете?

Я предположил, что у вас установлен apache и вы хотите перехватить запрос с помощью PHP.

...