【发布时间】:2015-07-29 03:05:35
【问题描述】:
我在 PHP 中使用 shell_exec 运行脚本时遇到了问题。 当我登录到服务器并运行脚本时,我得到了正确的输出,但是当我通过网页运行它时,它似乎没有完成命令。
该脚本是使用 openssl 从 .crt 和 .key 文件创建 .pem、.pfx 和 .p12 文件。
Bash 脚本如下:
#!/bin/bash
#Script to create all the SSL certs needed from the .key and .crt files
set -o errexit
echo "Starting script....<br><br>"
echo "openssl pkcs12 -export -in $1.crt -inkey $1.key -out $1.p12 -passout pass:$2"
openssl pkcs12 -export -in $1.crt -inkey $1.key -out $1.p12 -passout pass:$2
echo "P12 Complete.<br><br>"
openssl pkcs12 -in $1.p12 -nodes -out $1.pem -passin pass:$2 -passout pass:$2
echo "PEM Complete.<br><br>"
openssl pkcs12 -inkey $1.pem -in $1.crt -export -out $1.pfx -passout pass:$2
echo "PFX complete.<br><br>"
mkdir $1_certs
mv $1.key $1_certs/$1.key
mv $1.crt $1_certs/$1.crt
mv $1.pem $1_certs/$1.pem
mv $1.p12 $1_certs/$1.p12
mv $1.pfx $1_certs/$1.pfx
echo "Password: " $2 >> $1_certs/password.txt
echo "ZIPing files.<br><br>"
zip $1_certs.zip $1_certs
echo "COMPLETE<br><br>"
PHP 如下:
<?php
if (isset($_GET['cert_name'])) {
$cert_name = $_GET['cert_name'];
$password = $_GET['password'];
echo "/home/<username>/ssl $cert_name $password <br><br>";
$message=shell_exec("/home/<username>/ssl $cert_name $password");
echo $message;
}
?>
两者中大量的回声有助于排除故障。
网页是一个带有 2 个输入和一个提交按钮的基本表格。
当我在网页中运行它时,它会使用 openssl 命令创建 .p12 并失败。
如果我删除set -o errexit 以便它完全运行而不管错误我可以看到它甚至没有尝试创建目录或移动文件,我只是看到所有的回声。就好像它只是运行回声并忽略命令。
我在创建 p12 文件的命令之前有一个回显,它表明它正在获取所有正确的详细信息。
我不知道从这里去哪里。任何帮助,将不胜感激。
【问题讨论】:
-
这听起来像是权限问题。当你从 shell 运行它时,它会像你自己一样运行。当网络服务器运行它时,它以网络服务器的用户身份运行。
标签: php bash shell-exec