5

我有一个 exe 文件,其中包含以下代码:

而(1)

printf("你好\n");

我正在使用 shell_exec 通过 php 执行这个 exe

$output = shell_exec('C:/Users/thekosmix/Desktop/hello.exe 2>&1');

回声$输出;

现在脚本执行了很长时间,直到我从任务管理器中终止进程并给出致命错误:

(致命错误:第 7 行 C:\xampp\htdocs\shell\index.php 中允许的内存大小为 134217728 字节已用尽(试图分配 133693440 字节)

我希望脚本(或此函数)在给定的持续时间内运行并打印在该持续时间内生成的任何输出,而不是任何致命错误。set_time_limit() 也没有解决问题。

4

3 回答 3

3

您不能在 PHP 中执行此操作 -set_time_limit()仅在每个 PHP 语句执行后检查。在linux下你会使用ulimit,但看起来你正在使用Windows。

您需要修改hello.exe可执行文件以构建超时,或者编写一个从 PHP 调用的包装器,该包装器调用hello.exe并处理超时。在任何可以轻松分叉的语言中,这都是微不足道的。

于 2012-04-24T05:54:49.057 回答
1

总结一下:如果您使用 Linux 服务器,请执行以下操作:

shell_exec('ulimit -t 120 && ' . $path_to_program);

这会在两分钟的 cpu 使用后终止,这比实时的 2 分钟多得多,具体取决于程序的资源需求。

于 2019-06-26T17:38:58.537 回答
0

您可以这样更改脚本

while (shouldKeepRunning())

shouldKeepRunning 可以以最原始的形式检查某个文件是否存在以确定它是否应该继续运行。然后,您只需创建或删除一个文件即可正常关​​闭脚本。在 linux 上,您可以为此使用信号处理程序,但不能使用 windows。无论如何,你明白了。

如果没有大量代码修改,外部 while 循环不够精细,则可以使用刻度。http://php.net/manual/en/control-structures.declare.php

于 2012-04-24T06:01:40.657 回答