2012-12-27 71 views
-1

可能重複:
php How do I start an external program running - Having trouble with system and exec如何使用PHP啓動Windows GUI程序?

如何打開exe文件用PHP?
我有這個想法,並且很難成功幾年,但最終失敗了。任何人告訴我一個成功的方法來完成這項工作?

<?php 
    if(isset($_POST['file_path'])){ 
     /* ------- 
      using "notepad++.exe" to open "test.php" file. 
      or run a bat file which calling "notepad++.exe" to open "test.php" file. 
      how to seting php.ini or firefox or any setting to do this job. 
      it is only for conveniently developing web page in my PC ,not for web servers 
     ------- */ 
    } 
?> 

<form action="test.php" method="post"> 
    <input type="text" name="file_path" value="test.php"/> 
    <button type="submit">open with notepad++</button> 
</form> 

這將產生類似:

rendered HTML screenshot

+1

Check-out'exec':http://us3.php.net/manual/en/function.exec.php – Jasper

+0

exec('notepad ++。exe test.php')'? – raina77ow

+1

此外,至少在Windows上,通過IIS或Apache *啓動的PHP應用程序不能*啓動桌面應用程序沒有一些顯着的權限更改... – Charles

回答

4

的完整路徑上啓動程序它運行Web服務器計算機:

<?php 
exec('"C:\Program Files (x86)\Notepad++\notepad++.exe" "C:\foo.php"'); 

以上將在VISTA/WIN7的工作,如果Web服務器不作爲Windows服務運行。例如,如果您運行apache並在計算機啓動時自動啓動,則可能將其作爲服務安裝。您可以檢查apache是​​否顯示在Windows服務選項卡/ thingy中。

如果Web服務器作爲服務運行,則需要查看啓用服務的「允許桌面交互」選項。但在其他方面:

一個簡單的測試使用PHP的新內置的網絡服務器(PHP 5.4 +)。這裏關鍵的是你從一個shell手動啓動服務器,所以它作爲你的用戶而不是作爲服務運行。

<?php 
// C:\my\htdocs\script.php 
exec('"C:\Program Files (x86)\Notepad++\notepad++.exe" "C:\foo.php"'); 

在瀏覽器 http://localhost:8000/script.php

+0

不錯,我終於用你的方法成功了; – linjuming

1

從來沒有理由這樣做,但你有沒有試過中繼()?

http://php.net/manual/en/function.passthru.php

編輯: 對不起OP是乍一看還真不清楚..

什麼,我會做的是分析該文件到一個字符串或諸如此類的東西,然後強制瀏覽器來治療,作爲一個下載.. PHP是服務器片面的,所以你不能老是隻要求瀏覽器做一些東西..

$someText = 'some text here'; 

header('Content-type: text/plain'); 
header('Content-Disposition: attachment; filename="text.txt"'); 

echo $someText; 
+0

exec(),passthru()和其他命令已經嘗試過,失敗 – linjuming

+0

'passthru'並不是這份工作的最佳工具。它旨在將啓動的進程'stdout傳遞給用戶。 GUI應用程序往往沒有任何東西打印到標準輸出。 – Charles

3

我假設你是想在客戶端設備打開記事本++而不是遠程服務器。如果是這種情況,最好的辦法是用適當的文件類型頭提供文件,並希望客戶端將Notepad ++設置爲默認應用程序來打開這樣的文件。

像這樣的東西應該這樣做:

header('Content-type: text/plain'); 
header('Content-Disposition: attachment; filename="' . $file_name . '"'); // forces file download 
header('Content-length: ' . filesize($file_path)); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); // make sure file is re-validated each time it is requested 

$fh = fopen($file_path, 'r'); 
while(!feof($fh)) { 
    $buffer = fread($fh, 2048); 
    echo $buffer; 
} 
fclose($fh); 

哪裏$file_name是文件(而不是完整路徑)和$file_path的名稱是文件

+0

你可以寫下php代碼嗎?我不清楚你的想法。文件頭?但我不想下載文件,下載的文件不是原始文件。 – linjuming

+0

查看更新的答案。 –

+0

此方法將始終打開臨時文件,如C:\ Documents and Settings \ a \ Local Settings \ Temp \ a.php-4.txt;不是原始文件,我想打開原始文件。 – linjuming

2

我測試的最後成功的方式通過一個命令行窗口

C:\path\to\php.exe -S localhost:8000 -t C:\my\htdocs 

然後啓動Web服務器。
感謝查爾斯,是指php How do I start an external program running - Having trouble with system and exec

  • 開始 - >運行,輸入「services.msc」,彈出服務控制(其他方式到那裏,這是最簡單的IMO)
  • 找到你的Apache服務(使用WampServer 2.0將我的名稱命名爲「wampapache」)
  • 打開服務屬性(雙擊或右鍵單擊 - >屬性)
  • 翻轉到登錄帳戶並確保標題爲「允許服務與桌面交互「是檢查
  • 翻轉回常規選項卡,停止該服務,啓動服務

則:在PHP

pclose(popen("start /B \"d:\\green soft\\notepad++5.8.4\\notepad++.exe\" \"d:\\PHPnow-1.5.6\\htdocs\\laji\\a.php\"", "r")); 

謝謝你所有的好人,有什麼很大的幫助。我終於使我的想法成爲現實。新年快樂 !

相關問題