2015-01-03 55 views
4

我想通过ReactPHP Web服务器运行一个简单的Web应用程序,但我无法弄清楚从哪里获取来自HTML表单的POST数据。作为服务器的定义:反应PHP获取POST数据

include 'vendor/autoload.php'; 

register_shutdown_function(function() { 
    echo implode(PHP_EOL, error_get_last()), PHP_EOL; 
}); 

$loop = React\EventLoop\Factory::create(); 
$socket = new React\Socket\Server($loop); 
$http = new React\Http\Server($socket); 
$http->on('request', function(React\Http\Request $request, React\Http\Response $response) { 
    print_r($request); 
    $response->writeHead(200, array('Content-type' => 'text/html')); 
    $response->end('<form method="POST"><input type="text" name="text"><input type="submit" name="submit" value="Submit"></form>'); 
}); 
$socket->listen(9000); 
$loop->run(); 

发帖时使用的HTML表单一些字符串,该$request对象,印在控制台上时,看起来像:

React\Http\Request Object 
(
    [readable:React\Http\Request:private] => 1 
    [method:React\Http\Request:private] => POST 
    [path:React\Http\Request:private] =>/
    [query:React\Http\Request:private] => Array 
     (
     ) 

    [httpVersion:React\Http\Request:private] => 1.1 
    [headers:React\Http\Request:private] => Array 
     (
      [User-Agent] => Opera/9.80 (X11; Linux i686) Presto/2.12.388 Version/12.16 
      [Host] => localhost:9000 
      [Accept] => text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1 
      [Accept-Language] => it,en;q=0.9 
      [Accept-Encoding] => gzip, deflate 
      [Referer] => http://localhost:9000/ 
      [Connection] => Keep-Alive 
      [Content-Length] => 24 
      [Content-Type] => application/x-www-form-urlencoded 
     ) 

    [listeners:protected] => Array 
     (
     ) 

) 

在这里我无法找到我的数据随处可见我认为它应该位于query属性中,但它是空的。

当我发出GET请求时,相反,在查询字符串中传递的数据可以在$request对象的query属性中找到。

那么,我可以在哪里找到通过POST请求传递的数据?

+0

我怀疑这是一个旧版本ReactPHP的 - '阵营\插座\ Server'在第二个ctor参数取得循环,而不是第一个参数。我相信0.7.x在撰写本文时是最新的。 – halfer

+0

对于当前版本的ReactPHP,获取原始POST正文的代码是[在子项目README](https://github.com/reactphp/http)中。如果它是常规键值数据,则可以将其解析为单独的字段。 – halfer

回答

2

我在这里重复上次编辑我的问题,所以这个问题可以标记为回答。

没关系,找到了答案here。基本上,似乎React PHP不支持读取POST数据的简单方法。我们所能做的,不过,是要尽快读取数据,因为它来了,看着$request对象的事件data

$request->on('data', function($data) { 
    // Here $data contains our POST data. 
    // The $request needs to be manually ended, though. 
}); 
+1

[链接](https://github.com/reactphp/http/pull/13)你可以按照这个拉请求,并了解为什么这样。 –

+0

@ArunPoudel谢谢! – swahnee