PHP shell_exec 似乎只有 运行 命令的一半
PHP shell_exec seems to be only running half the command
我正在为我的服务器编写控制面板,我正在使用 shell_exec 到 运行 一个使用 letsencrypt api 创建证书的命令。
我从 https://zerossl.com/usage.html 得到了 shell 命令。 (我按照他们的指示设置了所有内容,当直接在 shell 中手动执行时,它会正确地 运行。N.B。它根本不需要用户输入)
这是 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/ 文件夹以防止脚本在那里跳闸.
我首先通过 运行ning 在脚本中创建必要的键:
shell_exec("openssl genrsa -out '$uname'.key 4096");
和
shell_exec("openssl genrsa -out '$domain'.key 4096");
我在开头提到的 shell_exec 使用这些密钥和变量,旨在创建一个 $domain.csr 文件(确实如此)和一个证书文件。
但是,它只设法创建 .csr 文件(即使所有需要的文件都在同一个文件夹中)并且在创建证书之前以某种方式停止执行或无形地出错。然后,当我在与 .csr 等相同的文件夹中手动 运行 命令时,一切都 运行 完全没问题。
而且我似乎无法弄清楚出了什么问题,也无法将输出转储到页面上以查看任何错误。
按照@JonathanKuhn 的建议,我删除了变量周围 shell_exec 内的引号,它起作用了。发布此答案,以便其他访问这里的人可以看到它
我正在为我的服务器编写控制面板,我正在使用 shell_exec 到 运行 一个使用 letsencrypt api 创建证书的命令。
我从 https://zerossl.com/usage.html 得到了 shell 命令。 (我按照他们的指示设置了所有内容,当直接在 shell 中手动执行时,它会正确地 运行。N.B。它根本不需要用户输入)
这是 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/ 文件夹以防止脚本在那里跳闸.
我首先通过 运行ning 在脚本中创建必要的键:
shell_exec("openssl genrsa -out '$uname'.key 4096");
和
shell_exec("openssl genrsa -out '$domain'.key 4096");
我在开头提到的 shell_exec 使用这些密钥和变量,旨在创建一个 $domain.csr 文件(确实如此)和一个证书文件。
但是,它只设法创建 .csr 文件(即使所有需要的文件都在同一个文件夹中)并且在创建证书之前以某种方式停止执行或无形地出错。然后,当我在与 .csr 等相同的文件夹中手动 运行 命令时,一切都 运行 完全没问题。
而且我似乎无法弄清楚出了什么问题,也无法将输出转储到页面上以查看任何错误。
按照@JonathanKuhn 的建议,我删除了变量周围 shell_exec 内的引号,它起作用了。发布此答案,以便其他访问这里的人可以看到它