繁体   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