You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP Phar反序列化:filesize返回值异常问题咨询

Phar反序列化场景下filesize("phar://test.phar")返回0的原因

核心逻辑差异

  • file_exists("phar://test.phar")仅做两层校验:一是本地test.phar文件是否存在,二是PHP是否启用Phar流包装器,这两个条件满足就会返回true,和Phar内部结构无关。
  • filesize("phar://test.phar")尝试获取的是Phar归档的根目录大小,但Phar的根目录是虚拟的归档结构节点,并非实际存储的字节数据,因此函数默认返回0,这是Phar流包装器的固有处理逻辑。

反序列化触发与返回值的独立性

你通过Phar元数据触发反序列化执行uname -a的操作,和filesize()的返回结果是完全分离的两个流程:

  • 反序列化触发是因为Phar流包装器在解析归档元数据时的必然行为,只要访问Phar归档的元数据区域就会触发,和filesize()的计算逻辑无关。
  • filesize()返回0是它处理虚拟目录的默认结果,不代表反序列化执行失败,也和恶意代码是否运行成功没有关联。

正确获取大小的方式

如果要获取Phar文件本身的真实大小,直接访问本地路径即可:

filesize("test.phar"); // 返回Phar文件的实际字节数

如果要获取Phar内部文件的大小,需要指定具体的内部路径:

filesize("phar://test.phar/your_inner_file.php"); // 返回内部文件的实际大小

内容的提问来源于stack exchange,提问作者OrenIshShalom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:42:03