#やりたいこと
PHPからコマンドでCasperJSを実行したいです。
php
1<?php 2exec("casperjs casper.js");
#やってみたこと
まず、上記のコードだとエラーが出ました。調べたらパスが通ってないのが原因だと書いてあったので、絶対パス指定しました。
また、普段使っているユーザーでグローバルインストールしたCasperJSを指定するとパーミッションがダメな気がしたので、ローカルインストールしたCasperJSを指定しています。
さらに、PhantomJSインストールした?
みたいなエラーが出たので調べると、putenv("PHANTOMJS_EXECUTABLE=PhantomJSのパス");
を書けばいいとあったので書きました。これはCasperJSのバグだそうです。
次に、casperjsとphantomjsをchmod 777
して、nginxをwheelグループに追加して、コマンドをsudoで実行するようにしました。
#/etc/group wheel:x:10:admin,nginx
改善後のPHPコード↓
php
1<?php 2 3// 環境変数の設定 4putenv("PHANTOMJS_EXECUTABLE=/var/www/CasperJS/node_modules/phantomjs-prebuilt/bin/phantomjs"); 5 6exec("sudo /var/www/CasperJS/node_modules/casperjs/bin/casperjs /var/www/CasperJS/casper.js 2>&1",$output,$result); 7 8echo(print_r($output)."<br/>"); 9echo $result."<br/>";
すると、/usr/bin/env: node: Permission denied
というエラーが返ってきます。
パーミッションをchmod 777
しても変わらないです。
$ sudo ls -l /usr/bin | grep env -rwxrwxrwx. 1 root root 29048 10月 31 2018 env
#環境
Nginx + php-fpm + nodejs です。
CentOS Linux release 7.6.1810 (Core) anyenv 1.1.0 nodenv 1.3.0 node v12.0.0 casperjs 1.1.4 phantomjs 2.1.1 nginx version: nginx/1.16.0
自分だけで解決しようとかなり頑張って調べましたが、今回のエラーはもう私自身の力だけでは解決できなさそうです。
このサイトに書いてあることも実行しましたが、
Linuxに詳しい方、よろしくお願いします。
追記
visudo
の設定は以下の通り設定してあります。
visudo
1## Allows people in group wheel to run all commands 2%wheel ALL=(ALL) ALL 3 4## Same thing without a password 5%wheel ALL=(ALL) NOPASSWD: ALL
出力結果 ↓
bash
1/usr/bin/env: node: Permission denied
設定が有効か確認のためvisudo
の設定をコメントアウトしたところ以下のようになったので、正しく設定は反映されていると思います。
visudo
1## Allows people in group wheel to run all commands 2# %wheel ALL=(ALL) ALL 3 4## Same thing without a password 5# %wheel ALL=(ALL) NOPASSWD: ALL
出力結果 ↓
bash
1sudo: no tty present and no askpass program specified.
また、/etc/php-fpm.d/www.conf
の設定は以下の通りです。
conf
1user = nginx 2group = nginx
再掲になりますが、etc/group
は以下の通りです。
group
1wheel:x:10:admin,nginx
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/05/11 16:10
2019/05/11 17:53
退会済みユーザー
2019/05/11 19:02 編集
2019/05/20 15:13