Какой-то парень назвал одно из моих представлений Snipplr "дерьмом", потому что я использовал if ($_SERVER['REQUEST_METHOD'] == 'POST')
вместоif ($_POST)
Мне кажется более правильным проверка метода запроса, потому что я действительно хочу этим заниматься. Есть ли между ними операционная разница или это просто проблема ясности кода?
===
вместо==
здесь as0 == 'POST'
.$_SERVER['REQUEST_METHOD']
номер0
? Насколько я знаю, это невозможно.Ответы:
Ну, на самом деле они не делают то же самое.
$_SERVER['REQUEST_METHOD']
содержит метод запроса (сюрприз).$_POST
содержит любые данные поста.Запрос POST может не содержать данных POST.
Проверяю метод запроса - вообще-то никогда не думал о тестировании
$_POST
массива. Тем не менее, я проверяю обязательные поля для публикации. Таким образом, пустой почтовый запрос дал бы пользователю много сообщений об ошибках, что для меня имеет смысл.источник
if ($_SERVER['REQUEST_METHOD'] == 'POST')
- правильный способ, вы можете отправить почтовый запрос без каких-либо данных.источник
Раньше я проверял,
$_POST
пока у меня не возникали проблемы с большими данными POST и загруженными файлами. Есть директивы конфигурацииpost_max_size
иupload_max_filesize
- если какая-либо из них превышена,$_POST
массив не заполняется.Так что «безопасный способ» - это проверить
$_SERVER['REQUEST_METHOD']
. Тем не менее, вам все равно придется использоватьisset()
для каждой$_POST
переменной, и не имеет значения, проверяете вы или нет$_SERVER['REQUEST_METHOD']
.источник
Если ваше приложение должно реагировать на запрос типа post, используйте это:
Если вашему приложению необходимо реагировать на любые данные, полученные через почтовый запрос, используйте это:
Это зависит от реализации, но вы собираетесь использовать оба, + $ _FILES superglobal.
источник
Оба они правы. Лично я предпочитаю ваш подход из-за его многословности, но на самом деле это зависит от личных предпочтений.
В автономном режиме выполнение if ($ _ POST) не вызовет ошибки - массив $ _POST существует независимо от того, был ли запрос отправлен с заголовками POST. Пустой массив приводится к false при логической проверке.
источник
Вы можете отправить форму, нажав клавишу ввода (то есть не нажимая кнопку отправки) в большинстве браузеров, но это не обязательно отправляет отправку как переменную - поэтому можно отправить пустую форму, т.е.
$_POST
она будет пустой, но форма все равно будет создали HTTP-запрос на php-страницу. В этом случаеif ($_SERVER['REQUEST_METHOD'] == 'POST')
лучше.источник
$_POST
не будет пустым: это будет массив с пустыми значениями.источник
Пока мне может потребоваться доступ к моим PHP-скриптам с помощью более чем одного метода, на самом деле я делаю следующее:
источник
Он проверяет, была ли страница вызвана через POST (в отличие от GET, HEAD и т. Д.). Когда вы вводите URL-адрес в строке меню, страница вызывается через GET. Однако, когда вы отправляете форму с помощью method = "post", страница действия вызывается с помощью POST.
источник
Это действительно 6 из одной, полдюжины другой ситуации.
Единственный возможный аргумент против вашего подхода - $ _SERVER ['REQUEST_METHOD'] == 'POST' не может быть заполнен на определенных веб-серверах / конфигурации, тогда как массив $ _POST всегда будет существовать в PHP4 / PHP5 (и если это не так ' нет, у вас проблемы посерьезнее (- :)
источник
Они оба работают одинаково, но
$_POST
их следует использовать, так как они чище. Вы можете добавитьisset()
к нему, чтобы убедиться, что он существует.источник
$_POST
всегда будет существовать, хотя может быть пустым (преобразованным в логическое значениеfalse
). А что вы подразумеваете под «чище»?