通过dos或shell post数据到php-cgi

时间:2022-10-26 16:51:09

 将get数据传递到php-cgi比较容易,但是将post或cookie数据传递到php-cgi,稍微复杂一些,需要了解php-cgi的一些接口环境变量。下面分别讲一下在dos环境和shell环境如何post数据到php-cgi。

  windows系统   批处理t.bat脚本代码:
  
 
 
  1. set REDIRECT_STATUS=true 
  2. set SCRIPT_FILENAME=d:\php\test.php 
  3. set REQUEST_METHOD=POST 
  4. set GATEWAY_INTERFACE=CGI/1.1 
  5. set CONTENT_LENGTH=16 
  6. set CONTENT_TYPE=application/x-www-form-urlencoded 
  7. set HTTP_COOKIE=PHPSESSID=vfg5csi76qpt3qlfml359ad210 
  8. set QUERY_STRING=id=123 
  9. echo test=hello world | d:\php\php-cgi.exe 
  10. pause 
  php代码 test.php  
  
 
 
  1. setcookie('name','xxoo'); 
  2. echo "get:"
  3. print_r($_GET); 
  4.   
  5. echo "\r\npost:"
  6. print_r($_POST); 
  7.   
  8. echo "\r\ncookie:"
  9. print_r($_COOKIE); 
执行t.bat,输出结果:

通过dos或shell post数据到php-cgi

linux系统 t.sh脚本代码 
   
  
  
  1. export REDIRECT_STATUS=true 
  2. export SCRIPT_FILENAME=/var/www/test.php 
  3. export REQUEST_METHOD=POST 
  4. export GATEWAY_INTERFACE=CGI/1.1 
  5. export CONTENT_LENGTH=16 
  6. export CONTENT_TYPE=application/x-www-form-urlencoded 
  7. export HTTP_COOKIE=PHPSESSID=vfg5csi76qpt3qlfml359ad210 
  8. export QUERY_STRING=id=123 
  9. echo test=hello world | php-cgi 
/var/www/test.php 跟在上面的test.php一样 执行chmod 777 t.sh./t.sh 输出结果

通过dos或shell post数据到php-cgi

数据是如何传递的呢?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全局变量。
 
   

 

本文出自 “水滴博客” 博客,请务必保留此出处http://golang.blog.51cto.com/4563391/804276