我在循环中使用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);
});
答案 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中的错误。