ФорумПрограммированиеPHP для идиотов → Чтение файлов средствами функций imap...

Чтение файлов средствами функций imap...

  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 26 ноября 2009 г. 5:31

    Итак, читаю письма из ящика. Что нужно? А нужно корректно прочесть также и файлы, вложенные в них…
    Когда я смотрю в тексты писем(ф-я
    imap_body($messbox, $i);
    ), и там есть файлы бинарные, письмо начинается приблизительно так

    "This is a multi-part message in MIME format. ————–020201030305060504030806 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit hjgvhjjm,, ————–020201030305060504030806 Content-Type: image/jpeg; name="logo1.jpg" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="logo1.jpg" "

    А дальше получаю такое вот (бинарное) месиво "/9j/4AAQSkZJRgABAgEASABIAAD/4Q4uRXhpZgAATU0…(и т.д.)" …
    Когда я тело письма прочту средством
    imap_binary()
    , то функция мне возвратит непосредственно само месиво.
    Да, это с 1й стороны даже и лучше так извлекать.
    Беда в том, что я даже приблизительно не припоминаю никаких функцый в пхп, чтобы преобразовала бинарную строку на ссылку самого файла (!). Да, именно чтобы когда я, прочел бинарный файл, смог, например, если это изображение простое - напряму вывести в броузер(или если любой 2й файл - то окно для сохранения вывести).

    Может есть такая возможность самыми функиями imap'овскими такое сделать…
    Просветите господа….
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 26 ноября 2009 г. 5:38, спустя 6 минут 56 секунд

    base64decode
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 26 ноября 2009 г. 5:45, спустя 6 минут 52 секунды

    CTAPbIu_MABP, если мутю так:
    var_dump(base64_decode($msg_message));

    возвращает фолс.
    если из
    var_dump(imap_binary(base64_decode($msg_message)));

    возвращает то же самое все…
    Или ерунда, или я смотрю вообще не туда где положено…
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 26 ноября 2009 г. 5:47, спустя 2 минуты 28 секунд

    Content-Transfer-Encoding: base64


    у тебя картинка в base64, посмотри может она в нескольких частях
    Спустя 39 сек.
    ————–020201030305060504030806

    это делимитр частей
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 26 ноября 2009 г. 6:36, спустя 48 минут 28 секунд

    CTAPbIu_MABP, там просто 1я часть содержит простой текст, а 2я сам бинарн. код.
    типа так:


    This is a multi-part message in MIME format.
    ————–020201030305060504030806
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 7bit

    hjgvhjjm,,

    ————–020201030305060504030806
    Content-Type: image/jpeg;
    name="logo1.jpg"
    Content-Transfer-Encoding: base64
    Content-Disposition: inline;
    filename="logo1.jpg"

    /9j/4AAQSkZJRgABAgEASABIAAD/4Q4uRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEa
    AAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAcAAAAcgEyAAIAAAAU
    AAAAjodpAAQAAAABAAAApAAAA
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 26 ноября 2009 г. 6:54, спустя 17 минут 54 секунды

    Rotten, а в чем проблема то?
    Спустя 98 сек.
    имап функции очень мощные, вы как всегда блядь в лоб делаете.

    http://ru2.php.net/manual/en/function.imap-fetchbody.php вот это тебе надо я уверен на 99% и подобные вещи (с припиской struct)
    Сапожник без сапог
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 26 ноября 2009 г. 6:58, спустя 4 минуты 53 секунды

    phpdude, Ну так а шо?
    мне нравится олд-скул, и все в лоб по старинке)…Че тут плохого? Да, чуть больше кода, зато задействованные традиционные старые алгоитмы(или еще лучше - созданные мной).
    Согласен - в данном плане я наследую интерфейс оболтуса и дурака т.к. типа пытаюсь заново изобрести велосипед.
    Но - согласись, чувак - если я буду так красиво всегда писать в сокращенном виде а-ля в стиле "вызов метода одной строкой", то и навыки погробляться кодерские…
    Я лично считаю что иногда таким макаром(в лоб) тоже надо…)
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 26 ноября 2009 г. 7:06, спустя 7 минут 6 секунд

    Rotten, я лично считаю что mime формат письма слишком сложен чтобы обрабатывать эту штуку своим ебаным косячным, где то неправльно работающим, хуевым, медленным сраным велосипедом, а не красивой функцией написанной на СИ, отлаженной годами и не одним тобой и заказчиком. без обид, я тоже люблю писать велосипеды, но только пхпшные велосипеды, а не готовые пхпшные ПРАВИЛЬНО работающие функции. поверь mime Обработка займет у тебя строчек 150 логики на простое письмо от одного типа клиента(отправителя письма), в которых есть возможность допустить 150 ошибок минимум :)

    зы: ты же не переписываешь мускуль драйвер на пхп? ведь это же ахуенно свой мускуль драйвер, да еще и pure php!!! ЗАПУСТИТСя НА ЛЮБОМ ХОСТИНГЕ! я не смеюсь, я к слову, ведь и протокол мускуля реализовать - дело пары дней в простом варианте.
    Спустя 26 сек.
    зы: я могу еще много пиздеть и приводить доводов, но не стану чтобы не показать пидуном и доводчиком
    Сапожник без сапог
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 26 ноября 2009 г. 7:14, спустя 8 минут 13 секунд

    phpdude, я не много не то имел ввиду…)
    конечно - с миме/бейс64, без сомнений нема прикола переделывать/писать хз сколько кода логики…
    "В лоб" - я имел ввиду тривиальные буденные задачи в стиле
    "можно написать так:
    for($i=0;$i<10;$i++)
    echo "fuck you fucking fuck<br />";

    но зачем если проще
    str_repeat("fuck you fucking fuck<br />",10);

    "
    Ну а касательно миме-формата, то я думал, что как - в 2-3 строки отсекти сначала регуляркой бинКод, и потом подать его на подносе в виде ссылки на файл…
    Но профессиональным парсингом я бы сам не стал заниматся)
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 26 ноября 2009 г. 7:18, спустя 4 минуты 39 секунд

    Rotten, если у тебя письма приходят хуй пойми откуда, то лучше заюзай стандартные решения, а если ты сам их шлешь(хуй нает нах те надо :) ), то тут конечно можно и регулярочкой обойтись))

    будничные задачи не сводятся к replace увы)
    Сапожник без сапог
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 26 ноября 2009 г. 7:22, спустя 3 минуты 23 секунды

    phpdude, на счет будничных задач - я образно)…
    Пример же как бы учебный)
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 26 ноября 2009 г. 10:43, спустя 3 часа 21 минуту 19 секунд

    phpdude, кстати…. обсмоктал что imap-fetchbody что imap_fetchstructure сверху донизу…
    Да, они какбе удобные - 2я вообще возвращает все это дело обьектами…
    Но ты звиняй уж……Я думаю из ниженаведенной информации толку будет пожалуй куда меньше чем то что я использовал раньше(ибо там хоть бинарный код в бейс64 был, а тут какбы одни строки)….
     [1] => stdClass Object
    (
    [type] => 5
    [encoding] => 3
    [ifsubtype] => 1
    [subtype] => JPEG
    [ifdescription] => 0
    [ifid] => 0
    [bytes] => 39462
    [ifdisposition] => 1
    [disposition] => INLINE
    [ifdparameters] => 1
    [dparameters] => Array
    (
    [0] => stdClass Object
    (
    [attribute] => FILENAME
    [value] => logo1.jpg
    )

    )

    [ifparameters] => 1
    [parameters] => Array
    (
    [0] => stdClass Object
    (
    [attribute] => NAME
    [value] => logo1.jpg
    )

    )

    )


    Да, есть у меня имя и тип файла. И куда мне с этим)?
    Выводить echo "<img src='".imap_fetchstructure($mbox,$num)->parts[1]->parameters[0]->value."'>"; ?))) (я это в шутку написал)
    Ну бо подругому, мне кажется эта инфа явно бесполезна…
    Ладно, шобы не было - спасибо за попытки помочь и внимание)…буду дальше колупать..
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 26 ноября 2009 г. 10:58, спустя 14 минут 31 секунду

    что-то я не могу раскодировать твою картинку

    http://www.motobit.com/util/base64-decoder-encoder.asp
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 26 ноября 2009 г. 11:18, спустя 20 минут 39 секунд

    вот как все не могут почитать, ну а?

    ужас а!

    из структуры ты берешь ID части, содержащей картинку. у тебя это
    [1] => stdClass Obje

    итого id = 1, прибавляем +1 ибо в 0ой идет заголовочная информация о письме, итого id = 2.

    потом

    	
    $img = imap_fetchbody($im, $messID, $id);
    $img = imap_base64($img);
    header("Content-type: image/jpeg;");
    die($img);


    и все нахуй! а если не получится, то значит руки крюки! у меня на хосте все получилось, можете со мной не спорить, все равно я выиграю ))
    Спустя 62 сек.
    более того, я проверял на gmail.com! ;)
    Сапожник без сапог
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 26 ноября 2009 г. 11:30, спустя 11 минут 22 секунды

    Ну прогресс есть: хоть кодируется в бейс 64)…
    Нужно будет еще поперепроверять на других хостингах…

    яШяа�JFIF��H�H��яб.Exif��MM�*������������������b�������j(�������1�������r2�������Ћ‡i�������¤���Р�
    ьЂ��'�

Пожалуйста, авторизуйтесь, чтобы написать комментарий!