我无法弄清楚此代码中的错误以及如何解决此错误。
报告的错误是:
注意:未定义的偏移量:第53行的/Applications/XAMPP/xamppfiles/htdocs/bat/rd-search.php中的1是这段代码:
$final_result[$file_count]['page_title'][] = $page_title[1];
代码是:
$contents = file_get_contents($file);
preg_match("/\<title\>(.*)\<\/title\>/", $contents, $page_title); //getting page title
if (preg_match("#\<body.*\>(.*)\<\/body\>#si", $contents, $body_content)) { //getting content only between <body></body> tags
$clean_content = strip_tags($body_content[0]); //remove html tags
$clean_content = preg_replace('/\s+/', ' ', $clean_content); //remove duplicate whitespaces, carriage returns, tabs, etc
$found = strpos_recursive(mb_strtolower($clean_content, 'UTF-8'), $search_term);
$final_result[$file_count]['page_title'][] = $page_title[1];
$final_result[$file_count]['file_name'][] = preg_replace("/^.{3}/", "\\1", $file);
}
for ($j = 0; $j < count($template_tokens); $j++) {
if (preg_match("/\<meta\s+name=[\'|\"]" . $template_tokens[$j] . "[\'|\"]\s+content=[\'|\"](.*)[\'|\"]\>/", $contents, $res)) {
$final_result[$file_count][$template_tokens[$j]] = $res[1];
}
}
答案 0 :(得分:0)
这是因为preg_match
没有返回匹配项。
您可以通过在下方添加一行来解决此问题,例如:
preg_match("/\<title\>(.*)\<\/title\>/", $contents, $page_title); //getting page title
$page_title = empty($page_title) ? [0 => '', 1 => ''] : $page_title;
如果preg_match
无法获得标题的任何匹配,这将只创建一个0和1作为索引的数组。
另一种方法是在尝试访问它之前检查$page_title
的值。这种方法意味着每次要访问此变量时都必须创建一个检查,而第一种方法则不会,因为索引具有空值。
if (!empty($page_title) {
$final_result[$file_count]['page_title'][] = $page_title[1];
}