关于PHP开发HTTP服务器
最近因工作需要,要为一款手机游戏弄个管理游戏排行榜的服务器,经过同学介绍,认为使用php来开发比较简单,所以就临时去学了php的基础语法和网上查了很多关于如何开发服务器的资料。
在这里本人谈谈我自己做服务器过程中遇到的问题,希望跟我一样临时需要开发php服务器的新手可以获得帮助,至于高手,你就无视我吧。
网上找的很多资料都是讲php如何模拟发送http请求的,很少有关于服务器如何获取客户端请求的资料,或许经过系统学习的都知道了,但是对于本人这种临时学习的,还真是个硬伤。
经过我查找的资料 php做的服务器接受客户端的数据可以通过$_POST,$_GET,$_REQUEST来获取。 客户端需要用对应的$_post,$_get 来提交数据,$_REQUEST似乎都可以。
至于$_POST,$_GET的区别,百度上太多了 你可以自己找找
$_POST,$_GET返回的就是你客户端传过来的参数,你可以通过处理这些参数来完成功能,至于你想返回数据给客户端,只需要echo就行了
如果客户端使用get方式发送的请求,想获取数据很简单,只需要使用$_SERVER['QUERY_STRING'] 即可获取,信息来源于http://hi.baidu.com/iigyphfsjfgjkye/item/f180b2fbc5aa18ee1b111fc1 更多信息自己查看吧
我这次做的php服务器,不知道是什么原因,用$_POST,$_GET,$_REQUEST不能获取到数据。 所以找了$GLOBALS[$HTTP_RAW_POST_DATA]和file_get_contents("http://input")来获取数据
上面两个方式都能获取客户端post过来的请求 第一个听说似乎不能收一种数据,忘了
我使用的是第二个 $request = file_get_contents("http://input") 就得到了客户端post过来的参数了。
在这里介绍一种软件Fidder,百度即能下载。这软件能代替客户端来发送get,post等等等方式的请求,能够测试你服务器是否能收到客户端的请求。
------解决方案--------------------
用$_POST,$_GET,$_REQUEST不能获取到数据。 所以找了$GLOBALS[$HTTP_RAW_POST_DATA]和file_get_contents("http://input")来获取数据。
你的数据是二进制流吗?
$_POST:通过 HTTP POST 方法传递的变量组成的数组。是自动全局变量。
$GLOBALS['HTTP_RAW_POST_DATA'] :总是产生 $HTTP_RAW_POST_DATA 变量包含有原始的 POST 数据。此变量仅在碰到未识别 MIME 类型的数据时产生。$HTTP_RAW_POST_DATA 对于 enctype="multipart/form-data" 表单数据不可用。
也就是说基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一样的。
但是如果post过来的数据不是PHP能够识别的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']来接收,比如 text/xml 或者 soap 等等。
补充说明:PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型