簡體   English   中英

在 Laravel 中執行一個節點腳本

[英]Execute a node script in Laravel

我需要在我的 Laravel 應用程序中運行一個節點腳本。

我嘗試使用 Symfony 進程,但它在 PHP 執行后終止了該進程,我需要保持節點進程運行,所以我的下一步是嘗試使用shell_execexec函數。 它在修補程序和 Tinkerwell 中運行良好,但是當我嘗試在 Laravel class 內部使用時,它會給出以下錯誤 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 內工作,只有當我在框架之外使用它時。

在此先感謝並為我的英語不好感到抱歉。

不幸的是,這不能用exec() (也不能system()shell_exec() )來完成。

但是,如果您安裝pcntl 擴展,請定義如下內容:

<?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';
}

我最終放棄了。 我開發了一種解決方法。

代替通過 PHP 調用節點文件,我制作了一個節點腳本,它表示接收 POST 請求並啟動代碼。

現在我可以將我的節點代碼放在另一台服務器上,它可以毫無問題地繼續運行,並使我的系統具有可擴展性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM