2011-10-18 42 views
0

我正在開發一個項目,該項目將使用戶能夠從網頁啓動工具。該頁面是使用php設計的。我在我的電腦上安裝了WAMP服務器,我可以單擊按鈕在C驅動器上創建和寫入新的批處理文件,並在用戶在頁面上選擇它們時啓動從數據庫中啓動的應用程序路徑。 現在,當我在我的電腦上的WAMP服務器上進行操作時,它就可以工作。我必須將腳本上傳到託管在同一局域網上的工作中的服務器。唯一的問題是我似乎無法創建或寫入用戶PC上的文件。如何使用php從服務器映射到本地pc上

從我的理解,它不是映射當前PC的驅動器。這是我在電腦上所做的。

$file_path="C\\test.bat" 
function runApp($file_path, $appPath){ 
    $bat_file = fopen($file_path, "w"); 
    fwrite($bat_file, "start ".$appPath." \n"); 
    fwrite($bat_file, "echo exit \n"); 
    fclose($bat_file); //close file after updating batch file 
} 

,以使其在工作時服務器的工作,我想

$ip=$_SERVER['REMOTE_ADDR']; 
$file_path="user:[email protected]".$ip."\\F:\\test.bat"; 

但它仍然沒有工作。我錯過了什麼?任何幫助將不勝感激

或請讓我知道如果我可以啓動一個批處理文件或任何文件形成PHP網站

+0

PHP是服務器端,所以任何你在PHP做會發生在服務器上。您無法在客戶端PC上使用它啓動文件。看看Javascript或桌面應用程序。 –

+0

你究竟在做什麼?無論如何,它似乎不適合客戶端(Web)服務器應用程序。 – deceze

+0

這是它應該如何工作,並在wamp服務器上工作。用戶在線登錄其帳戶 - >從要啓動的應用程序列表中進行選擇 - >數據庫更新請求,並在F驅動器(與服務器位於同一域上)中爲應用程序寫入文件將被啓動 - >在那之後,你所要做的就是點擊啓動並啓動批處理文件。當我在我的計算機上執行該操作時,問題再次出現,但是一旦在實際的主機服務器上它似乎沒有寫入文件。我明白PHP只是服務器端,只是想知道它爲什麼在wamp上工作? – blackStar

回答

0

我假設大家都知道,你不能真正執行任何其他方式客戶端PC上的批處理文件來自服務器上的PHP腳本(至少不是單獨使用PHP),所以我不會解釋這一點。

我還假設你正在處理所有的Windows機器 - 這似乎來自代碼示例和問題的上下文。


您在這裏找的是處理SMB協議的函數。有一對夫婦的方式來處理這個問題:

  • 很多的時間,你可以簡單地使用UNC(如你似乎試圖上面做的)。正確的語法是\\servername\sharename\file.ext。我遇到了一些人,聲稱你可以用username:[email protected](和一個聲稱你可以用@username:password作爲後綴,這肯定是錯誤的)加前綴,但是我不能上班。因此,如果您想使用此方法來完成這項工作,我建議您將PHP作爲具有AD權限的用戶運行,以在客戶端計算機上讀取/寫入相關共享,因此不需要額外的身份驗證。

  • 還有this class我一直想要嘗試一段時間,它爲PHP提供了一個smb://流封裝器。我對此沒有任何經驗,但從外觀上看,您應該能夠使用標準URL語法來訪問該文件(即smb://user:[email protected]/servername/sharename/file.ext)。

  • 您可以映射網絡驅動器,以便它可以像任何其他驅動器號一樣使用。這是我成功用來訪問需要PHP身份驗證的SMB共享的唯一方法。這種方法存在缺點,因爲它增加了另一層複雜性 - 因爲您臨時映射驅動器號,所以您必須確保多個併發實例使用不同的驅動器號。

的基本程序會去是這樣的:

// Set the parameters 
$serverNameOrIp = $_SERVER['REMOTE_ADDR']; 
$shareName = 'f'; 
$fileName = 'test.bat'; 
$userName = 'Dave'; 
$password = 'Random'; 
$driveLetter = 'Z'; // You have to make sure there are no clashes with this! 

// Map the drive 
exec("net use {$driveLetter}: \\\\{$serverNameOrIp}\\{$shareName} {$password} /user:{$userName} /persistent:no"); 

// Do your thang... for example 
file_put_contents("{$driveLetter}:\\$fileName",$batchFileData); 

// Un-map the drive to avoid conflicts with later instances 
exec("net use {$driveLetter}: \\\\{$serverNameOrIp}\\{$shareName} /delete"); 
+0

謝謝。我會嘗試。我真的希望它有效 – blackStar

相關問題