PHP中如何获取ZipArchive已打开的压缩文件名?
获取ZipArchive实例对应的已打开压缩文件名方案
PHP的ZipArchive类本身并没有提供官方公共方法来直接获取已打开的压缩文件名,不过在无法修改getZipFile()函数的前提下,可以通过反射机制访问它的内部属性来实现需求。
方法:利用PHP反射获取内部属性
ZipArchive实例在打开文件后,会在内部保存文件名(多数PHP 7+版本中是filename私有属性),通过反射可以强制访问这个属性:
$zip = getZipFile(); // 初始化反射对象 $reflection = new ReflectionObject($zip); // 获取内部的filename属性 $fileProperty = $reflection->getProperty('filename'); // 开启属性的可访问性 $fileProperty->setAccessible(true); // 获取属性值,即已打开的压缩文件名 $zipFileName = $fileProperty->getValue($zip); echo "Opening zip archive " . $zipFileName;
注意事项
- 该方法依赖PHP底层
ZipArchive类的实现细节,不同PHP版本可能存在属性名差异(比如部分旧版本中属性名为$_filename),需要根据实际运行环境测试调整。 - 反射属于绕过类封装的非常规操作,若后续PHP版本修改了内部属性结构,该方法可能失效。
内容的提问来源于stack exchange,提问作者mankowitz
相关产品推荐
相关产品推荐

