Php-phantomjs с Laravel (файл не существует или не является исполняемым: bin / phantomjs)

Я пытаюсь использовать PHP-phantomjs с Laravel 5 под CentOS 7 а также Windows 8.

Я следовал инструкциям на Установка PHP Phantom (установка выполнена успешно), после этого я получил эту ошибку при попытке выполнить Основное использование код:

Ошибка при выполнении процедуры PhantomJs «по умолчанию» — файл не существует или не является исполняемым: bin / phantomjs (представление: PATH_TO_PROJECT \ resources \ views \ welcome.blade.php)


Основной код использования

use JonnyW\PhantomJs\Client;

$client = Client::getInstance();

/**
* @see JonnyW\PhantomJs\Message\Request
**/
$request = $client->getMessageFactory()->createRequest('http://google.com', 'GET');

/**
* @see JonnyW\PhantomJs\Message\Response
**/
$response = $client->getMessageFactory()->createResponse();

// Send the request
$client->send($request, $response);

if($response->getStatus() === 200) {

// Dump the requested page content
echo $response->getContent();
}

Я много гуглил, находил и пробовал несколько решений, но безуспешно. Здесь, на Stackoverflow, я нашел один вопрос Кто-нибудь успешно использовал «php phantomjs» Джонни с Laravel, в среде Ubuntu?. В последнем комментарии я вижу, что парень решил проблему с:

$client->setBinDir('absolute_path/bin');
$client->setPhantomJs('phantomjs.exe');

Я также сделал это, и он возвращает еще одну ошибку:

Файл не существует или не является исполняемым: phantomjs.exe (представление: PATH_TO_PROJECT \ resources \ views \ welcome.blade.php)

Но когда я пытаюсь:

echo file_exists('absolute_path/bin/phantomjs.exe');

Возвращает 1, что означает, что PHP может найти файл с absolute_path,


Я не знаю, что я делаю не так. Кто-нибудь уже успешно использовал php phantomjs с laravel, кто может мне помочь?

НОТА : Код, включенный в вопрос, является кодом версии Windows, но я получаю ту же ошибку в обеих ОС.


ОБНОВЛЕНИЕ 1

После изменения absolute_path в relative path кажется, он знает phantomjs.exe сейчас, но стали поднимать ту же ошибку с phantomloader:

Файл не существует или не является исполняемым: ../bin/phantomloader (представление: PATH_TO_PROJECT \ resources \ views \ welcome.blade.php)

Пробовал это решение, но та же ошибка:

$client->setPhantomLoader('../bin/phantomloader');

12

Решение

Ну, посмотрите видео здесь:
https://www.youtube.com/watch?v=unLTKz9Jqyw

Этот парень объясняет все, что вам может понадобиться. Надеюсь, это поможет.

РЕДАКТИРОВАТЬ:

Попробуйте поставить этот код …

<?php
//test.php

$phantom_loc = "C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\projects\web-optimization\phantomjs4\src\bin\phantomjs.exe";

$dir = "C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\projects\web-optimization\phantomjs4\src\bin\\";

//Is dir executable
$dir_is_Writeable = @file_exists($dir . ".");

if ($dir_is_Writeable === true) {
echo "$dir is writable";
} else {
echo "$dir is not writable";
}

echo "<br><br>";
//is executable
if(is_executable($phantom_loc)) {
echo ("$phantom_loc is executable");
} else {
echo ("$phantom_loc is not executable");
}

echo "<br><br>";

//Jonnyw
require 'vendor/autoload.php';

use JonnyW\PhantomJs\Client;

$client = Client::getInstance();
$client->setBinDir('C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\projects\web-optimization\phantomjs4\src\bin\\');
$client->setPhantomJs('phantomjs.exe');

var_dump($client->getCommand());
10

Другие решения

Может быть, для кого-то это будет полезно. В новой версии Php-phantomjs (4. *) нет методов:

$client->setBinDir('absolute_path/bin');
$client->setPhantomJs('phantomjs.exe');

Так что вместо этого вы можете использовать это:

$client->getEngine()->setPath('absolute_path/bin/phantomjs.exe');
9

Я только что установил это на очень быстрый тестовый проект, и он работал нормально только с одним небольшим изменением.

Я добавил следующее к моему composer.json файл в соответствии с инструкциями:

"require": {
"jonnyw/php-phantomjs": "~3.0"},
"config": {
"bin-dir": "bin"},
"scripts": {
"post-install-cmd": [
"PhantomInstaller\\Installer::installPhantomJS"],
"post-update-cmd": [
"PhantomInstaller\\Installer::installPhantomJS"]
}

затем composer install установит библиотеку, а затем установит phantomjs.

Затем я скопировал и вставил верхний пример из http://jonnnnyw.github.io/php-phantomjs/usage.html#basic-request в index.php (после запроса автозагрузчика Composer).

Все, что я тогда должен был сделать (потому что я в Великобритании), это удалить статус ответа, если (как я получу 301), чтобы показать главную страницу Google.

Теперь это было на Mac, но я не могу представить, что на Centos все по-другому.

Затем, положив мой index.php файл внутри подкаталога public, как и в случае установки Laravel, все, что мне нужно было сделать, это добавить следующую строку после Client::getInstance():

$client->setBinDir('../bin');

Тогда это снова сработало.

Очевидно, что это не полная установка Laravel, но она хорошо имитирует среду. Одна вещь, которую я заметил, это то, что изменение bin-dir в composer.json не всегда полностью обновляет файлы, которые помещаются в bin, Таким образом, я должен был rm -rf bin vendor а потом composer update еще раз, чтобы убедиться, что у меня была свежая установка composer и его пакетов.

3

Состояние ошибки

Файл не существует или не является исполняемым:

Вы показали, что файл существует. Теперь сделайте это исполняемым

chmod +x /path/to/bin/phantomloader

И попробуй еще раз

Если это работает, вам нужно заблокировать некоторые разрешения

Какой пользователь запускает php? Когда вы узнаете, использование

chmod -x /path/to/bin/phantomloader
chown phpuser  /path/to/bin/phantomloader
chmod u+x  /path/to/bin/phantomloader

Проверьте еще раз, и он все еще должен работать

3
По вопросам рекламы [email protected]