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

Magento 1中PHP filesize获取媒体目录文件大小失败排查

解决Magento中filesize函数无法正确显示文件大小的问题

嘿,我来帮你排查下问题所在,你的代码主要有几个容易踩坑的地方,咱们一个个说:

1. 路径拼接的致命错误

你定义的$file = '/h/p/file.pdf'开头带了个斜杠,和后面的../media/catalog拼接后,PHP会直接忽略前面的相对路径!因为当拼接的路径中后面部分是**绝对路径开头(带/)**时,前面的相对路径会被覆盖,实际执行的路径变成了/h/p/file.pdf,这显然不是你要的Magento media目录下的文件,肯定找不到啊!

解决办法:把$file开头的斜杠去掉,改成$file = 'h/p/file.pdf',这样拼接后才是正确的相对路径../media/catalog/h/p/file.pdf。

2. 直接输出filesize结果是字节,不是MB

就算路径对了,filesize()返回的是文件的字节数,你直接echo出来的只是一串数字,不是你想要的MB单位,必须做单位转换才行。

3. 相对路径不靠谱,用Magento内置方法更稳妥

硬编码相对路径很容易出问题——比如你的脚本如果不在Magento根目录下,../media/catalog就会指向错误的位置。最好用Magento提供的方法获取媒体目录的绝对路径,彻底避免路径错误:

Magento 1 示例代码:

<?php
// 去掉$file开头的斜杠,确保是相对catalog目录的路径
$file = 'h/p/file.pdf';
// 用Magento内置方法获取media目录绝对路径,再拼接完整路径
$fullPath = Mage::getBaseDir('media') . DS . 'catalog' . DS . $file;

// 先检查文件是否存在且可读,避免报错
if (file_exists($fullPath) && is_readable($fullPath)) {
    // 把字节转换为MB,保留两位小数
    $sizeMB = filesize($fullPath) / (1024 * 1024);
    echo number_format($sizeMB, 2) . ' MB';
} else {
    echo '文件不存在或无法读取,请检查路径和权限';
}
?>

Magento 2 示例代码(在自定义块类中使用):

<?php
use Magento\Framework\Filesystem;

class YourCustomBlock extends \Magento\Framework\View\Element\Template
{
    protected $_mediaDirectory;

    public function __construct(
        \Magento\Framework\View\Element\Template\Context $context,
        Filesystem $filesystem,
        array $data = []
    ) {
        $this->_mediaDirectory = $filesystem->getDirectoryWrite(\Magento\Framework\App\Filesystem\DirectoryList::MEDIA);
        parent::__construct($context, $data);
    }

    public function getFileSize()
    {
        $file = 'h/p/file.pdf';
        $fullPath = $this->_mediaDirectory->getAbsolutePath('catalog/' . $file);
        
        if (file_exists($fullPath) && is_readable($fullPath)) {
            $sizeMB = filesize($fullPath) / (1024 * 1024);
            return number_format($sizeMB, 2) . ' MB';
        }
        return '文件不存在或无法读取';
    }
}

4. 别忘了检查文件权限

如果路径改对了还是不行,得确认Magento的media/catalog/h/p/目录和file.pdf文件的权限是否正确——PHP进程需要有读取该文件的权限,一般设置为目录755、文件644就可以。

总结一下:先修正路径的斜杠问题,用Magento内置方法构建绝对路径,转换字节到MB单位,再加个错误检查,这样就能正常显示文件大小了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:17:21