質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
LibreOffice Calc

LibreOffice Calcは、様々なOSで利用可能なオフィススイートであるLibreOfficeに含まれるオープンソースの表計算ソフトです。テンプレートや背景色、枠線といった書式設定の各項目を柔軟で設定することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2108閲覧

phpのexecのエラーログについて

K.T_build

総合スコア29

LibreOffice Calc

LibreOffice Calcは、様々なOSで利用可能なオフィススイートであるLibreOfficeに含まれるオープンソースの表計算ソフトです。テンプレートや背景色、枠線といった書式設定の各項目を柔軟で設定することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/09/06 05:27

編集2017/09/06 06:11
  • 環境
    CentOs 7.3.1611
    PHP 5.4.16
    libreoffice 5.0.6

いつもお世話になっております。
案件でphpでPDFの帳票作成をすることになり、phpExcel + libreofficeで行おうかと考えています。
コマンドラインで作成したエクセルファイル(.xlsx)をpdfに変換できるところまではテストできたのですが、phpでexecコマンドで実行した際に動作せず、困っております。


■コマンドライン(成功) # /usr/lib64/libreoffice/program/soffice.bin --convert-to pdf --outdir /var/www/html/hoge/app/webroot/download/ --headless /var/www/html/hoge/app/webroot/excel/hoge.xlsx ※下記のphpの$commandをそのままコピペしています。

php

1■php(失敗) 2public function test(){ 3 $filedir = WWW_ROOT.'excel'.DS; 4 $outdir = WWW_ROOT.'download'.DS; 5 $command = "/usr/lib64/libreoffice/program/soffice.bin --convert-to pdf --outdir $outdir --headless ".$filedir."hoge.xlsx"; 6 7 exec($command, $array, $return); 8 var_dump($array); //array() 9 var_dump($return); //int(77) 10 exit; 11}

execのエラーログも詳細に分からないかと調べ、下記のサイトも参考にしたりもしましたが、問題が解決できませんでした。
http://qiita.com/smd8122/items/65b552f1d53bfb7fad9a

何卒ご助力いただければと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2017/09/06 05:39

何かエラーは吐かれていましたか?また、サーバー自体のエラーログは見てみましたか?
K.T_build

2017/09/06 05:46 編集

/var/log/httpd/error_logや、cakephp/app/tmp/logs/error.logを監視したりしましたが何も吐かれませんでした。 コマンドライン上では、topコマンドで見ているときに、「soffice.bin」のプロセスが現れるのですがexecではそれも現れないので、コマンド自体失敗しているのではないかと考えています、、、
kitaji0306

2017/09/06 05:58

execではなくpassthru関数を利用すれば、エラーログ等にもう少し詳細なエラーが出力されないでしょうか?
K.T_build

2017/09/06 05:59

passthru関数ですか、使ったこと無いので調べてみます。
K.T_build

2017/09/06 06:03 編集

第二引数に、execと同じく int(77) が返ってきました。 サーバー自体のエラーログもexecと同様、反応なしでした。
guest

回答1

0

ベストアンサー

フルパスの情報が間違っていないのでしたら、実行ユーザーの権限の問題では?
sudoなど絡めてみてはいかがでしょうか?

投稿2017/09/06 06:07

yambejp

総合スコア114769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

K.T_build

2017/09/06 06:30

回答ありがとうございます。 試しに exec("sudo ls -l", $array, $return);でテストしましたが、 $array = array(0) { }, $return = int(1) となりました。   ※sudoなしだとドキュメントルートの一覧が出ます。 普段 sudoコマンドを使わずにexecをしているので上手くできているのかがわからないです。 visudo でapache にrootと同じく権限を付与したのですが、それでも結果は同じでした。 追加で質問するようで申し訳ありませんが、何かおかしなところはありますでしょうか?
yambejp

2017/09/06 06:32

sudo自体もフルパスにしてみてください
K.T_build

2017/09/06 06:40 編集

exec("/bin/sudo ls -l", $array, $return); で試してみましたが同様でした。 試しにサーバーへの踏み台ユーザーで「sudo ls -l」を叩いてみたら最初の一回目だけ、踏み台ユーザーのパスワードを求められました。 これが関係しているんでしょうか、、、? [sudo] password for hoge:
yambejp

2017/09/06 06:43

visudoで ALL=(ALL) NOPASSWD: ALL などにしてないのでしょうか? 対話的なコマンドはexecでは動かせないと思います もちろんsudoは危険を伴うので実用に際しては Cmnd_Alias で様々なコマンドの禁止処理を並行して記述すべきですが
K.T_build

2017/09/06 06:49

すいません。 NOPASSWDの設定をしていませんでした。 下記の設定に直してテストしてみます。 [visudo] #hoge ALL=(ALL) ALL #apache ALL=(ALL) ALL hoge ALL=(ALL) NOPASSWD: ALL apache ALL=(ALL) NOPASSWD: ALL visudoがよく分かっていないので後で勉強します、、、
K.T_build

2017/09/06 07:02 編集

execが通り、無事にPDFへの変換ができました! ありがとうございます! 今回の事例は、apacheユーザーが /usr/lib64/libreoffice/program/soffice.bin の実行権限が無かったという認識であってますでしょうか?   ※出力先フォルダをパーミッション777にして、sudo 抜きで実行しても失敗しました
yambejp

2017/09/06 07:27

状況から考えるとそうなりますね
K.T_build

2017/09/06 07:45

なるほど、ありがとうございました。 おかげで助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問