Это общая проблема.
На всех современных компьютерах есть каталог временных файлов. В Linux / Unix это /tmp
, в Windows обычно c:\temp
. Установка ОС будет устанавливать разрешения для этого каталога, чтобы каждый мог писать туда файлы, но только привилегированные пользователи могут удалять файлы, которые им не принадлежат. Это где PHP захочет поместить загруженный файл; Ваше приложение затем должно переместить его в другое место (это цель функции move_uploaded_file()
). PHP под Windows может нуждаться в upload_tmp_dir
, фактически установленном в файле php.ini
.
Получив загруженный файл, вы можете переместить его в любое удобное для вас место, в том числе туда, где веб-сервер может прочитать его для обслуживания. Самая большая проблема в том, что этот каталог очень легко поместить в вашу кодовую базу. Не делай этого . Как только вы сделаете что-либо кроме редактирования файлов в каталоге, из которого они обслуживаются, это будет проблематично. Поверьте мне: я несколько раз сталкивался с этим в унаследованном коде. Легко позволить вашему веб-серверу загружать файлы из местоположения за пределами вашей кодовой базы.
Другой альтернативой является создание сценария загрузки. Таким образом, файл вообще не должен обслуживаться веб-сервером. Одним из недостатков является то, что вы не можете использовать MIME-перевод веб-сервера, но это позволяет вам контролировать, какие типы файлов изображений разрешены .