我想在数据库中保存大小合适的邮件附件。
所以我通过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));
?>
如果我想计算这个文件的大小,并将它和它的大小存储在数据库中,最好的方法是什么?
strlen
吗?还是有更快的方法吗?特别感谢您的关注
答案 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