2015-08-24 14 views
1

我正在將PHP網站和關聯的計劃任務移至Azure。如何在Azure上的PHP webjob中壓縮文件?

我能得到大多數webjobs的運行,但一個特別翻倒,當它試圖執行一個命令行的「拉鍊」命令(估計是因爲Azure不具有此實用程序提供):

exec('zip -9 -j '.$tmpdir.'GROUP-'.date('dmY').'-DMS14.zip '.$zip_images); 

給出:「拉鍊」不被識別爲內部或外部的命令

是否有可在Azure運行來壓縮文件的等效模塊/指令?

回答

2

由於Azure網站在託管在IIS上的Windows VM上運行,「zip」不是Windows內置命令,所以我們無法在PHP中執行它。

利用PHP內置的ZipArchive級收購,這是正確的,我們並不需要在Azure上安裝它,我想補充一些提示的@Rick雷尼的想法:

1,當我們添加了一個Webjob,作業腳本文件將在D:\home\site\wwwroot\App_Data\jobs被上傳並separatedcontinuous並引發如子文件夾。

2,由於IIS使用FastCGI來處理這些PHP腳本,所以在這裏不會定義$_SERVER變量。所以我們可以使用絕對的文件目錄。

這裏是我的測試代碼片段:

$zip = new ZipArchive(); 
$filename = "D:/home/site/wwwroot/test112.zip"; 
if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) { 
    exit("cannot open <$filename>\n"); 
} 
$zip->addFromString("testfilephp.txt" . time(), "#1 This is a test string added as testfilephp.txt.\n"); 
$zip->addFile("D:/home/site/wwwroot/.user.ini"); 
echo "numfiles: " . $zip->numFiles . "\n"; 
echo "status:" . $zip->status . "\n"; 
$zip->close(); 
+0

這奏效了,不知道爲什麼以前的維護者並沒有在第一時間使用ZipArchive()UTIL! – Paul

+0

在我看來,你的項目是在Linux env上運行的,所以以前的維護者沒有考慮跨平臺的解決方案。 –

0

您需要以編程方式執行此操作,而不是嘗試啓動另一個進程。

看來,PHP內置庫/函數來支持你想要做的事情。快速搜索顯示這個documentation解釋如何。

如果你想要一個.NET解決方案,那麼你可以使用ZipFile class