是否有办法检查从远程服务器收到的内容是否为。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}
经过一番研究,我发现zip档案应该以"PK"开头,所以我写了这样一段代码(以防将来有人有类似的问题):
if (substr($content, 0, 2) == 'PK' && strlen($content)>100000) {echo "this is zip";}
这段代码不是最好的选择(因为您需要信任远程服务器),但总比没有好。我还添加了strlen函数来验证返回的内容是否"足够大"(超过100 KB)以作为zip存档。
如果有人有更好的解决方案,不使用文件句柄资源,我会很高兴听到它
如果你在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 ]