前提・実現したいこと
PHPでPDFファイルのテキストを読み込みたい
→xpdfのpdftotextを利用したらローカル環境では実現できた(「該当のソースコード」のコマンドをexec関数で実行)
→さくらのレンタルサーバーにデプロイして同じ動作をさせたいが出来ない
発生している問題・エラーメッセージ
さくらのレンタルサーバーでexec関数が上手く動かない
いろいろ試したがexec関数の第三引数に「126」,「127」が返ってくる
該当のソースコード
php
1$cmd = __DIR__ . "/xpdf-tools-win-4.03/bin64/pdftotext -enc Shift-JIS " . __DIR__ . "/pdftotext_escape/pdf/" . "ユーザが読み込ませたPDFのファイル名.pdf" 2exec ($cmd, $output, $result_code);
試したこと
コマンド末尾に「2> ./logs/log.log」を追加し下記を試し、エラーログを確認した。
1.
まずはローカル環境で動いていた状態で実行
エラーログ:sh: /home/hoge/www/fuga/xpdf-tools-win-4.03/bin64/pdftotext: not found
2.
相対パスで指定してコマンドを実行
php
1$cmd = "./xpdf-tools-win-4.03/bin64/pdftotext -enc Shift-JIS ./pdftotext_escape/pdf/" . "ユーザが読み込ませたPDFのファイル名.pdf" . " 2> ./logs/log.log" 2exec ($cmd, $output, $result_code);
エラーログ:sh: ./xpdf-tools-win-4.03/bin64/pdftotext: not found
3.
指定のパスを絶対パス(ローカル環境で動いていた状態)に戻しフォルダ「/home/hoge/www/fuga/xpdf-tools-win-4.03/bin64/」にある「pdftotext.exe」を「pdftotext」にした(拡張子を消した)。
エラーログ:sh: /home/hoge/www/fuga/xpdf-tools-win-4.03/bin64/pdftotext: Permission denied
4.
3.の状態でコマンドの実行に権限を持たせる
php
1$cmd = "sudo -S " . __DIR__ . "/xpdf-tools-win-4.03/bin64/pdftotext -enc Shift-JIS " . __DIR__ . "/pdftotext_escape/pdf/" . "ユーザが読み込ませたPDFのファイル名.pdf" . " 2> ./logs/log.log"; 2exec ($cmd, $output, $result_code);
エラーログ:sh: sudo: Permission denied
補足情報(FW/ツールのバージョンなど)
下記、レンタルサーバーのフォルダ構成です。
/home/hoge/www/fuga/ ├index.php ├pdftotext_escape/ └pdf/ ├xpdf-tools-win-4.03/ ├bin64/ ├xpdf-japanese/ ├xpdfrc ├pdftotext.exe
下記、/home/hoge/www/fuga/xpdf-tools-win-4.03/bin64/xpdfrcファイルに書かれている内容もパスをローカルからサーバの情報に変更しています。
#----- begin Japanese support package (2011-sep-02) cidToUnicode Adobe-Japan1 "/home/hoge/www/fuga/xpdf-tools-win-4.03/bin64/xpdf-japanese/Adobe-Japan1.cidToUnicode" unicodeMap ISO-2022-JP "/home/hoge/www/fuga/xpdf-tools-win-4.03/bin64/xpdf-japanese/ISO-2022-JP.unicodeMap" unicodeMap EUC-JP "/home/hoge/www/fuga/xpdf-tools-win-4.03/bin64/xpdf-japanese/EUC-JP.unicodeMap" unicodeMap Shift-JIS "/home/hoge/www/fuga/xpdf-tools-win-4.03/bin64/xpdf-japanese/Shift-JIS.unicodeMap" cMapDir Adobe-Japan1 "/home/hoge/www/fuga/xpdf-tools-win-4.03/bin64/xpdf-japanese\CMap" toUnicodeDir "/home/hoge/www/fuga/xpdf-tools-win-4.03/bin64/xpdf-japanese\CMap" #fontFileCC Adobe-Japan1 /usr/..../NotoSansCJKjp-Regular.otf #----- end Japanese support package
自分なりの見解では、コマンドがスペースで区切られていて実行できていないのでは?といった感じです。
実行したいコマンド:__DIR__ . "/xpdf-tools-win-4.03/bin64/pdftotext -enc Shift-JIS " . __DIR__ . "/pdftotext_escape/pdf/" . "ユーザが読み込ませたPDFのファイル名.pdf"
エラー:sh: /home/hoge/www/fuga/xpdf-tools-win-4.03/bin64/pdftotext: not found
でもコマンド末尾の2> ./logs/log.log
のスペースは影響なくログが出力出来ているしスペースは悪さしていないのかな?とも思ったりしています。
ご教授いただきたくよろしくお願い致します。
追記
①フォルダ構成
/home/hoge/www/fuga/ ├ index.php ├ usr/ └ local/ ├ libexec/ └ xpdf/ ├ xpdfrc ├ pdftotext ├ share/ ├ xpdf/ ├ japanese/ ├ Shift-JIS.unicodeMap
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/05/18 07:10
2021/05/18 22:08
2021/05/19 00:21
2021/05/19 14:38