Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有Laravel的Php phantomjs(文件不存在或不可执行:bin/phantomjs)_Php_Laravel_Centos_Laravel 5.1_Php Phantomjs - Fatal编程技术网

带有Laravel的Php phantomjs(文件不存在或不可执行:bin/phantomjs)

带有Laravel的Php phantomjs(文件不存在或不可执行:bin/phantomjs),php,laravel,centos,laravel-5.1,php-phantomjs,Php,Laravel,Centos,Laravel 5.1,Php Phantomjs,我正在尝试在CentOS 7和Windows 8下使用Laravel 5 我按照上的说明(安装成功完成),然后在尝试执行基本用法代码时收到此错误: 执行PhantomJs过程“default”时出错-文件不存在或不可执行:bin/PhantomJs(视图:PATH_TO_PROJECT\resources\views\welcome.blade.php) 基本使用代码 我在谷歌上搜索了很多,找到并尝试了几种解决方案,但都没有成功。在Stackoverflow上,我发现了一个问题。我可以在最后

我正在尝试在CentOS 7和Windows 8下使用Laravel 5

我按照上的说明(安装成功完成),然后在尝试执行基本用法代码时收到此错误:

执行PhantomJs过程“default”时出错-文件不存在或不可执行:bin/PhantomJs(视图:PATH_TO_PROJECT\resources\views\welcome.blade.php)


基本使用代码

我在谷歌上搜索了很多,找到并尝试了几种解决方案,但都没有成功。在Stackoverflow上,我发现了一个问题。我可以在最后的评论中看到,这家伙用以下方法解决了问题:

$client->setBinDir('absolute_path/bin');
$client->setPhantomJs('phantomjs.exe');
我也尝试过了,它返回了另一个错误:

文件不存在或不可执行:phantomjs.exe(视图:PATH\u TO\u PROJECT\resources\views\welcome.blade.php)

但当我尝试时:

echo file_exists('absolute_path/bin/phantomjs.exe');
它返回1,这意味着PHP可以找到具有
绝对路径的文件


我不知道我做错了什么。有谁已经成功地将“php phantomjs”用于laravel,谁能帮我

注意:问题中包含的代码是windows版本代码,但我在两个操作系统中都收到了相同的错误


更新1

绝对路径
更改为
相对路径
后,现在它似乎知道
phantomjs.exe
,但steel与
phantomloader
产生了相同的错误:

文件不存在或不可执行:../bin/phantomloader(视图:PATH\u TO\u PROJECT\resources\views\welcome.blade.php)

已尝试此解决方案,但出现相同错误:

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

好,看一下这里的视频:

这家伙解释了你可能需要的所有东西。希望有帮助

编辑

试着把这个代码

<?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安装
将安装库,然后安装phantomjs

然后,我从复制并粘贴了顶部示例到
index.php
(在需要Composer的自动加载程序之后)

然后我所要做的(因为我在英国)就是删除回复状态if(因为我得到了301)来显示谷歌主页

这是在Mac上,但我无法想象在Centos上会有什么不同

然后,将我的
index.php
文件放入子目录
public
,就像在Laravel安装中一样,我所要做的就是在
Client::getInstance()
之后添加以下行:

然后它又起作用了

显然,这不是一个完整的Laravel安装,但它确实很好地模拟了环境。我注意到的一件事是,在
composer.json
中更改
bin dir
并不总是完全更新放入
bin
中的文件。因此,我必须
rm-rf bin供应商
,然后再次
composer更新
,以确保新安装了composer及其软件包。

错误状态

文件不存在或不可执行:

您已显示该文件存在。现在使其可执行

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');

您是否已转储自动加载
composer dump autoload
?很遗憾,刚才没有任何更改,同样的问题:(您使用的是什么操作系统?您确定使用的是Linux二进制文件吗?因为
phantomjs.exe
是(很可能是)Windows可执行文件。感谢您的时间@user3584460,是的,我确定。我使用CentOS 7和Windows 8,在这两个操作系统中收到相同的错误(问题代码是Windows版本)更新我的答案。你有phantomjs.exe吗?或者你甚至安装了phnatomjs,因为我在你安装phantomjs的页面上的任何地方都找不到它。如果没有,现在就去安装它。是的,问题中已经提到“我按照PHP phantomjs安装的说明进行了安装(安装成功)”.phantomJS.exe是否在同一目录中?如果没有,请尝试将其放置。因为代码对我来说运行良好。我将phantomJS.exe放置在/bin目录中。phantomloader是否在同一目录中?好的,我将尝试执行相同的操作,并从头开始重新安装。可能首先是
rm-rf bin供应商
,然后是
composer update
。这应该是我会给你一个新的Composer安装。但是一定要确保你在
Composer.json
中有
bin dir
的东西,并将
$client
的bin dir设置为
。/bin
。为了让这个与Symfony一起工作,我使用了相对路径$phantom->getEngine()->setPath('../bin/phantomjs');
$client->setBinDir('absolute_path/bin');
$client->setPhantomJs('phantomjs.exe');
$client->getEngine()->setPath('absolute_path/bin/phantomjs.exe');