将get数据传递到php-cgi比较容易,但是将post或cookie数据传递到php-cgi,稍微复杂一些,需要了解php-cgi的一些接口环境变量。下面分别讲一下在dos环境和shell环境如何post数据到php-cgi。
windows系统 批处理t.bat脚本代码:php代码 test.php
- set REDIRECT_STATUS=true
- set SCRIPT_FILENAME=d:\php\test.php
- set REQUEST_METHOD=POST
- set GATEWAY_INTERFACE=CGI/1.1
- set CONTENT_LENGTH=16
- set CONTENT_TYPE=application/x-www-form-urlencoded
- set HTTP_COOKIE=PHPSESSID=vfg5csi76qpt3qlfml359ad210
- set QUERY_STRING=id=123
- echo test=hello world | d:\php\php-cgi.exe
- pause
执行t.bat,输出结果: linux系统 t.sh脚本代码
- setcookie('name','xxoo');
- echo "get:";
- print_r($_GET);
- echo "\r\npost:";
- print_r($_POST);
- echo "\r\ncookie:";
- print_r($_COOKIE);
/var/www/test.php 跟在上面的test.php一样 执行chmod 777 t.sh./t.sh 输出结果 数据是如何传递的呢?echo test=hello world | php-cgiecho test=hello world会得到test=hello world,因为有管道符| 所以会把第一个命令的输出传递到第二个命令的输入管道中 原理总结: 在dos通过set和在linux通过export设置环境变量,在php中可以通过$_SERVER['环境变量名']去获取。$_SERVER['QUERY_STRING']=”id=123″ 会被解析到$_GET全局变量中$_SERVER['HTTP_COOKIE']=”PHPSESSID=vfg5csi76qpt3qlfml359ad210″ 会被解析到$_COOKIE全局变量中$_SERVER['REQUEST_METHOD'] =”POST”$_SERVER['CONTENT_LENGTH'] =16$_SERVER['CONTENT_TYPE'] =”application/x-www-form-urlencoded”设置了这三个变量,php会从管道中读取16个字节,并解析到$_POST全局变量。
- export REDIRECT_STATUS=true
- export SCRIPT_FILENAME=/var/www/test.php
- export REQUEST_METHOD=POST
- export GATEWAY_INTERFACE=CGI/1.1
- export CONTENT_LENGTH=16
- export CONTENT_TYPE=application/x-www-form-urlencoded
- export HTTP_COOKIE=PHPSESSID=vfg5csi76qpt3qlfml359ad210
- export QUERY_STRING=id=123
- echo test=hello world | php-cgi
本文出自 “水滴博客” 博客,请务必保留此出处http://golang.blog.51cto.com/4563391/804276