代码之家  ›  专栏  ›  技术社区  ›  SoLoGHoST

<?php、<?和/或?>

  •  2
  • SoLoGHoST  · 技术社区  · 16 年前

    fopen fgets fclose 设置我只需要在preg\u匹配中为以下php标记使用正则表达式:

    <?php <? ?>

    因此,如果preg\u match返回1,则将跳过此文件而不上载它。我使用$\u FILES数组通过post上传它,所以我希望可以使用$\u FILES['file']['tmp\u 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

    3 回复  |  直到 16 年前
        1
  •  2
  •   Matteo Riva    16 年前
    /(?:<\?(?!xml)|\?>)/
    

    (15个字符)

        2
  •  2
  •   chelmertz user1604064    16 年前

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

    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;
    }
    

        3
  •  1
  •   ZyX    16 年前
    \?>|<\?((?=php)|(?!\w))
    
    推荐文章