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


Я пытаюсь использовать php-phantomjs-фантомный с Laravel 5 под CentOS 7 и Окнами 8.

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

Ошибка при выполнении процедуры 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');
Author: Community, 2015-08-14

4 answers

Что ж, взгляните на видео здесь: 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
Author: Aditya Giri, 2015-09-20 04:45:29

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

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

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

$client->getEngine()->setPath('absolute_path/bin/phantomjs.exe');
 8
Author: Roman Chyrva, 2016-08-09 09:46:03

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

Я добавил следующее в свой файл 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 (после того, как потребуется автозапуск композитора).

Все, что я затем нужно было сделать (потому что я в Великобритании), чтобы удалить статус ответа, если (как я получаю 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
Author: alexrussell, 2015-08-19 15:09:08

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

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

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

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
Author: exussum, 2015-08-22 08:05:16