簡體   English   中英

如何在Azure上的PHP webjob中壓縮文件?

[英]How to zip files inside a PHP webjob on Azure?

我正在將一個PHP網站和相關的計划任務移至Azure。

我可以運行大多數Web作業,但是當它嘗試執行命令行“ zip”命令時(尤其是因為Azure沒有此實用程序可用),它尤其會掉線:

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

提供: 'zip'無法識別為內部或外部命令

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

由於Azure網站在IIS托管的Windows VM上運行,並且“ zip”不是Windows內置命令,因此我們無法在PHP中執行它。

@Rick Rainey的利用PHP內置ZipArchive類來實現這一點的想法是正確的,我們不需要將其安裝在Azure上,我想補充一些技巧:

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();

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

看來PHP具有內置的庫/函數來支持您想做的事情。 快速搜索顯示了此文檔,說明了操作方法。

如果需要.NET解決方案,則可以使用ZipFile類

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM