微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从 PHP 脚本中同步生成另一个 PHP 脚本?

如何解决如何从 PHP 脚本中同步生成另一个 PHP 脚本?

我有一个目前用 Bash 编写的终端应用程序,大约 20,000 SLOC。我喜欢它的设置方式的一件事是它非常模块化。不同的组件分布在不同的文件中,可以在运行时执行。这意味着系统的某些部分可以在运行时进行“热插拔”或更新,而无需终止主程序并重新执行它。

缺点是有很多数据库 I/O,这使得它超级 janky,因为 Bash 真的不适合这个。目前,它与产生 PHP 的 HTTP API 接口。

我想用 PHP (CLI) 原生重写它以去掉中间人层,这样应用程序可以直接与数据库通信,从而使维护更容易。我一直在思考的一个问题是如何用 Bash 复制相同的模块化。使用 Bash,如果我调用脚本 A,然后对脚本 B 进行更改,然后从脚本 A 输入脚本 B(假设它位于某个条件块中,而不是在文件的顶部),则会选择更改无需重新执行脚本 A,因为脚本 B 在执行之前不会被解释。

我正在努力弄清楚如何使用 PHP 实现这一目标。例如,这将行不通

include('script.PHP');

原因是包含都是在解释脚本时执行的,而不是在运行时执行时。

A similar question has been asked already,但它没有专门解决这方面的问题,只是一般来说如何启动另一个脚本。当应用程序决定应该执行时,我希望基本上能够在运行时重新生成脚本。 shell_execpassthru 似乎是 PHP 中内置的所有类似的东西,但我不确定这是否正确,因为它只是生成一个系统 shell 并在那里执行它,所以它不像与 Bash 一样“直接”。

在 Bash 中,PHP 中的 proper 等价物是什么:

if [ "$x" = "3" ]
then
   ./launchscriptNow.sh
fi

用户现在应该正在执行 launchscriptNow.sh。请记住,这是一个交互式应用程序,因此它不仅仅是做某事并返回值。用户可能在此处停留 2 秒、5 分钟或一个小时。

所以 ./launchscriptNow.sh 仅在 代码到达该行时才被解释,而不是在父脚本本身被解释时?这种东西是纯粹的shell构造还是有类似的东西?

解决方法

反对所有的建议:

$script = file_get_contents('module_b.php');
$script = str_replace('<' . '?php','',$script);
$script = str_replace('?' . '>',$script);
eval($script);
,

我不明白您对“何时解释脚本”与“何时执行脚本”的担忧?我有许多脚本使用变量名作为要包含的脚本,并在执行 include 语句之前做出决定。 $result = include($script_name) 可以正常工作,并且可以在运行时决定包含哪个脚本。

您描述问题的方式似乎并不表示您要“启动”另一个进程,但我可能是错的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。