有没有办法检查从远程服务器收到的内容是否是.zip存档?我在这里找到了很多解决方案,但它们都是本地文件;因此,这些解决方案使用文件句柄资源,如fopen,fgets等。
简单地说,curl用于从远程服务器获取内容。根据远程服务器上的验证结果(我无权访问),它以纯文本形式返回.zip存档或错误消息。如果返回.zip存档,我从curl收到的内容如下:
PK
A‘OCBÇ—= =
and many more symbols here....
然后我只使用fwrite函数将接收到的内容写入本地文件。当然,如果没有返回存档,内容如下:
some random message here
这就是我的全部。那么,有没有办法检查返回的内容是否是.zip存档?当然,我可以使用像:
这样的解决方案if (stristr($content, "some random message here")) {//not zip archive}
但这很蹩脚......
答案 0 :(得分:1)
经过一些研究,我发现zip档案应该以" PK"开头,所以我写了这样的代码(以防将来有人遇到类似的问题):
if (substr($content, 0, 2) == 'PK' && strlen($content)>100000) {echo "this is zip";}
这段代码不是最好的选择(因为你需要信任远程服务器),但它总比没有好。我还添加了strlen函数来验证返回的内容是否足够大" (超过100 KB)是一个zip存档。
如果有人有一个更好的解决方案,而不使用文件句柄资源,我会很高兴听到它。
答案 1 :(得分:1)
如果您使用的是Linux或* BSD服务器,则可以执行以下操作:
$result = shell_exec('file cccr_logo.zip');
echo 'result:['.$result.']';
哪个应该吐出这样的东西:
result:[cccr_logo.zip: Zip archive data, at least v2.0 to extract ]
如果您想针对标准$result
进行测试,可以使用-b
开关,如下所示:
$result = shell_exec('file -b cccr_logo.zip');
echo 'result:['.$result.']';
现在有效的zip将是(没有文件名):
result:[Zip archive data, at least v2.0 to extract ]