我不是很熟悉的正则表达式的,我试图找到搜索任何一个文件中的以下字符串的正则表达式的preg_match,如果发现它会阻止它。我已经有fopen
和fgets
和fclose
设置我只需要使用正则表达式一个的preg_match内以下PHP标签:的preg_match为<?PHP,<?, and/or ?>
<?php
<?
?>
所以如果的preg_match返回1比这将跳过此文件,而不是上传它。我使用的$ _FILES数组通过后上传它,所以我希望我可以用$ _FILES [“文件”] [“tmp_name的值”]变量此通过文件阅读。
感谢您的帮助,这:)
编辑
if (in_array('application/x-httpd-php', $files[$filid]['mimetypes']) && ($_FILES[$value]['type'][$n] == 'application/octet-stream' || $_FILES[$value]['type'][$n] == 'application/octetstream'))
{
$file_extension = strtolower(substr(strrchr($_FILES[$value]['name'][$n], '.'), 1));
if ($file_extension == 'php')
{
// Reading the current php file to make sure it's a PHP File.
$fo = fopen($_FILES[$value]['tmp_name'][$n], 'rb');
while (!feof($fo))
{
$fo_output = fgets($fo, 16384);
// look for a match
if (preg_match([REG EX HERE], $fo_output) == 1)
{
$php = true;
break;
}
}
fclose($fo);
}
}
OK,我很抱歉,但实际上,我在做什么是我需要找到一个PREG匹配。因为如果它是一个PHP文件,我需要将数据库中的MIME TYPE设置为:application/x-httpd-php。因为我也允许在某些情况下上传PHP文件。所以希望我上面发布的代码对你现在更有意义。
有人可以请帮我一个preg_match
正则表达式吗?
听起来很奇怪。你为什么需要它? – 2010-05-30 15:45:44
所以你要拒绝它有'<?php'任何文件,''' or '?>?为什么?只是不要把它作为PHP文件来处理。 – Gumbo 2010-05-30 15:50:31
你如何处理它作为PHP文件?问题是我想知道它是否是上传的实际PHP文件...这是我必须检查它的内部,对吧?他们可以随时改变文件扩展名,这样就不会帮我任何...唯一的方法我能想到的是把文件中搜索'<?php',''', or '?>字符串。 – SoLoGHoST 2010-05-30 15:54:14