PHPのsystem()
関数を使用して、使用する必要がある CLI プログラムを呼び出していますが、現在 PHP 内からは利用できません (以下のコード)。xml2brl (liblouisxml) CLI を使用して、点字 ASCII テキストを含む出力ファイルを生成しています。以下のコードを使用すると、2 つのファイルが正常に作成され、最初のファイルには入力テキストが正常に書き込まれます。ただし、出力ファイル (2 番目のファイル) には、翻訳されたテキストが書き込まれることはありません。
ただし、ここが奇妙な部分です。渡された同じコマンドとsystem()
、PHP で作成した同じ一時ファイルを使用して、ターミナルで自分のユーザーとしてコマンドを正常に実行できます。この問題の原因は何ですか? whoami
コマンドを介して実行するsystem()
と、ユーザーが取得され、一時ファイルまたは CLI コマンドのいずれにも特別なアクセス許可は必要ありませんxml2brl
。
現在、PHP で 2 つの一時ファイルを作成しています。
//Create the temporary files that will be passed to xml2brl
$_standardText = tempnam("~/tmp", "pll_");
$_translatedText = tempnam("~/tmp", "pll_");
一時ファイルは /private/tmp に保存されpll_
、PHP スクリプトが作成しているファイルを識別するためにプレフィックスが付けられます。
次に、渡されたテキストの内容を次のように一時ファイルに書き込みます。
//Write the contents of the passed text to the temp file
$handle = fopen($_standardText, "w");
fwrite($handle, $text);
fclose($handle);
ここで、にある一時ファイルに/private/tmp/xxxx
テキストが書き込まれています (これを確認しました)。次に、コマンドをフォーマットします。
$command = escapeshellcmd("xml2brl -p" . " " . $_standardText . " " . $_translatedText);
$command 変数をエコーする場合、これは次のような形式になります。
xml2brl -p /private/tmp/pll_MYRy9m /private/tmp/pll_DmiK7E
exec コマンドを実行すると、入力ファイルが処理され、翻訳されたテキストが出力ファイルに書き込まれますが、実行されません。
exec($command);
ls
さて、ここで奇妙な部分があります... .ただし、このコマンドを実行しても機能しません。ただし、一時ファイルを削除せず、同じ PHP 作成コマンド ( xml2brl -p /private/tmp/pll_MYRy9m /private/tmp/pll_DmiK7E
) と一時ファイルを CLI で使用すると、それらを自分のユーザーで実行できます。