получить размер файла в php - PullRequest
2 голосов
/ 01 декабря 2011

Я хочу сохранить почтовые вложения с размером в базе данных.

Итак, я открываю почту в текстовом режиме по 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 ]

0 голосов
/ 01 декабря 2011

Согласно http://us3.php.net/manual/en/function.mb-strlen.php#47309, следующий код должен дать вам длину строки с многобайтовыми символами, считаемыми как 2 символа.

mb_strlen($utf8_string, 'latin1');

Тем не менее, я бы предложил сохранить файл на диске, так как обычно это намного лучше с точки зрения производительности, плюсы и минусы перечислены в посте Ника: https://stackoverflow.com/a/8339065/863577

0 голосов
/ 01 декабря 2011

Вы имеете дело с бинарным объектом, поэтому, вероятно, лучше хранить его как тот же.Я не уверен, какую базу данных вы используете, но MySQL имеет BLOB (Binary Large OBject) для этой конкретной цели.

Вы также можете записать ее в файловую систему,Десятки хороших дискуссий о достоинствах обоих методов в переполнении стека, поэтому я не буду вдаваться в подробности здесь (например: Хранение изображений в БД?полагайте, что если у вас есть декодированные данные в строке, то strlen даст вам размер файла.Вы также можете запросить базу данных или файловую систему после хранения, чтобы получить ее.

0 голосов
/ 01 декабря 2011

формат Я бы использовал blob , который позволяет хранить двоичные данные в форме base64_decoded. Но если вам не важна емкость хранилища и вы хотите повторно отправить вложение, вы можете хранить данные base64_encoded (для экономии времени обработки) в любом текстовом формате, который поддерживает БД. Если вам нужна емкость хранилища БД, я бы сохранял файл отдельно и сохранял в БД только имя файла и путь.

получить размер файла Чтобы получить длину изображения, используйте strlen для декодированных данных. Было бы лучше использовать также заголовок Content-length.

0 голосов
/ 01 декабря 2011

чтобы получить длину строки в PHP, вы можете использовать strlen ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...