Я также могу порекомендовать следующее:
is_uploaded_file
Возвращает TRUE, если файл с именем filename был загружен через HTTP POST.Это полезно, чтобы гарантировать, что злоумышленник не попытался заставить скрипт работать с файлами, над которыми он не должен работать - например, /etc/passwd. Такая проверка особенно важна, если естьвероятность того, что все, что сделано с загруженными файлами, может раскрыть их содержимое пользователю или даже другим пользователям в той же системе.
basename()
функция для получения только имени файла, такого как basename(c:/fakepath/something.avi); // will return something.avi
поскольку некоторые люди пытаются обмануть компьютер, давая имена файлов, похожие на каталоги.
Подробнее о basename()
:
При загрузкефайл, вы хотите переместить файл в каталог, который вы хотите, например, в папку /uploads/
, но злонамеренный пользователь может назвать файл, например, something/hello.jpg
, а затем при перемещении файла с помощью move_uploaded_file($source,$destionation)
ваш $destination
будет /uploads/something/hello.jpg
, и это вызывает проблемы.Чтобы убедиться, что вы получили только правильное имя файла, вам нужно использовать функцию basename()
, которая возвращает hello.jpg
и т. Д.
$file_name = basename($_FILES["upload_ctrl"]["name"]);
if(!move_uploaded_file($_FILES["upload_ctrl"]["tmp_name"],"uploads/".$file_name))
echo "Opps I cannot upload the file";
Для использования basename
посетите страницу: http://php.net/manual/en/function.basename.php