Моя проблема довольно тихая, я начинаю с nodejs / nightmarejs, и мне нужно вызвать этот сценарий js в моем сценарии php, чтобы получить ответ от него.
Я использую Wamp и мои скрипты находятся в одной папке:
C:\wamp64\www\nightmare\index.php
C:\wamp64\www\nightmare\index.js
index.js:
var Nightmare = require('nightmare');
var nightmare = Nightmare({ show: true })
nightmare
.goto('http://yahoo.com')
.type('form[action*="/search"] [name=p]', 'nightmare github')
.click('form[action*="/search"] [type=submit]')
.wait('#main')
.evaluate(function () {
return document.querySelector('#main .searchCenterMiddle li a').href
})
.end()
.then(function (result) {
console.log(result)
})
.catch(function (error) {
console.error('Search failed:', error);
});
index.php:
<?php
exec("index.js", $jsOutput);
var_dump($jsOutput);
?>
Я видел в некоторых других сообщениях, что если я использую exec()
я должен дать всю командную строку для его правильной работы, что-то вроде:
exec("node index.js", $jsOutput);
Я понял, что должен был дать весь путь к nodejs, может быть? Но я не нашел способа извлечь путь к nodejs из моей текущей папки.
Если у кого-нибудь есть свет, это будет оценено.
большое спасибо
Для поиска файла в Windows вы можете использовать где команда:
<?php
exec('where node', $nodePath);
if ($nodePath && $nodePath[0]) {
exec('"' . $nodePath[0] . '" index.js', $jsOutput);
var_dump($jsOutput);
}
else {
echo 'node not found.';
}
Под Linux вы можете разместить, который или же находить команды.
Ну, я думаю, это распространенная ошибка.
Я забыл перезагрузить мой компьютер после того, как я установил node.js, и это необходимо сделать, чтобы применить изменения, внесенные в переменную среды Windows, чтобы вы могли вызывать узел в командной строке …