PHP - Вопрос о загрузке и загрузке файла изображения - PullRequest
2 голосов
/ 27 июля 2010

Я прочитал следующий урок " Загрузка файлов на сервер с использованием PHP " и имею несколько вопросов, связанных с темами.

Q1> В уроке упоминается, что

«Обратите внимание, что PHP должен иметь доступ на запись к $ uploadDir, иначе загрузка не удастся»

Для меня я разрешаю пользователю загружать файл только после того, как пользователь войдет в систему.Веб-сайт.Если мы установим это разрешение $ uploadDir равным 777, то каждый может иметь разрешение на запись в эту папку.Как избежать этой проблемы?

Кроме того, я использую WAMP в качестве тестового стенда. Могу ли я имитировать тот же случай, что и на реальном веб-сервере?

Q2> Чтобы предотвратить предотвращение прямого доступа,в учебном пособии упоминается:

"Лучшим подходом является удаление каталога загрузки от вашего веб-корня. Например, веб-корень для этого сайта: / home / arman198 / public_html / для предотвращения прямойсписок я могу установить каталог загрузки /home/arman198/upload/."

Теперь моя проблема заключается в том, как я могу отображать загруженные изображения на других страницах сайта.Поскольку загрузка больше недоступна напрямую?Мне нужно отобразить загруженное изображение и динамически сохранить личный выстрел в голову на другой странице сайта.Возможно ли это?

Спасибо

Ответы [ 3 ]

2 голосов
/ 27 июля 2010

Это общая проблема.

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

Получив загруженный файл, вы можете переместить его в любое удобное для вас место, в том числе туда, где веб-сервер может прочитать его для обслуживания. Самая большая проблема в том, что этот каталог очень легко поместить в вашу кодовую базу. Не делай этого . Как только вы сделаете что-либо кроме редактирования файлов в каталоге, из которого они обслуживаются, это будет проблематично. Поверьте мне: я несколько раз сталкивался с этим в унаследованном коде. Легко позволить вашему веб-серверу загружать файлы из местоположения за пределами вашей кодовой базы.

Другой альтернативой является создание сценария загрузки. Таким образом, файл вообще не должен обслуживаться веб-сервером. Одним из недостатков является то, что вы не можете использовать MIME-перевод веб-сервера, но это позволяет вам контролировать, какие типы файлов изображений разрешены .

2 голосов
/ 27 июля 2010

Для второго вопроса вы можете использовать PHP-скрипт для прямого доступа к каталогу. Давайте назовем это image.php. Предположим, что он может принимать идентификатор параметра, например image.php?id=image_id. В этом файле вы можете получить идентификатор, используя суперглобальный массив $_GET. Затем вы можете искать изображения с этим идентификатором и просто отправить его в ответ.

Первый, я не уверен, но, возможно, поиграйтесь с файлом .htaccess.

0 голосов
/ 27 июля 2010

И для первого вопроса попробуйте установить права доступа 775. Это должно позволить PHP записывать файл в каталог, не предоставляя широкой публике права на запись.

...