2014-01-05 4 views
1

Я использую этот скрипт для удаления изображения с моего сервера. Но в то же время я хочу защитить файлы на своем сервере. Не случайно удалить, но я заметил, что если я набрал файл index.pHp или index.Php удален с моего сервера. Хотя настройка не удаляет, почему php или этот метод не знают между строчными и прописными буквами.Обнаружение между строчными и верхними регистрами php

Что не сделано правильно?

<?php 
error_reporting (0); 
$thefile = $_GET ['filetodel']; 
$filename = "$thefile"; 
//$filename = "picture1.jpg"; 

/*protect some files*/ 
if ($thefile=='index.php' or $thefile=='INDEX.PHP' or $thefile=='UPLOADS.ZIP' or $thefile=='uploads.zip' or $thefile=='del.php'or $thefile=='DEL.PHP' or $thefile==NULL or $thefile=='.htaccess' or $thefile=='.HTACCESS') 
{ 
exit("<h2>cannot delete $thefile</h2>"); 
} 
if ($thefile=="$thefile") 
{ 
if (file_exists($filename)) 
{ 
unlink ("$thefile"); 
echo "<h2> file $thefile is delete</h2>"; 
} 
else 
{ 
echo "<h2>The<br>"; 
echo "$filename<br>"; 
echo "Does not exist</h2>"; 
} 
} 
?> 
+1

Знаете ли вы, что в будущем ваш код должен идти в вопросе, нет на стороннем сервисе. – meagar

ответ

4

Просто преобразовать вход в нижний регистр и проверить его один раз, а не беспокоиться о каждой возможной смеси случая:

if (strtolower($thefile) == 'index.php') { 
    // ... 
} 

для следующей итерации, вы можете хранить ваши файлы, защищенные в массиве:

$protected_files = array('index.php', 'uploads.zip', 'del.php', '.htaccess'); 

if (in_array(strtolower($thefile), $protected_files) || $thefile==NULL) { 
    // ... 
} 
+1

HTML не является отличным аргументом строки вывода для пользователя 63.6k. –

+0

Err, это копия его кода. Вызов 'exit' не имеет отношения к заданному вопросу. – meagar

+0

Спасибо, что это работает – manny

1

проблема здесь:

if ($thefile=="$thefile") 

как если ваше первое условие для проверки файла ложна, чем второе условие является

if ($thefile=="$thefile") 

что всегда верно, так что будет отвязать файл Кроме того, добавить одну строку, как показано ниже только до 1 состояния

$thefile = strtolower($thefile); 
+0

Спасибо за этот комментарий, я исправлю его – manny

+0

просто изменил ответ, чтобы удовлетворить ваше 1-е состояние – dev

Смежные вопросы