Php exec経由でlinuxの"less"コマンドを実行する-バイナリファイルの警告

StackOverflow https://stackoverflow.com//questions/12709486

  •  13-12-2019
  •  | 
  •  

質問

いくつかのPDFファイルをTXTに変換する必要があります。たとえば、pdftotextにはPDFのテーブルにいくつかの問題があるため、私は"less"コマンドで終わります。問題は、exec関数(またはshell_exec/system)からコマンドを実行したときに、情報を表示するだけでなく、選択したPDFがバイナリファイルであり、結果ファイルがPDFデーしかし、私がターミナルで通常同じことをするとき、すべてが大丈夫です。また、www_dataユーザーとしてログインし、このユーザーとしてコマンドを実行しようとしましたが、問題もありません。

コマンド:

$ less /var/www/original.pdf > /var/www/new.txt

PHPコード:

exec("less -f /var/www/original.pdf > /var/www/new.txt 2>&1");

PHP execからの結果:

"/var/www/original.pdf" may be a binary file.  See it anyway?

Execコマンドの「-f」オプションは、「はい、とにかく見たい」のために「y」を押す必要がないため、そこにあります。"

set | grep less 歩留まり:

LESSCLOSE='/usr/bin/lesspipe %s %s'
LESSOPEN='| /usr/bin/lesspipe %s'
            Lossless LZW RLE Zip' -- "$cur" ));
                _apport_parameterless
                _apport_parameterless
                _apport_parameterless
                _apport_parameterless
_apport_parameterless () 
役に立ちましたか?

解決

私が読んだことから、あなたのコンソールはPDFファイルを表示することができます less 入力プリプロセッサがインストールされているため、次のようになります lesspipe または lessfile.作り方 less これらのプリプロセッサを使用するには、LESSOPENと呼ばれる環境変数を読み込むことによって、 lesspipelessfile スクリプト。

Webサーバーが環境変数とシェルコマンドを使用して、この動作を複製して、次の呼び出しを行う方法があるかもしれません less Pdfを適切に解析します。

私が提案するのは、呼び出すのではなく、あなたのために変換を行うためにbashスクリプトを呼び出すことです less 直接。そうすれば、bashスクリプトは適切な環境変数を設定し、適切なコマンドを実行してPDFファイルを読み取り可能な出力に変換することができます。

これを行う方法の例を次に示します:

#!/bin/bash

eval $(lesspipe)
less $1 > $2 2>&1

次に、PHPから、そのスクリプトを次のように呼び出します:

exec("/path/to/your/script/script.sh /var/www/original.pdf /var/www/new.txt");

うまくいかない場合は、変更してみてください eval $(lesspipe)eval $(lessfile).

他のヒント

まず第一に、lessはテキストストリームを読むためのインタラクティブなプログラムです。この文脈では、次のものを使用する必要があります cat 代わりに。PDFはテキストベースではなくバイナリ形式であるため、このコースまたはコースは機能しません。

なぜあなたはのようなテキストコンバータにpdfを使用しないでください pdftotext?

PHPコードはどのように実行されましたか?コマンドラインで、 php file.php またはブラウザでヒットしたときにWebサーバーによって http://servername/something/file.php?

一つの推測は、 less コマンドラインで実行するときに実行するのは同じではありません less PHPコードが実行されるときと同じように。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top