3

フォルダーから最新のファイルを読み込もうとしています。最新のファイルを見つけたら、それを 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')動作しません。なぜだめですか?

4

1 に答える 1

2

Java などの実行可能ファイルを実行できないため、これは間違いなくパーミッションの問題です。セキュリティ上の理由から運用サーバーには推奨されませんが、解決策は、WAMP サーバーを管理者として実行することです。

方法の詳細については、このリンクを参照してください。

于 2012-06-12T22:53:49.057 に答える