preg_match for <! - ?php,<?和/或? - >

时间:2010-05-30 15:35:22

标签: php regex preg-match

我对regEx不太熟悉,我正在尝试找到一个preg_match正则表达式来搜索文件中的以下任何字符串,如果发现它将停止它。我已经拥有fopenfgets以及fclose设置我只需要在preg_match中使用正则表达式来获取以下php标记:

<?php <? ?>

因此,如果preg_match返回1,则跳过此文件而不上传。我正在使用$ _FILES数组通过post上传它,所以我希望我可以使用$ _FILES ['file'] ['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);
    }
}

好的,我道歉,但实际上,我正在做的是我需要找到一个PREG MATCH。因为如果它是PHP FILE,我需要在数据库中将MIME TYPE设置为:application / x-httpd-php。因为我也允许在某些情况下上传PHP文件。所以我希望上面发布的代码对你们来说更有意义。

有人可以帮我找一个preg_match正则表达式吗?

3 个答案:

答案 0 :(得分:2)

/(?:<\?(?!xml)|\?>)/

(15个字符)

答案 1 :(得分:2)

如果要解析文件,请尝试以下操作:

function containsPhp($file) {
    if(!$content = file_get_contents($file)) {
        trigger_error('Not a file');
        return false;
    }
    foreach(token_get_all($content) as $token) {
        if(is_array($token) && in_array(current($token), array(T_OPEN_TAG, T_OPEN_TAG_WITH_ECHO))) {
            return true;                
        }
    }
    return false;
}

...除了检查php扩展(php,php5,phtml,inc等)。

答案 2 :(得分:1)

\?>|<\?((?=php)|(?!\w))