Php-phantomjs with Laravel(文件不存在或不可执行:bin/phantomjs)
Php-phantomjs with Laravel (File does not exist or is not executable: bin/phantomjs)
我正在尝试将 php-phantomjs 与 Laravel 5 一起使用 CentOS 7和 Windows 8.
我按照 PHP Phantom installation 的说明进行操作(安装成功),之后我在尝试执行 基本用法时收到此错误代码:
执行 PhantomJs 程序时出错 "default" - 文件不存在或不可执行: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();
}
我在谷歌上搜索了很多,找到并尝试了几种解决方案,但都没有成功。在 Whosebug 上,我发现了一个问题 。我可以在最后一条评论中看到这个人解决了这个问题:
$client->setBinDir('absolute_path/bin');
$client->setPhantomJs('phantomjs.exe');
我也试过了,这是 return 另一个错误:
文件不存在或不可执行:phantomjs.exe(查看:PATH_TO_PROJECT\resources\views\welcome.blade.php)
但是当我尝试时:
echo file_exists('absolute_path/bin/phantomjs.exe');
它returns 1 表示PHP可以找到absolute_path
.
的文件
我不知道我做错了什么。任何人都已经成功地使用了“php phantomjs” laravel 谁能帮助我?
注意: 有问题的代码是 windows 版本代码,但我在 OS.[=25 中收到相同的错误=]
更新 1
将 absolute_path
更改为 relative path
后,它似乎现在知道 phantomjs.exe
,但是 steel 会引发与 phantomloader
相同的错误:
文件不存在或不可执行:../bin/phantomloader(查看:PATH_TO_PROJECT\resources\views\welcome.blade.php)
试过这个解决方案,但同样的错误:
$client->setPhantomLoader('../bin/phantomloader');
好吧,看看这里的视频:
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());
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
中(在需要 Composer 的自动加载器之后)。
然后我必须做的(因为我在英国)如果(因为我收到 301)要显示 Google 主页,则删除响应状态。
现在这是在 Mac 上,但我无法想象它在 Centos 上有什么不同。
然后,将我的 index.php
文件放入子目录 public
中,就像在 Laravel 安装中一样,我所要做的就是在 [= 之后添加以下行17=]:
$client->setBinDir('../bin');
然后又成功了。
显然这不是完整的 Laravel 安装,但它确实模拟了环境。我确实注意到的一件事是,更改 composer.json
中的 bin-dir
并不总是完全更新放入 bin
中的文件。因此,我不得不 rm -rf bin vendor
然后 composer update
再次确保我有一个全新安装的作曲家和它的包。
错误状态
文件不存在或不可执行:
您已显示该文件存在。现在让它可执行
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
再次检查,它应该仍然有效
也许对某些人会有帮助。新版Php-phantomjs(4.*)没有方法:
$client->setBinDir('absolute_path/bin');
$client->setPhantomJs('phantomjs.exe');
因此,您可以使用:
$client->getEngine()->setPath('absolute_path/bin/phantomjs.exe');
我正在尝试将 php-phantomjs 与 Laravel 5 一起使用 CentOS 7和 Windows 8.
我按照 PHP Phantom installation 的说明进行操作(安装成功),之后我在尝试执行 基本用法时收到此错误代码:
执行 PhantomJs 程序时出错 "default" - 文件不存在或不可执行: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();
}
我在谷歌上搜索了很多,找到并尝试了几种解决方案,但都没有成功。在 Whosebug 上,我发现了一个问题
$client->setBinDir('absolute_path/bin');
$client->setPhantomJs('phantomjs.exe');
我也试过了,这是 return 另一个错误:
文件不存在或不可执行:phantomjs.exe(查看:PATH_TO_PROJECT\resources\views\welcome.blade.php)
但是当我尝试时:
echo file_exists('absolute_path/bin/phantomjs.exe');
它returns 1 表示PHP可以找到absolute_path
.
我不知道我做错了什么。任何人都已经成功地使用了“php phantomjs” laravel 谁能帮助我?
注意: 有问题的代码是 windows 版本代码,但我在 OS.[=25 中收到相同的错误=]
更新 1
将 absolute_path
更改为 relative path
后,它似乎现在知道 phantomjs.exe
,但是 steel 会引发与 phantomloader
相同的错误:
文件不存在或不可执行:../bin/phantomloader(查看:PATH_TO_PROJECT\resources\views\welcome.blade.php)
试过这个解决方案,但同样的错误:
$client->setPhantomLoader('../bin/phantomloader');
好吧,看看这里的视频: 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());
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
中(在需要 Composer 的自动加载器之后)。
然后我必须做的(因为我在英国)如果(因为我收到 301)要显示 Google 主页,则删除响应状态。
现在这是在 Mac 上,但我无法想象它在 Centos 上有什么不同。
然后,将我的 index.php
文件放入子目录 public
中,就像在 Laravel 安装中一样,我所要做的就是在 [= 之后添加以下行17=]:
$client->setBinDir('../bin');
然后又成功了。
显然这不是完整的 Laravel 安装,但它确实模拟了环境。我确实注意到的一件事是,更改 composer.json
中的 bin-dir
并不总是完全更新放入 bin
中的文件。因此,我不得不 rm -rf bin vendor
然后 composer update
再次确保我有一个全新安装的作曲家和它的包。
错误状态
文件不存在或不可执行:
您已显示该文件存在。现在让它可执行
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
再次检查,它应该仍然有效
也许对某些人会有帮助。新版Php-phantomjs(4.*)没有方法:
$client->setBinDir('absolute_path/bin');
$client->setPhantomJs('phantomjs.exe');
因此,您可以使用:
$client->getEngine()->setPath('absolute_path/bin/phantomjs.exe');