检测小写和大写的PHP之间

时间:2014-01-05 07:31:23

标签: php

我正在使用此脚本从我的服务器中删除图片。但同时我想保护我服务器中的文件。不小心删除但我注意到,如果我输入文件index.pHpindex.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>";
}
}
?>

2 个答案:

答案 0 :(得分: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 :(得分:1)

问题在于:

if ($thefile=="$thefile")

好像你的第一个文件检查条件是假的,而不是第二个条件是

if ($thefile=="$thefile")

始终为true,因此它将取消链接文件 在第一个条件之前添加一行,如下所示

$thefile = strtolower($thefile);