我对regEx不太熟悉,我正在尝试找到一个preg_match正则表达式来搜索文件中的以下任何字符串,如果发现它将停止它。我已经拥有fopen
和fgets
以及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
正则表达式吗?
答案 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))