如果您使用的是 Symfony 的 UploadedFile,
请注意,如果您调用此方法
_在_您调用 @move 之后,您很可能会得到
一些难以追踪的错误,提示
`stat failed`
如果你真的仔细想想,它确实有道理,
文件已经被 Symfony 移动了,但 getSize 在 SplFileInfo 中,
而 SplFileInfo 并不知道文件已经被移动了。
奇怪的是,这个错误在我的工作 mac 上并没有出现 :|
(PHP 5 >= 5.1.2, PHP 7, PHP 8)
SplFileInfo::getSize — 获取文件大小
此函数没有参数。
成功时以字节为单位的文件大小,或 false
失败。
如果文件不存在或发生错误,将抛出 RuntimeException。
示例 #1 SplFileInfo::getSize() 示例
<?php
$info = new SplFileInfo('example.jpg');
echo $fileinfo->getFilename() . " " . $fileinfo->getSize();
?>
上面的例子将输出类似于
example.jpg 15385
如果您使用的是 Symfony 的 UploadedFile,
请注意,如果您调用此方法
_在_您调用 @move 之后,您很可能会得到
一些难以追踪的错误,提示
`stat failed`
如果你真的仔细想想,它确实有道理,
文件已经被 Symfony 移动了,但 getSize 在 SplFileInfo 中,
而 SplFileInfo 并不知道文件已经被移动了。
奇怪的是,这个错误在我的工作 mac 上并没有出现 :|
查看 https://php.net/manual/en/function.filesize.php#115792,了解适用于 32 位系统上大于 2GB 文件的快速可靠的 filesize 版本。
当 getSize 返回 0 时,在 fwrtite 之后,您必须使用 clearstatcache
$tmpFile = new \SplFileObject('/tmp/file.txt');
$fp = $tmpFile->openFile('w');
$fp->fwrite('123');
$fp->fflush();
echo $fp->getSize(); // 返回 0
clearstatcache();
echo $fp->getSize(); // 返回 3
https://bugs.php.net/bug.php?id=72182
如果用 SplFileInfo::getSize 使用它 - 如果文件未找到,它会返回 false
如果用 SplFileObject::getSize 使用它 - 它会生成 RuntimeException: SplFileObject::__construct(my-file): failed to open stream: No such file or directory