【问题标题】:Execute a node script in Laravel在 Laravel 中执行节点脚本
【发布时间】:2021-12-07 12:20:45
【问题描述】:

我需要在我的 Laravel 应用程序中运行一个节点脚本。

我尝试使用 Symfony 进程,但它会在 PHP 执行后终止该进程,我需要保持节点进程运行,所以我的下一步是尝试使用 shell_execexec 函数。它在修补程序和 Tinkerwell 中运行良好,但是当我尝试在 Laravel 类中使用时,它会出现以下错误 500:

production.ERROR: Call to undefined function shell_exec() {"exception":"[object] (Error(code: 0): Call to undefined function shell_exec() at ...

由于它是一个 VPS,我将我的 php.ini 设置为 disable_functions=,但它仍然无法在 Laravel 中运行,只有在我在框架之外使用它时才可以。

在此先感谢,并为我的英语不好感到抱歉。

【问题讨论】:

    标签: php laravel shell-exec


    【解决方案1】:

    很遗憾,exec()system()shell_exec())无法做到这一点。

    但如果您安装 pcntl extension,请定义如下内容:

    <?php
    
    function detached_exec($cmd) {
        $pid = pcntl_fork();
        if ($pid == 0) {
            // Childe process main-loop goes here.
            posix_setsid();
            exec($cmd);
            exit(0);
        } else if ($pid == -1) {
            // Process fork failed.
            return FALSE;
        }
        return $pid;
    }
    

    并像这样使用:

    // Edit this:
    $cmd = 'node --version';
    
    $pid = detached_exec($cmd);
    if($pid === FALSE) {
        echo 'exec failed';
    }
    

    【讨论】:

      【解决方案2】:

      我最终放弃了。我开发了一种解决方法。

      我没有通过 PHP 调用节点文件,而是制作了一个节点脚本,它表示接收 POST 请求并启动代码。

      现在我可以将我的节点代码放在另一台服务器上,它可以毫无问题地继续运行,并使我的系统具有可扩展性。

      【讨论】:

        猜你喜欢
        • 2019-03-24
        • 1970-01-01
        • 1970-01-01
        • 2022-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-18
        • 2018-07-25
        相关资源
        最近更新 更多