来自php的exec nodejs脚本

时间:2017-03-17 11:02:50

标签: 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;

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

});

1 个答案:

答案 0 :(得分:0)

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

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中的错误。