如何获取磁盘上的文件大小,而不是文件大小?

时间:2017-07-11 23:09:55

标签: php

如何在PHP中获取特定文件的磁盘大小?

echo filesize("test.txt");
//Size         100 KB (102,836 bytes)

但在磁盘上我有:

Size on Disk 104 KB (106,493 bytes)

如何使用PHP获取磁盘大小?

3 个答案:

答案 0 :(得分:0)

听起来您只想获取filesize()返回的结果并向上舍入到最接近的1024的倍数(或者您的驱动器的块大小)。以下是几种舍入最近的X的方法:Round up to nearest multiple of five in PHP

答案 1 :(得分:0)

要实现这一点,您需要使用PHP内置的stat()函数。 filesize()只返回文件的实际大小,有时可能比磁盘大小要小很多(例如,如果你的块大小是4096KB而你的文件只有1KB,那么你的磁盘大小就会1KB文件为4096KB)。我们特别感兴趣的是stat()返回的以下数组键:

  

块 - 分配的512字节块数**

因此,我们只需要从数组中取出blocks密钥并将其乘以512.您可以在下面看到不同的输出(基于4096KB块大小系统上的5968KB文件):

echo filesize('test.txt');
echo stat('test.txt')['blocks'] * 512;

我的机器上会返回:

5968
8192

这是因为我的块大小为4096KB。我的文件是5968KB,因此需要分配2个4096KB块。这相当于16个512K块,因此我们就可以获得正确的磁盘大小。

如果您有兴趣,还可以使用stat()返回的以下数组键找到您的系统块大小:

  

blksize - 文件系统IO的块大小**

但请注意,如果您使用的是Windows服务器,则根据以下文档中的说明,这将无效:

  

**仅在支持st_blksize类型的系统上有效 - 其他系统(例如Windows)返回-1。

答案 2 :(得分:-1)

根据http://php.net/manual/en/function.filesize.php

$filename = "path/to/file"; $size = filesize($filename); 应该有效

像:

library(ggplot2)
library(magick)
library(here) # For making the script run without a wd
library(magrittr) # For piping the logo

# Make a simple plot and save it
ggplot(mpg, aes(displ, hwy, colour = class)) + 
  geom_point() + 
  ggtitle("Cars") +
  ggsave(filename = paste0(here("/"), last_plot()$labels$title, ".png"),
         width = 5, height = 4, dpi = 300)

# Call back the plot
# Now call back the plot
background <- image_read(paste0(here("/"), "Cars.png"))
# And bring in a logo
logo_raw <- image_read("https://i.imgur.com/e1IneGq.jpg") 

frames <- lapply(logo_raw, function(frame) {
  image_composite(background, frame, offset = "+70+800")
})

animation <- image_animate(image_join(frames))

image_write(animation, "~/Cars_Travolta.gif")