2012-06-12 29 views
3

我想從文件夾中讀取最近的文件。找到最新的文件後,我逐行閱讀並使用條碼Overprinter軟件將其打印到條碼打印機上。此條形碼打印機是我的服務器上的默認打印機。PHP不能用於shell_exec(),system()或passthru()

這是我的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腳本沒有。 程序掛起。什麼都沒發生。如果我評論passthru線,一切都很好。該程序執行。

這是我到目前爲止已經試過:

  • 經過PHP是否在安全模式下運行。不是。
  • 關閉Windows防火牆。
  • 我已經運行命令calcs /g BarcodeGenerator.exe everyone:F
  • 我已將可執行文件和相關文件複製到wamp \ www文件夾。上面的代碼(壞主意,但我仍然這樣做)和redid calcs。
  • 我已將UAC設置更改爲最低
  • 我的系統上當前沒有運行防病毒軟件。
  • 我試過system()shell_exec()exec()
  • 我試着開啓安全模式,並把上面的目錄safe_mode_include_dir
  • 下,我試着更換雙引號(")用單引號(') 。
  • 我試着給的完整路徑(C:\\wamp\\www\\

的命令運行在命令提示符罰款。

那麼,有什麼辦法在PHP下以管理員身份運行shell_exec命令嗎?它似乎並不想運行一個可執行文件(不僅僅是這個)。我在Windows 7上運行WAMP。例如,shell_exec('dir')工作正常,但shell_exec('java')不。爲什麼不?

+0

它掛起,還是產生一個你看不到的錯誤(因爲沒有啓用錯誤報告),你在等待永遠不會出現的輸出嗎? – CodeCaster

+0

它只是掛起,直到超時。沒有錯誤產生。錯誤報告已啓用。 – Ank

+0

您是否嘗試查看apache用戶是否有權執行? –

回答

2

既然你不能運行任何可執行文件,比如Java,這肯定是一個權限問題。該解決方案由於安全性而不建議用於生產服務器,因此應以管理員身份運行WAMP服務器。

有關如何操作的詳細信息,請參閱this link

+0

這將有助於我關閉UAC!我仍然會嘗試 – Ank

+0

我明白你爲什麼說不推薦生產。如果它不建議那麼最好的建議.. – Ank

+0

它應該幫助。 – davidethell

相關問題