Я пытаюсь использовать PHP PhantomJS для загрузки страницы, но я получаю сообщение об ошибке
Fatal error: Uncaught JonnyW\PhantomJs\Exception\ProcedureFailedException: Error when executing PhantomJs procedure - File does not exist or is not executable: bin/phantomjs in /Volumes/WWW ROOT/namechase/www/vendor/jonnyw/php-phantomjs/src/JonnyW/PhantomJs/Procedure/Procedure.php:138
Stack trace:
#0 /Volumes/WWW ROOT/namechase/www/vendor/jonnyw/php-phantomjs/src/JonnyW/PhantomJs/Client.php(162): JonnyW\PhantomJs\Procedure\Procedure->run(Object(JonnyW\PhantomJs\Http\Request), Object(JonnyW\PhantomJs\Http\Response))
#1 /Volumes/WWW ROOT/namechase/www/crawling.php(30): JonnyW\PhantomJs\Client->send(Object(JonnyW\PhantomJs\Http\Request), Object(JonnyW\PhantomJs\Http\Response))
#2 {main}
thrown in /Volumes/WWW ROOT/namechase/www/vendor/jonnyw/php-phantomjs/src/JonnyW/PhantomJs/Procedure/Procedure.php on line 138
Это происходит только на одном из моих тестовых доменов, а не на другом.
Код, который я запускаю на обоих доменах, идентичен, но не работает на одном из двух тестовых стендов. Оба работают на одной машине, просто используя разные виртуальные хосты, но только один возвращает ошибку.
require $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php';
echo '<pre>';
use JonnyW\PhantomJs\Client;
$client = Client::getInstance();
$delay = 5; // 5 seconds
$request = $client->getMessageFactory()->createRequest('https://google.com', 'GET');
$request->setDelay($delay);
/**
* @see JonnyW\PhantomJs\Http\Response
**/
$response = $client->getMessageFactory()->createResponse();
// Send the request
$client->send($request, $response);
if($response->getStatus() === 200) {
// Dump the requested page content
echo $response->getContent();
}
Я пытался установить путь к phantomjs
в composer.json
использование файла
"config": {
"bin-dir": "/usr/local/bin"}
но это, кажется, не имеет никакого значения
Когда вы запускаете Composer для установки ваших пакетов, скрипт PhantomJS-Installer загрузит PhantomJS и установит его в /bin
папка проекта.
Он никогда не приземлится в /usr/local/bin
, кроме случаев, когда вы вручную устанавливаете или перемещаете его туда.
Вы получите следующее сообщение об ошибке: File does not exist or is not executable:
,
bin/phantomjs
Во-первых, я бы проверил, правильно ли загружен файл и установлен в bin
папка. (Если файл не установлен в папку bin вашего проекта, сценарий установщика должен выдать ошибку при запуске Composer.)
Во-вторых, я бы проверил права доступа к файлам. Обычно установщик позаботится об этом, но просто посмотрите, если флаг исполняемого файла +x
установлено.
Других решений пока нет …