Когда я пытаюсь получить доступ к загруженному файлу с помощью $_POST, я не получаю никакой информации, но если я использую $_FILES, я получу все материалы, связанные с загруженным файлом.
Почему мы не можем использовать $_POST вместо $_FILES?
@Майкл Берковски, но мы должны знать причину этого, поскольку мы разработчики
@AmolKhaire, почему должен мы?
Я не согласен с тем, что мы должны знать причину. Если вы хотите узнать причину, Расмус может ответить на ваш запрос по электронной почте. Лично меня эта причина волнует не больше, чем то, почему цикл C for имеет такой синтаксис.






Это языковое дизайнерское решение, который давно сделали создатели PHP. Вы можете спросить создателя PHP Расмуса Лердорфа (https://en.wikipedia.org/wiki/Расмус_Лердорф).
Однако есть несколько веских причин, по которым я могу подумать о разделении $_POST и $_FILES.
Из документов:
The global $_FILES will contain all the uploaded file information. [...] Files will, by default be stored in the server's default temporary directory, unless another location has been given with the upload_tmp_dir directive in php.ini. The server's default directory can be changed by setting the environment variable TMPDIR in the environment in which PHP runs. Setting it using putenv() from within a PHP script will not work. This environment variable can also be used to make sure that other operations are working on uploaded files, as well.
Массив $_FILES содержит такую информацию, как имя, тип, размер, временное имя, информацию об ошибке, временное местоположение и так далее. Таким образом, для файла требуется много информации, и он имеет отдельные данные, хранящиеся в каком-то временном месте.
Массив $_POST в основном содержит отправленные текстовые строки. Поэтому я предполагаю, что проектное решение было принято только потому, что полезно четко разделить эти переменные.
На самом деле на это нет ответа, за исключением того, что PHP был разработан много лет назад. Именно так это и работает — суперглобальная переменная $_POST содержит данные поля сообщения, $_FILES содержит метаданные ввода файла. Они могли бы сделать другой выбор 20 с лишним лет назад, но не сделали этого.