получить многостраничную почтовую почту в php [duplicate]

Python 3.4 и более поздние версии предлагают pathlib в стандартной библиотеке. Вы можете сделать:

from pathlib import Path

asm_pths = [pth for pth in Path.cwd().iterdir()
            if pth.suffix == '.asm']

Или, если вам не нравятся перечни списков:

asm_paths = []
for pth in Path.cwd().iterdir():
    if pth.suffix == '.asm':
        asm_pths.append(pth)

Path объекты могут быть легко преобразованы в строки.

28
задан Andrey M. 1 September 2009 в 11:18
поделиться

3 ответа

Прямой ответ: вы не можете этого сделать. PHP настаивает на его разборе, всякий раз, когда он видит Content-Type multipart / form-data. Необработанные данные не будут доступны вам. К сожалению.

Я столкнулся с подобной проблемой, партнер отправил неверно отформатированные данные как multipart / form-data, PHP не смог разобрать его и не выдавал, чтобы я мог его разобрать себя.

Решение? Я добавил это в свой apache conf:

<Location "/backend/XXX.php">
    SetEnvIf Content-Type ^(multipart/form-data)(.*) NEW_CONTENT_TYPE=multipart/form-data-alternate$2 OLD_CONTENT_TYPE=$1$2
    RequestHeader set Content-Type %{NEW_CONTENT_TYPE}e env=NEW_CONTENT_TYPE
</Location> 

Это изменит Content-Type входящего запроса на XXX.php из multipart / form-data в multipart / form-data-alternate, что достаточно чтобы блокировать PHP от попытки разобрать его

После этого вы можете, наконец, прочитать все необработанные данные из ввода php: // и проанализировать его самостоятельно.

Это уродливо, но у меня есть не нашли лучшего или фактически любого другого решения - не попросив партнера исправить свою сторону.

NB! Когда вы сделаете то, что я описал здесь, $ _FILES будет пустым.

34
ответ дан Anti Veeranna 26 August 2018 в 01:51
поделиться
  • 1
    Если я заменю заголовок Content-type таким образом, я верну php-источник в своем браузере. Кажется, что php-движок не будет обрабатывать этот запрос. Что это за трюк? Я использовал разные замены заголовков, ни одна из них не работала. – user 14 March 2011 в 18:21
  • 2
    Похоже, что возможно сделать это с помощью enable_post_data_reading . – Pacerier 5 February 2015 в 13:12
  • 3
    @Pacerier - возможно, мой ответ был написан до php 5.4 – Anti Veeranna 6 February 2015 в 07:23

Я не реализовал это полностью, но похоже, что он должен работать. В Apache conf:

SetEnvIf Content-Type ^(multipart/form-data)(.*) MULTIPART_CTYPE=$1$2
RequestHeader set Content-Type application/x-httpd-php env=MULTIPART_CTYPE
RequestHeader set X-Real-Content-Type %{MULTIPART_CTYPE}e env=MULTIPART_CTYPE

Кажется, что настройка Content-Type на application/x-httpd-php решает исходную проблему PHP-анализа тела, а проблема Норберта Фаркаса сообщила: «Apache отправляет обратно PHP исходный код ". Затем тело доступно на php://input и действительном типе содержимого в заголовке X-Real-Content-Type. (Этот заголовок может быть вам не нужен - переменная MULTIPART_CTYPE, похоже, не показывалась в моем $_ENV, но новый заголовок сделал.) Все остальные запросы должны обрабатываться как обычно.

Благодаря Anti Veeranna для большей части этого! :)

EDIT: P.S. Очевидно, что это специфичный для Apache, но в некоторых других конфигурациях PHP может быть проще.

5
ответ дан mrjimoy_05 26 August 2018 в 01:51
поделиться

Вы можете установить enable_post_data_reading = Off , а PHP не будет перехватывать данные multipart/form-data.

Требуется: PHP 5.4

10
ответ дан Pacerier 26 August 2018 в 01:51
поделиться
  • 1
    Интересно. Особенно, когда в Руководстве по PHP в другом месте утверждается, что невозможно получить сырое тело в случае multipart/form-data. – Anshul 28 May 2014 в 12:16
  • 2
    @Anshul, В руководстве все еще говорится об этом? Нет никакой согласованной версии руководства. Некоторые страницы являются версией X, а другие - версией Z. – Pacerier 5 February 2015 в 13:06
  • 3
    @Pacerier, я по-прежнему считаю, что невозможно получить сырые данные multipart / form-data. Все следующие ссылки предполагают, что: php.net/manual/en/… php.net/manual/en/ini.core.php#ini.enable-post-data- чтение php.net/manual/en/wrappers.php.php php.net/manual/en/reserved.variables.httprawpostdata.php – Anshul 6 February 2015 в 12:52
  • 4
    @Anshul, enable_post_data_reading = Off дает вам сырые данные о multipart / form-data, не так ли? – Pacerier 8 February 2015 в 16:44
  • 5
    @Pacerier, ты был прав. Я смог прочитать пост-данные любого типа с входом php: //, когда параметр enable_post_data_reading был отключен. Протестировано с помощью Apache, а также встроенным веб-сервером PHP. Для этого необходимо обновить документацию. К сожалению, мои предыдущие попытки получить небольшие изменения там пошли бесполезно. :( – Anshul 13 February 2015 в 19:23
Другие вопросы по тегам:

Похожие вопросы: