2017-03-17 67 views
-2

我在使用exec()循环中使用php的nodejs脚本时遇到了问题。 问题是,脚本只执行一次,然后只是错误。 这里是PHP代码:来自php的exec nodejs脚本

for ($i=0; $i <= ((mysqli_num_rows($repp)/50)-1); $i++) 
{ 

    $req = "select * from items limit ".$id.",50"; 
    $rep = mysqli_query($link,$req); 
    $names = ""; 
    $id = $id + 50; 

    while($donne = mysqli_fetch_array($rep)) 
    { 
      $names = $names.$donne["item_name"].','; 
    } 
    $resultat = '"'.rtrim($names, ",").'"'; 
    exec("node node_opskins.js ".$resultat,$out); 
    $result =implode($out); 
    $a = str_replace("'", '"', $result); 
    $a = preg_replace('/([\w\d]+): /', '"$1": ', $a); 
    foreach (json_decode($a,true) as $key => $value) 
    { 
    echo $key . " : " . $value['market_price'] . "<br/>"; 
    $req = "update items set opskins_suggested = '".($value['market_price']/100)."' where item_name = '".addslashes($key)."'"; 
     mysqli_query($link,$req); 
} 
sleep(10); 
} 

这里是脚本的NodeJS:

所有的
var OPSkinsAPI = require('@opskins/api'); 
var opskins = new OPSkinsAPI(my opskins api key); 
var item = process.argv[2].split(","); 
opskins.getSuggestedPrices(730, item, function(err,price){ 


    console.log(price); 

}); 
+0

请提供您的错误信息。 – Corentin

回答

0

首先,这是为了实现自己的目标非常低效的方式。如果您的Node应用程序正在侦听某个端口并从您的PHP应用程序为请求(HTTP或某些本地IPC)提供了答案,那将会非常有效。话虽如此,如果你仍然想运行你的应用程序的节点作为你现在要做的,你应该在节点处理错误:

var OPSkinsAPI = require('@opskins/api'); 
var opskins = new OPSkinsAPI(my opskins api key); 
var item = process.argv[2].split(","); 
opskins.getSuggestedPrices(730, item, function(err,price){ 
    // handle errors: 
    if (err) { 
     console.error('Error:', err); 
     process.exit(1); 
    } 
    console.log(price); 
}); 

这样,你就能知道发生了什么。否则你的程序只会在stdout上返回字符串"undefined",你的PHP程序不会知道出了什么问题。

您还需要处理PHP中的错误。