preg_match для <? php, <? и / или?> - PullRequest
2 голосов
/ 30 мая 2010

Я не очень знаком с regEx и пытаюсь найти регулярное выражение preg_match для поиска любой из следующих строк в файле, и если оно будет найдено, оно остановит его. У меня уже есть настройки fopen и fgets и fclose. Мне просто нужно использовать регулярное выражение внутри preg_match для следующих тегов php:

<?php <? ?>

, поэтому, если preg_match возвращает 1, этот файл будет пропущен, а не загружен. Я использую массив $ _FILES, чтобы загрузить его по почте, поэтому я надеюсь, что смогу использовать переменную $ _FILES ['file'] ['tmp_name'] для чтения файла.

Спасибо за вашу помощь:)

EDIT

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-ФАЙЛ, мне нужно установить MIME TYPE: application / x-httpd-php в базе данных. ПОТОМУ ЧТО я также разрешаю загружать PHP-файлы в некоторых случаях. Так что, надеюсь, код, который я разместил выше, теперь будет более понятен всем вам.

Может кто-нибудь помочь мне с preg_match регулярным выражением для этого, пожалуйста?

Ответы [ 3 ]

2 голосов
/ 30 мая 2010

Если вы хотите проанализировать файл, попробуйте следующее:

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 голосов
/ 30 мая 2010
/(?:<\?(?!xml)|\?>)/

(15 символов)

1 голос
/ 30 мая 2010
\?>|<\?((?=php)|(?!\w))
...