私はこのphpスクリプトを持っています:
<?php
$cmd_desformat = "/usr/local/bin/process /tmp/input.txt > /tmp/output.txt";
shell_exec($cmd_desformat);
input.txtは、以下を含むUTF-8ファイル(「file-i」でチェック)です。
Buenos días
/ usr / local / bin / processは、私が広く使用していてこの問題が発生したことのないサードパーティのバイナリ実行可能ファイルです。
問題は、これをブラウザから実行すると、次のようになることです。
http://localhost/test.php
結果のoutput.txtは、以下を含むUS-ASCIIファイルです。
Buenos d?as [][
ただし、これをコマンドラインから実行すると、次のようになります。
php test.php
結果のoutput.txtは、次のようなUTF-8ファイルです。
Buenos días [][
ユーザーwww-data
と一緒にコマンドラインから実行して、ブラウザーの動作を再現できるかどうかを確認しようとしましたが、結果は再び正しいものになります。exec
代わりに使ってみましたshell_exec
が、結果は同じです。FirefoxとChromeでも試してみました。
ブラウザから呼び出されたときに機能する必要があります。何か案は?
PHPCLI環境はそれと同じではありませんshell_exec
。コンテンツを適切な方法で返す方法には2つの可能性があります。
最も簡単な方法はenv -i
、shell_exec
呼び出しを呼び出して環境をリセットすることです。
<?php
$cmd_desformat = "env -i /usr/local/bin/process /tmp/input.txt > /tmp/output.txt";
shell_exec($cmd_desformat);
デフォルトの環境が正しく設定されていない場合、これは機能しない可能性があります。その場合は、を使用して明示的に設定する必要がありますputenv()
。
<?php
putenv('LANG=en_US.UTF-8'); // Set this to the language you need
$cmd_desformat = "/usr/local/bin/process /tmp/input.txt > /tmp/output.txt";
shell_exec($cmd_desformat);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加