2016-09-15 165 views
2

在我的應用程序中,我想執行一個Node.JS文件從PHP,這反過來又使http request到另一個PHP文件。在PHP中使用exec執行nodejs腳本文件()

總之,這是我正在做的過程。

PHP文件--->電話 - >文件的NodeJS --->處理數據 - >並且使HTTP請求 - > PHP文件

當運行通過終端nodejs文件,它成功地使http請求到另一個PHP文件,我得到我想要的。

但是,當我嘗試通過PHP運行nodejs文件時,nodejs文件無法找到某些模塊。

我在PHP代碼:

$nodeJsPath = '/var/www/html/projectfolder/js/nodefunc.js'; 

$ret = exec("node ".$nodeJsPath.' 2>&1', $out, $err); 

這是我得到的錯誤:

Array 
(
    [0] => module.js:457 
    [1] =>  throw err; 
    [2] => ^
    [3] => 
    [4] => Error: Cannot find module 'some_module' 
    [5] =>  at Function.Module._resolveFilename (module.js:455:15) 
    [6] =>  at Function.Module._load (module.js:403:25) 
    [7] =>  at Module.require (module.js:483:17) 
    [8] =>  at require (internal/module.js:20:19) 
    [9] =>  at Object.<anonymous> (/var/www/html/projectfolder/js/nodefunc.js:5:9) 
    [10] =>  at Module._compile (module.js:556:32) 
    [11] =>  at Object.Module._extensions..js (module.js:565:10) 
    [12] =>  at Module.load (module.js:473:32) 
    [13] =>  at tryModuleLoad (module.js:432:12) 
    [14] =>  at Function.Module._load (module.js:424:3) 
) 
+0

我可以知道爲什麼downvote和什麼是錯這個問題? – Abhinav

+0

當從CLI運行命令時它工作嗎? – krampstudio

+0

是的,它從終端執行時運行正常 – Abhinav

回答

1

我終於明白了。它只是ignorng原因不明:(

Nodejs文件的NODE_PATH可變我哈得給這樣的模塊的絕對路徑:

var request = require("/usr/lib/node_modules/request"); 
2
  1. 檢查是否安裝了模塊(npm install
  2. 運行在exec節點應用程序當前工作目錄:
exec("cd ". dirname($nodeJsPath). " && node nodefunc.js 2>&1", $out, $err); 
+0

hi..it聽起來有點天真,但我不熟悉nodejs,我應該在哪裏準確執行'npm install '因爲我可以在這個路徑中看到已安裝的模塊文件夾'/ usr/lib/node_modules' – Abhinav

+0

我仍然得到相同的錯誤r即使在更改了「exec」命令 – Abhinav

+0

中的目錄之後,您需要將npm install運行到包含您的節點項目的文件夾中(該項目與您的程序包一起使用。json文件) – krampstudio

1

你有更改目錄後,執行節點的命令,你才達到一個命令兩件事情

1.更改目錄cd /var/www/html/projectfolder/js

2.然後執行node nodefunc.js 2>&1

使用& &或;用於在一行中執行多個命令如下所述

$ret = exec("cd /var/www/html/projectfolder/js; node nodefunc.js 2>&1', $out, $err);