在php中获取文件的大小

时间:2011-12-01 09:24:16

标签: php mysql file email

我想在数据库中保存大小合适的邮件附件。

所以我通过php在文本模式下打开邮件,对于附件,我可以看到类似示例的内容:

Content-Type: image/jpeg; name="donoghte D2.jpg"
Content-Disposition: attachment; filename="donoghte D2.jpg"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gvn2345e0
/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcG
BwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwM ...

我将通过此代码显示它

<?php
header('Content-Type: image/jpeg');
echo (base64_decode($text));
?>

如果我想计算这个文件的大小,并将它和它的大小存储在数据库中,最好的方法是什么?

  1. 我应该在数据库中保存这个(就像发送邮件的内容)的encode64吗?
  2. 如果是,那该字段的数据类型应该是什么?
  3. 要计算它的大小,我应该解码它,然后得到strlen吗?还是有更快的方法吗?
  4. 特别感谢您的关注

4 个答案:

答案 0 :(得分:0)

要在PHP中获取字符串长度,可以使用strlen()

答案 1 :(得分:0)

你在那里处理二进制对象,所以最好将它存储为相同的。我不确定你正在使用什么数据库,但是MySQL为了这个目的而拥有BLOB(二进制大对象)。

您也可以将其写入文件系统。关于Stack Overflow上两种技术的优点有很多很好的讨论,所以我不会在这里讨论它(例如:Storing images in DB? Yea or Nay?

我相信如果您在字符串中包含已解码的数据,那么strlen会为您提供文件大小。您也可以在存储后查询数据库或文件系统以获取它。

答案 2 :(得分:0)

格式我会使用blob,它允许您以base64_decoded格式存储二进制数据。但是,如果您不关心存储容量并想要重新发送附件,则可以以DB支持的任何文本格式存储base64_encoded数据(以节省处理时间)。如果您关心数据库存储容量,我会分开保存文件并仅将文件名和路径存储到数据库中。

获取文件大小要获取图像长度,请在解码数据上使用strlen。最好还使用Content-length标题。

答案 3 :(得分:-1)

根据http://us3.php.net/manual/en/function.mb-strlen.php#47309,以下代码应该为您提供字符串长度,其中多字节字符计为2个字符。

mb_strlen($utf8_string, 'latin1');

但是,我建议将文件保存在磁盘上,因为这通常是性能更好的,在nickf的帖子中列出了pro和con:https://stackoverflow.com/a/8339065/863577