使用场景
有时php需要调用一些系统命令,但要调用系统命令,必须要使用exec
、system
、shell_exec
等危险函数,这些函数一般都被禁用了,无法使用。
script-httpd
script-httpd
可以将任何的命令行程序,变成网络服务。它提供一个网络接口,收到 HTTP 请求后,启动容器环境执行命令行程序,然后返回结果。
地址:https://github.com/beefsack/script-httpd
例子
这里以使用pdftk工具为例,例如使用pdftk工具将pdf文件的版本降低到1.4版本,需要使用如下命令:
pdftk tmp.pdf cat output tmp2.pdf
如果使用php代码来执行这句命令:
exec("pdftk tmp.pdf cat output tmp2.pdf", $output, $return_val);
新建test.sh
,内容如下:
#!/bin/bash
outputname=`date +%s`
outputpath=''
result=$(pdftk $1 cat output ${outputpath}${outputname}.pdf 2>&1)
if [ $? -ne 0 ];then
result=$(echo $result | sed -e 's/\n//g')
echo "{\"code\":1,\"errorMsg\":\"${result}\"}"
else
echo "{\"code\":0,\"data\":\"${outputpath}${outputname}.pdf\"}"
fi
赋予test.sh
可执行权限
chmod 755 test.sh
此时可以通过echo tmp11.pdf | xargs sh ./test.sh
来实现pdf的转换。
使用将test.sh转换为web服务
./script-httpd -addr=:4000 xargs sh ./test.sh
转换为web服务后,就可以通过post方式到该服务器的4000端口实现调用该服务。