shell_exec() 的可能问题与仅使用它无关。可怕的风险是让您的用户指定输入到它的字符串 - 该字符串可能偶尔会包含各种奇怪的尝试来“欺骗”您的系统并入侵它。但你不需要这样做。只要您在自己的代码中构造输入的字符串,就应该没有问题。
该字符串应该与您在 Linux shell 提示符下键入的内容完全相同。根据脚本所需的详细信息,启动脚本的字符串可能只是“/usr/local/bin/makesite.sh”之类的东西。或者它也可能包含一些参数,例如“/usr/local/bin/makesite.sh --ownername clientsname”。如果有参数,请在您编写的代码中自行替换它们,而不是要求用户为您替换它们 - 这样安全风险最小。
makesite.sh 中“echo $urlnya”的结果{以及 shell_exec() 命令的所有其他输出} 将由 shell_exec() 作为文本块交给你,你可以随心所欲地做任何事情。您的代码可以解析它,在您自己的网页中使用它的一部分,在内部跟踪它的一部分,提取某种唯一 ID,等等。例如,您可能希望在您正在制作的网页上放置一个指向该 URL 的超链接,该超链接位于标有 {See Created Web Page} 之类的按钮后面。
对于进度条,获取提供该功能的小部件或库(但请参见后面的几段:-)。实现它的方法有点奇怪,而且跨浏览器问题可能很大,所以进度条是利用其他人的封装和功能测试是一个非常好的主意的事情之一。我相信 Yahoo! 提供了一个库,并且我相信 JQuery 包含该功能。
本地浏览器/客户端将一遍又一遍地操纵进度条,但它会选择几秒钟,然后与服务器“重新同步”,以便显示准确的信息。例如,有时会看到移动的条纹;这种运动可能纯粹是局部的,纯粹是一种“猜测”。但是由于页面将在几秒钟内与服务器“重新同步”以重新调整其长度(或者如果出现问题甚至完全停止条纹),这就足够了。
显示进度条只是问题的一部分。问题的更大部分是要显示什么。系统上的某些东西需要能够说“我完成了 55%”之类的事情。但是我不知道 makesite.sh 是如何(或什至)做到这一点的。我不知道 Linux 内置的任何功能可以帮助生成此类信息。您可能需要自己多次运行该命令以查看需要多长时间以及里程碑是什么,然后创建自己的跟踪程序来自己检查这些里程碑。这可能比它的价值更麻烦。您可能希望创建一些更简单的东西,例如只是一些近乎脑死的文本,如“粗略估计设置完成时间再过 2 分钟”或“设置失败,请重试”。