PHP shell_exec似乎只运行了一半的命令

PHP shell_exec似乎只运行了一半的命令,php,shell,ssl-certificate,shell-exec,lets-encrypt,Php,Shell,Ssl Certificate,Shell Exec,Lets Encrypt,我正在为我的服务器编写一个控制面板,我正在使用shell_exec运行一个命令,该命令使用letsencrypt api创建证书 我从你那里得到了shell命令。(我按照他们的指令设置了所有内容,当直接在shell中手动执行时,它确实可以正确运行。注意,它根本不需要用户输入) 这是shell_exec行 shell_exec("le.pl --key '$uname'.key --csr '$domain'.csr --csr-key '$domain'.key --crt '$domain'.

我正在为我的服务器编写一个控制面板,我正在使用shell_exec运行一个命令,该命令使用letsencrypt api创建证书

我从你那里得到了shell命令。(我按照他们的指令设置了所有内容,当直接在shell中手动执行时,它确实可以正确运行。注意,它根本不需要用户输入)

这是shell_exec行

shell_exec("le.pl --key '$uname'.key --csr '$domain'.csr --csr-key '$domain'.key --crt '$domain'.crt --domains \"www.'$domain','$domain'\" --path /home/'$uname'/web/'$domain'/public_html/.well-known/acme-challenge --generate-missing --unlink --live");
变量$uname和$domain是从数据库中抓取的,可以成功地回显。在本例中,它们分别是admin和plenixdev.tk

当前工作目录(由chdir()设置)是/tmp/$uname,我已经确保实际创建了/webroot/.well-known/acme challenge/文件夹,以防止脚本在那里出错

我首先通过运行以下命令在脚本中创建必要的键:

shell_exec("openssl genrsa -out '$uname'.key 4096");

我在开始时提到的shell_exec接受这些键和变量,并打算创建一个$domain.csr文件(确实如此)和一个证书文件

但是,它只能创建.csr文件(即使所有需要的文件都在同一个文件夹中),并在创建证书之前以某种方式停止执行或不可见地出错。然后,当我在与.csr等相同的文件夹中手动运行该命令时,它运行得非常好


我似乎无法找出哪里出了问题,也无法将输出转储到页面上以查看任何错误。

按照@JonathanKuhn的建议,我删除了shell_exec中有关变量的引号,结果成功了。发布此答案以便其他人可以看到它

为什么在所有php变量周围都有引号?这不在原始命令中。尝试将命令回显到屏幕上,并查看其外观是否正确。您将看到命令将(也不应该)看起来像
--key'test.com.key…
@JonathanKuhn谢谢。真的没有这么小的事情会导致它。
shell_exec("openssl genrsa -out '$domain'.key 4096");