关于一个php函数的查询
这个函数意味着什么关于一个php函数的查询,php,Php,这个函数意味着什么 function entre2v2($text,$marqueurDebutLien,$marqueurFinLien) { $ar0=explode($marqueurDebutLien, $text); $ar1=explode($marqueurFinLien, $ar0[1]); $ar=trim($ar1[0]); return $ar; } 在上述代码中,$text指的是文本文件内容,该内容由以下代码从表单帖子中获取: $text=file_get_cont
function entre2v2($text,$marqueurDebutLien,$marqueurFinLien)
{
$ar0=explode($marqueurDebutLien, $text);
$ar1=explode($marqueurFinLien, $ar0[1]);
$ar=trim($ar1[0]);
return $ar;
}
在上述代码中,$text指的是文本文件内容,该内容由以下代码从表单帖子中获取:
$text=file_get_contents($_POST['file']);
有人能描述一下提到的php函数吗?我不明白这两个变量是什么意思
$marqueurFinLien
$marqueurDebutLien
根据第一个答案,我试过了。但它显示出错误
Warning: Missing argument 3 for entre2v2(), called in C:\xampp\htdocs\php\test.php on line 5 and defined in C:\xampp\htdocs\php\test.php on line 13
Notice: Undefined variable: marqueurFinLien in C:\xampp\htdocs\php\test.php on line 18
Notice: Undefined offset: 1 in C:\xampp\htdocs\php\test.php on line 18
Warning: explode() [function.explode]: Empty delimiter in C:\xampp\htdocs\php\test.php on line 18
当我使用以下命令时:
<?
$text=file_get_contents('http://localhost/php/w.txt');
$name=entre2v2($text,"DB_USER', ',');");
echo($name);
echo("<br>");
function entre2v2($text,$marqueurDebutLien,$marqueurFinLien)
{
$ar0=explode($marqueurDebutLien, $text);
$ar1=explode($marqueurFinLien, $ar0[1]);
$ar=trim($ar1[0]);
return $ar;
}
?>
该函数显示为从输入$text
返回$marqueurDebutLien
和$marqueurFinLien
字符串之间的文本
e、 g
简言之,它看起来像是一种解析字符串的方法——我可以说,这是一种非常低效和脆弱的方法
$ar0 = explode($marqueurDebutLien, $text);
此行将使用$marqueurDebutLien
字符串作为分隔符,将$text中存储的字符串拆分为子字符串数组。然后它获取该数组的第二个元素(即,$marqueurDebutLien
)并再次将其打断:
$ar1 = explode($marqueurFinLien, $ar0[1]);
。。。现在使用$marquerfinlien
作为分隔符
根据定义,此数组的第一个元素是位于$marqueurDebutLien
和$marqueurFinLien
之间的原始字符串($text
)中的第一个字符串。它的修剪版本是函数返回的
你可能会问,为什么效率低下?实际上,这里有几个小问题可以很容易地改进:对explode
s的限制,因此只处理一小部分,立即返回trim
的结果,而不是将其存储在某个变量中
但事实上,整个方法是有缺陷的。看看这个:
function notSoMysticEntre2v2($text, $openingDelimiter, $closingDelimiter) {
$mark1 = strpos($text, $openingDelimiter);
if ($mark1 === FALSE) {
return null;
}
$mark2 = strpos($text, $closingDelimiter, $mark1);
if ($mark2 === FALSE) {
return null;
}
$data = substr($text, $mark1 + 1, $mark2 - $mark1 - 1);
return trim($data);
}
请注意,此函数比第一个函数更简单:如果没有开头分隔符,或者后面没有结尾分隔符,它将无法正确解析字符串(返回null
,作为错误标志) $firstLinkMarker和$lastLinkMarker如果有帮助的话……我想指出这一行代码:file\u get\u contents($\u POST['file'])代码>通过向该web文件发送POST http请求并传入文件路径(例如,操作系统中的某些内容),可以很容易地利用此漏洞。记住孩子们:总是清理用户生成的输入,不要相信它<代码>($text,“DB_USER',',');”代码>=>($text,'DB_USER',',')代码>。您在这里发送一个字符串,它需要两个分隔符。这两个函数是什么意思$marqueurFinLien$MarqueurDebutlien请参阅我对您的问题的原始评论。不过,它们的名字并不重要……它们可以被称为$BANAN和$badger,因为这会带来很大的不同。重要的是他们在做什么,我想说清楚。谢谢你让我说清楚。你能告诉我,这部分是什么意思$ar0=explode($marqueurDebutLien,$text)$ar1=爆炸($marquerfinlien,$ar0[1])$ar=修剪($ar1[0]);返回$ar;我是php的noob。我刚刚开始研究它。我知道这个答案需要很长时间才能写出,但当看到原始代码时,我还是忍不住写了出来。)当然,如果这些分隔符实际上只是字符,那么使用strtok
就更容易(更快)。
function notSoMysticEntre2v2($text, $openingDelimiter, $closingDelimiter) {
$mark1 = strpos($text, $openingDelimiter);
if ($mark1 === FALSE) {
return null;
}
$mark2 = strpos($text, $closingDelimiter, $mark1);
if ($mark2 === FALSE) {
return null;
}
$data = substr($text, $mark1 + 1, $mark2 - $mark1 - 1);
return trim($data);
}