- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/php_parser.php
- Класс: PHPParser
- Вызов: PHPParser::CheckForComponent
static function CheckForComponent($str)
{
if(mb_substr($str, 0, 5) == ""."php")
$str = mb_substr($str, 5);
else
$str = mb_substr($str, 2);
$str = mb_substr($str, 0, -2);
$bSlashed = false;
$bInString = false;
$arAllStr = array();
$new_str = "";
$string_tmp = "";
$quote_ch = "";
$i = -1;
$length = mb_strlen($str);
while($i < $length-1)
{
$i++;
$ch = mb_substr($str, $i, 1);
if(!$bInString)
{
if($string_tmp!="")
{
$arAllStr[] = $string_tmp;
$string_tmp = "";
$new_str .= chr(1).(count($arAllStr)-1).chr(2);
}
//comment
if($ch == "/" && $i+1 < $length)
{
$ti = 0;
if(mb_substr($str, $i + 1, 1) == "*" && ($ti = mb_strpos($str, "*/", $i + 2))!==false)
$ti += 2;
elseif(mb_substr($str, $i + 1, 1) == "/" && ($ti = mb_strpos($str, "n", $i + 2))!==false)
$ti += 1;
if($ti)
$i = $ti;
continue;
}
if($ch == " " || $ch == "r" || $ch == "n" || $ch == "t")
continue;
}
if($bInString && $ch == "\" && !$bSlashed)
{
$bSlashed = true;
continue;
}
if($ch == """ || $ch == "'")
{
if($bInString)
{
if(!$bSlashed && $quote_ch == $ch)
{
$bInString = false;
continue;
}
}
else
{
$bInString = true;
$quote_ch = $ch;
continue;
}
}
$bSlashed = false;
if($bInString)
{
$string_tmp .= $ch;
continue;
}
$new_str .= $ch;
}
if($pos = mb_strpos($new_str, "("))
{
$func_name = mb_substr($new_str, 0, $pos + 1);
if(preg_match("/^(\$[A-Z_][A-Z0-9_]*)(\s*=\s*)/i", $func_name, $arMatch))
{
$var_name = $arMatch[1];
$func_name = mb_substr($func_name, mb_strlen($arMatch[0]));
}
else
{
$var_name = "";
}
$func_name = preg_replace("'\$GLOBALS\[("|\')(.+?)("|\')\]'s", "$\2", $func_name);
switch(mb_strtoupper($func_name))
{
case '$APPLICATION->INCLUDEFILE(':
$params = mb_substr($new_str, $pos + 1);
$arParams = PHPParser::GetParams($params);
$arIncludeParams = array();
if(preg_match("/^array\(/i", $arParams[1]))
{
$arParams2 = PHPParser::GetParams(mb_substr($arParams[1], 6));
foreach($arParams2 as $el)
{
$p = mb_strpos($el, "=>");
$el_ind = PHPParser::ReplString(mb_substr($el, 0, $p), $arAllStr);
$el_val = mb_substr($el, $p + 2);
if(preg_match("/^array\(/i", $el_val))
{
$res_ar = array();
$arParamsN = PHPParser::GetParams(mb_substr($el_val, 6));
foreach($arParamsN as $param)
{
$res_ar[] = PHPParser::ReplString($param, $arAllStr);
}
$arIncludeParams[$el_ind] = $res_ar;
}
else
{
$arIncludeParams[$el_ind] = PHPParser::ReplString($el_val, $arAllStr);
}
}
}
return array(
"SCRIPT_NAME" => PHPParser::ReplString($arParams[0], $arAllStr),
"PARAMS" => $arIncludeParams,
"VARIABLE" => $var_name,
);
}
}
return false;
}