来自php的exec nodejs脚本

来自php的exec nodejs脚本,php,node.js,Php,Node.js,我对在循环中使用exec的php中使用的nodejs脚本有问题。 问题是,脚本只执行一次,然后只执行一次错误。 以下是php代码: 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;

我对在循环中使用exec的php中使用的nodejs脚本有问题。 问题是,脚本只执行一次,然后只执行一次错误。 以下是php代码:

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);
}

首先,这是一个非常低效的方式来实现你的目标。如果您的节点应用程序正在侦听某个端口,并提供对来自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上未定义的字符串,并且您的PHP程序不会知道出现了问题


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

请提供您的错误消息。
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);
});