フォルダーから最新のファイルを読み込もうとしています。最新のファイルを見つけたら、それを 1 行ずつ読み取り、バーコード オーバープリンター ソフトウェアを使用してバーコード プリンターで印刷しています。このバーコード プリンターは、サーバーの既定のプリンターです。
ここに私のPHPコードがあります:
<?php
$files = glob('C:\barcode\*.*');
$files = array_combine($files, array_map('filectime', $files));
arsort($files);
echo key($files); // for testing
$handle = @fopen(key($files), "r");
if ($handle) {
while (($buffer = fgets($handle, 4096)) !== false) {
echo $buffer; // for testing
$retval=passthru("BarcodeGenerator.exe ".$buffer.",,Code128,0");
// based on http://www.free-barcode.com/CommandLineBarcode.htm
echo $retval;
}
if (!feof($handle)) {
echo "Error:\n";
}
fclose($handle);
}
?>
上記のコマンド ラインは、私のコマンド ライン プロンプトでは問題なく動作しますが、php スクリプトでは動作しません。プログラムがハングします。何も起こりません。パススルー行にコメントすると、すべて問題ありません。プログラムが実行されます。
これが私がこれまでに試したことです:
- PHP がセーフ モードで実行されているかどうかを確認しました。そうではありません。
- Windows ファイアウォールをオフにしました。
- コマンドを実行しました
calcs /g BarcodeGenerator.exe everyone:F
- 実行可能ファイルと関連ファイルを wamp\www フォルダーにコピーしました。上記のコード(悪い考えですが、それでもやりました)と計算をやり直しました。
- UAC 設定を最小に変更しました
- 現在、システムでウイルス対策が実行されていません。
- 私も試してみ
system()
ましshell_exec()
たexec()
- セーフモードをオンにして、上記のディレクトリを下に置いてみました
safe_mode_include_dir
"
二重引用符 ( ) を単一引用符( )に置き換えてみまし'
た。- フルパスを指定してみました (
C:\\wamp\\www\\
)
コマンドはコマンド プロンプトで正常に実行されます。
shell_exec
では、 PHP で管理者としてコマンドを実行する方法はありますか? 実行可能ファイルをまったく実行したくないようです(これだけではありません)。私は走っWAMP
ていWindows 7
ます。
たとえば、shell_exec('dir')
正常に動作しますが、shell_exec('java')
動作しません。なぜだめですか?