1. 程式人生 > >php執行js檔案

php執行js檔案

    /**
     * 執行js 僅在node環境下
     * 引數 jsFile  js檔名
     * 引數 v       要傳遞的引數
     * 引數 path    js目錄
     * by:LingMax
     */
    function js_node($jsFile,$v,$path = './JsDecrypt/')
    {
        $cmd = 'node "' . realpath($path.'node_api.js');
        $cmd .= '" "' . realpath($path.$jsFile).'" "'.$v.'"';
        //echo $cmd.'<br>';
        return exec($cmd);

    }
    /**
     * 執行js 僅在win平臺下
     * 引數 jsFile  js檔名
     * 引數 exec    要傳遞的引數
     * 引數 path    js目錄
     * by:LingMax
     * 注意:需要開啟該擴充套件外掛 extension=php_com_dotnet.dll
     */
    function js_run($jsFile,$v,$path = './JsDecrypt/')
    {
        $oScript = new \COM("MSScriptControl.ScriptControl");#建立com元件
        $oScript->Language = "JavaScript";#設定指令碼型別
        $oScript->AllowUI = false;#不顯示提示框
        $code = file_get_contents($path.$jsFile);
        
        #編碼自動轉換
        $bm = 'GB2312';
        $encode=mb_detect_encoding($code,array("ASCII","UTF-8","GB2312","GBK","BIG5"));
        if ($encode != $bm and $encode !="GB2312"){
            $code=mb_convert_encoding($code,$bm,$encode);
        }

        $oScript->AddCode($code);#新增js程式碼 只支援gbk格式文字
        return $oScript->Run("eval", 'tmd("'.$v.'")');#執行程式碼
    }

node_api.js 檔案內容如下

//console.log(process.argv);
require(process.argv[2]);//C://xx.js 絕對路徑
console.log(tmd(process.argv[3]));

qrl_fanzhoutech_com.js 檔案內容如下


function tmd(pwd) {
    var a = 'aaa';
    return pwd + a;
}

//相容node環境
if(typeof(global) != 'undefined'){
    global.tmd = tmd;
}

node "C:\EXE\JsDecrypt\node_api.js" "C:\EXE\JsDecrypt\qrl_fanzhoutech_com.js" "222222"