2011-07-08 4 views
1

私は、httpをサーバに要求するphpのクライアントを持っています。phpサーバからhttp getリクエストを読む方法

クライアント

<?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; ?> 

がすべて完璧に動作しているコードです。しかし、私はそれがルーキーの1つかもしれないという質問があります:) 私は、HTTPリクエストが来て、この要求でsthを行うときにリッスンするリスナーのようなsthを持つサーバー側にしたい。

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

は、事前にありがとう:httpリクエストが私にこのようなオプションを与える技術であるならば、私はそのようSTHたく...わかりません。

+1

これは奇妙な要求です。ある意味では、あなたのWebサーバーはすでにこれを行います。それは、リクエストが来たときにあなたのPHPスクリプトをトリガします。それは何らかの方法では不十分ですか? –

+1

Apacheはこの仕事をしています(着信HTTPリクエストを聞いています)。または、長い時間開いたクライアントとの接続を維持したいですか?これの目的は何ですか? – Gedrox

答えて

1

PHPスクリプトは、個別のリクエストごとに自動的に実行されます。だから、実際にはPHP/Apacheは既にあなたが求めていることをしています。

通常、新しい接続を待っているイベントループがある別のプログラミング言語(Javaなど)から来ている場合、これは少し混乱するかもしれません。

一方、多分あなたはあなたの心の中に特定の状況を持っていたかもしれません。その場合はさらに必要事項を説明してください...

+0

説明するには.. javaのように、たとえば、要素がクリックされたときにトリガされるものをクリックするようなイベント機能があります。同様の方法で私はこのようなhttpの要求が来るときに起動されるPHPのような機能をしたいと思います。クライアントとサーバーが2つのWebサイトであると仮定します。もし私が "echo $ result;"コマンドを削除したらクライアントコードから私は "サーバー"サイトを開いて文字列 "send sth"を表示したいと思っています。私がクライアントをリフレッシュするときに私は2つのタブがブラウザ(clentとサーバー)で開いている場合、私はクライアントではなくサーバー側で文字列 "send sth"を見たいと思う。 –

+0

あなたの説明した状況が私の答えと一致します。 PHPモジュールは、リクエストごとにリクエストされたスクリプトを別々に実行します。つまり、クライアントコードを2回実行すると、サーバーコードも2回実行されます(クライアントからの要求が2回あるため)。 サーバーコードがクライアントに関する情報を保存する場合(クライアントが送信したデータを保存する場合など)は、セッションを使用します。セッションは通常、クライアント(通常はブラウザ)に保存されているクッキーによって識別されますが、CURLを使用しているため、セッション用にcookiejarを使用する必要があります(http://php.net/manual/en/book.curl .php) – usoban

0

urlはserver.phpで "終了"するので、 "server.php"という名前のサーバーにファイルを配置する必要があります。カールスクリプトが404エラーを返した場合、正しい場所にファイルがありません。ファイルを配置する必要がある場所は、オペレーティングシステムによって異なります。 Linuxでは、これは/ var/www /とすることができます。だからあなたはあなたの "ドキュメントルート"が何であるかを知る必要があります。そこで、あなたはサブディレクトリのマラキィを作成します。 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カール関数は

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

それは働いていない場合、あなたが得るエラーコードが何(色を無視)を返しますか?

あなたはApacheがインストールされており、PHPでリクエストを受け取りたいと思っていました。

+0

私は技術をソケットで変えました。私はそれらを私の実験の目的のために本当に役に立つと感じました。私はあなたのHTTPリクエストの解決策をチェックします!タイ! –

関連する問題