通过script-httpd将系统命令转换为网络服务

使用场景

有时php需要调用一些系统命令,但要调用系统命令,必须要使用execsystemshell_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端口实现调用该服务。

使用postman测试

发表评论

邮箱地址不会被公开。 必填项已用*标注