[英]Execute a node script in Laravel
我需要在我的 Laravel 應用程序中運行一個節點腳本。
我嘗試使用 Symfony 進程,但它在 PHP 執行后終止了該進程,我需要保持節點進程運行,所以我的下一步是嘗試使用shell_exec
和exec
函數。 它在修補程序和 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.