本地直接调用PHP脚本并传递$_POST数据的方法
直接本地调用PHP脚本模拟POST请求的方法
要让本地PHP CLI调用时,原脚本无需修改就能正常读取$_POST数组,你需要模拟Web服务器的CGI请求环境——因为PHP在CLI模式下默认不会自动解析POST数据到$_POST,必须手动设置对应的环境变量并通过标准输入传递POST数据。
具体实现命令
保持你的$postData格式不变(URL编码的表单数据),用以下两种方式之一执行:
方式1:使用php命令
postData='form_name=Georg&form_email=george%40example.com&form_message=Something%20new&id_button=true' CONTENT_TYPE='application/x-www-form-urlencoded' php /var/www/example/form.php <<< "$postData"
方式2:使用php-cgi命令(更贴合CGI请求逻辑)
postData='form_name=Georg&form_email=george%40example.com&form_message=Something%20new&id_button=true' echo "$postData" | CONTENT_TYPE='application/x-www-form-urlencoded' php-cgi /var/www/example/form.php
原理说明
- Web服务器处理POST表单请求时,会设置
CONTENT_TYPE环境变量为application/x-www-form-urlencoded(对应表单的默认编码类型),同时将URL编码的POST数据通过**标准输入(stdin)**传递给PHP。 - PHP的CGI模式(包括
php-cgi命令,以及php命令在设置了对应环境变量时)会读取这个环境变量和标准输入的数据,自动解析填充到$_POST数组中,完全兼容原脚本的$_POST['form_email']这类读取逻辑。
注意事项
- 必须用双引号包裹
$postData,避免Bash解析其中的&等特殊字符导致命令拆分。 - 不要用
--传递参数的方式,因为原脚本依赖的是$_POST而非命令行参数($argv),参数传递无法触发PHP填充$_POST。
内容的提问来源于stack exchange,提问作者jamacoe
相关产品推荐
相关产品推荐

