Pull to refresh

Правильный ответ в IT-тесте

На днях проходил тест по языку PHP на одном известном русскоязычном ресурсе. Многие вопросы были понятны, а ответы на них — очевидны. Но были и такие, которые заставляли задуматься, найти ответ, а потом… снова задуматься. Об одном из таких вопросов я и хочу рассказать.

Где находится файл загружаемый на сервер при помощи PHP скрипта.

  • Файл находится в оперативной памяти.
  • Файл хранится во временной директории и удаляется после выполнения скрипта.
  • PHP не может загружать файлы на сервере
  • Файл хранится в корне сайта и удаляется после выполнения скрипта.

орфография и пунктуация сохранены, возможен выбор только 1 варианта ответа

Что мы знаем о загрузке файлов PHP скриптом?
  1. PHP может загружать файлы;
  2. PHP может удалять файлы;
  3. методом POST файлы загружаются во временную папку;
  4. временную папку возможно сменить на другую;
  5. по окончанию работы скрипта загруженные файлы удаляются из временной папки автоматически;
  6. методом PUT загрузкой файлов управляет скрипт, который может сохранять их в любом месте;
  7. во время загрузки файл, очевидно, некоторое время находится в оперативной памяти и клиента и сервера.


Для начала мы исключаем заведомо ложный вариант: «PHP не может загружать файлы на сервере».

«Файл находится в оперативной памяти.»
Возможен ли вариант, когда загружаемый файл попадет на сервер минуя ОЗУ? Адекватных возможностей реализовать это я не нашел.

Вывод: ответ имеет смысл и истинен.

«Файл хранится во временной директории и удаляется после выполнения скрипта.»
Если отправитель использовал метод POST (стандартная ситуация), то PHP позаботится о том, чтобы файл сохранился в папке для временных файлов. Скрипт должен переместить этот в файл либо удалить его самостоятельно, но, даже если этого не произойдет, файл будет автоматически удален из папки для временных файлов по завершению работы скрипта.

Вывод: ответ имеет смысл и истинен.

«Файл хранится в корне сайта и удаляется после выполнения скрипта.»
Сохранять файлы в корне сайта, особенно когда они приходят извне, а не создаются самим скриптом — крайне сомнительная практика. Однако, если у нас есть права на запись в корень нашего сайта, мы можем свободно сохранять туда файлы, полученные методом PUT.

Также возможно установить директиву upload_tmp_dir, указав в качестве значения путь к корню сайта, что позволит загружать файлы методом POST прямо в корень сайта.

Также ничто (кроме здравого смысла) не запрещает содержать сам сайт во временной папке или устанавливать пусть к системной временной папке равным пути к корню сайта.

По окончанию работы скрипта файлы могут быть удалены скриптом или автоматически.

Вывод: смысл ответа сомнительный, но технически легко реализуемый.

Финишная прямая

Исключаем последний вариант с неадекватно настроенным сервером. У нас остается 2 правильных ответа, но один из них — ответ на вопрос теста, а второй — ответ на какой-то другой вопрос.

Анализируем сам вопрос

«Где находится файл загружаемый на сервер при помощи PHP скрипта.»
Видим, что в конце предложения стоит точка, а не знак вопроса. Значит это — утверждение или опечатка. Замечаем, что после слова «файл» отсутствует запятая. Опечатка?

«Где находится файл»
Файл может находится как в оперативной памяти, так и в папке.

«файл загружаемый на сервер»
Файл, загружаемый на сервер, очевидно, находится на стороне отправителя. Мы не знаем точно его расположения, но уверены, что он побывает в оперативной памяти в процессе загрузки. Файл, уже загруженный на сервер, очевидно, находится на сервере, однако вопрос — о файле загружаемом, т.е. о файле-источнике.

«загружаемый на сервер при помощи PHP скрипта»
С помощью скрипта файлы загружается методом PUT (метод POST загружает файл автоматически). Скрипт не обязан записывать содержимое файла из потока ввода в физический файл на сервере. Также скрипт может самостоятельно инициировать загрузку файла из удаленного источника при помощи функции fopen() и обработать его в оперативной памяти, не сохраняя на сервере.

Итог

Несмотря на то, что ответ «Файл хранится во временной директории и удаляется после выполнения скрипта.» дает верную информацию о работе PHP с загружаемыми файлами, по моему мнению, непосредственно на заданный в тесте вопрос отвечает фраза «Файл находится в оперативной памяти.». Я выбираю именно этот вариант.

P.S. Наличие орфографических ошибок в тексте вопроса оставляет тревожное ощущение, что выбранный мной вариант ответа может оказаться неверным по мнению автора теста, т.к. я мог понять вопрос неправильно.

Используемые источники информации:

php.net/manual/ru/features.file-upload.post-method.php
php.net/manual/ru/features.file-upload.put-method.php
php.net/manual/ru/function.unlink.php
php.net/manual/en/function.fopen.php
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.