2016-11-27 42 views
0

更新:經過大量搜索之後,似乎Azure可能會限制我執行某些shell命令的能力。我目前正在使用Standard 1 Web App計劃 - 我需要做些什麼才能夠通過PHP使用BCP實用程序?從Azure PHP網絡應用程序執行BCP

所以我有一個PHP腳本運行在我的Azure網絡應用程序,我一直在嘗試使用BCP上傳數據。我能夠通過Azure控制檯成功運行該命令,但無法通過PHP運行它。

PHP代碼:

$upload_dir = '../uploads'; 
$test = shell_exec("bcp [database].[dbo].[Group] IN $upload_dir/working/Group.csv -S <server>; -T -f $upload_dir/format/Group.fmt -F2"); 
die($test); 

當我運行這個,我沒有收到從腳本響應和查詢數據庫顯示,上傳不成功。當我嘗試使用更簡單的測試時

$test = shell_exec("echo 'Hello World'"); 
die($test); 

我收到預期輸出'Hello World'。

對於文件結構,PHP腳本位於wwwroot/scripts文件夾中,CSV和FMT文件分別位於wwwroot/uploads/working/Group.csv和wwwroot/uploads/format/Group.fmt中。

當我嘗試通過PHP執行shell命令時,是否有某些東西丟失?我很新,所以我感謝所有的幫助!

謝謝!

+0

你有任何更新? –

回答

0

根據您的描述,似乎您已將bcp.exebcp.dll複製到Azure Web Apps目錄,並嘗試使用shell env執行bcp命令。由於Azure的控制檯的默認目錄路徑是Azure的Web應用程序的根目錄,所以我想你的應用程序的結構如下所示:

wwwroot/ 
     bcp.exe 
     bcp.dll 
     scripts/ 
     uploads/ 
     ... 

根據您的代碼段,在scripts文件夾你的PHP腳本找不到bcp命令,所以你有空白頁面。

您可以嘗試將bcp.exebcp.dll文件移動到腳本文件夾中,或者修改shell命令,例如../bcp db.dbo.table in ...

如果我對你的問題有任何誤解,請隨時告訴我。

+0

感謝您的回答 - 自Azure Web應用程序服務器在Windows Server上運行以來,默認情況下安裝了BCP。問題在於服務器不允許我使用bcp或其他命令(如ls)運行shell_exec。我最終創建了一個單獨的虛擬機,我可以運行BCP。 – user2884505