2016-03-04 2 views
1

Это простой код PHPне может получить ответ от PASSTHRU

<?php 
ob_start(passthru('/usr/bin/env node getResult.js ')); 
$data = ob_get_contents(); 
ob_end_clean(); 
// console shows Data as String but $data is still empty 
    echo "Data : " . $data; 
?> 

И node.js сценарий просто имеет переменный результат с объектом в нем.

console.log("skript startet"); 
var get = function(){ 
/*do stuff to get variable*/ 
     result = "test; 
     console.log(result); 
     return result; 
     }); 
    }); 
}; 
get(); 

Проблема: мне нужно переменную в скрипте getResult.js но я не могу»поймать его в PHP. Есть идеи ?

ответ

0

Это то, что вам нужно?

<?php 
ob_start(); //note, no parameter here 
passthru('/usr/bin/env node getResult.js '); // this should be captured 
$data = ob_get_contents(); 
ob_end_clean(); 

echo "Data : " . $data; 
?> 
+0

$ data все еще пуст, но скрипт выполняется. – nova

+0

Вы имеете в виду, что выполняется сценарий getResult.js? Каков результат этого js-скрипта? И каков выход php-скрипта? –

+0

php script - все, что вы видите здесь, скрипт узла делает вызов mongodb, получает некоторые данные, я написал его в var, и теперь мне нужно содержание этой войны в моем php-коде. – nova

1

Зачем беспокоиться о выходном буфере?

exec('/usr/bin/env node getResult.js', $data); 
echo "Data: " . $data; 

exec() записывает полный вывод команды в предоставленную переменную.

+0

Если я использую это, мои скрипты больше не запускаются:/ – nova

+0

Просто сначала отложите эхо, а затем passthru (без буферизации) также будет работать –

+0

@ChrisLear Это не помещает результат в переменную, которая фактическая цель. Эхо скорее всего является лишь тестом. –