[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Нужен совет по использованию preg_match
Страницы: 1, 2
AlexGy
Как новичек в php, уперся в неразрешимую для себя проблему, решение которой для людей знающих явно лежит на поверхности.
Суть ее в следующем: есть готовый, работающий скрипт формирования карты сайта с выводом в качестве линка title страницы, НО только в том случае, если титл страницы прописан традиционным способом. У меня же, на каждой странице, присутствует такая конструкция:

<title><?php echo $page_title ?></title>

Как результат, отображается только имя файла.

Вот сам код:


<?php

$stime = gettimeofday();

/* some preliminaries... */
$root = getcwd();

$pre = explode("/", $_SERVER['REQUEST_URI']);
array_pop($pre);
$prefix = join("/", $pre);

/* Uncomment the 2 lines below to create a tree of all files and directories on your webserver if the script
* is in a subdirectory */
/* $root = str_replace($prefix, "", $root); */
/* $prefix = ""; */


$root .= "/";

/* Display server name and directory */
echo "<table cellspacing='0' cellpadding='0' style=\"padding:0; margin:0; border:none;\">\n";

function get_extension($name) {
$array = explode(".", $name);
$retval = strtolower(array_pop($array));
return $retval;
}

function in_array_regex($string, $array) {
reset($array);
foreach($array as $value) {
if((strpos($value, '*') === 0) || (strpos($value, '?') === 0))
$value = ".".$value;
if(preg_match("/".$value."/i", $string)) return true;
}
return false;
}

function get_title($filename) {
$retval = "";

$handle = fopen($filename, "r");
$head = fread($handle, 4096);
preg_match(";<title>(.+)</title>;", $head, $matches);
if(sizeof($matches) == 2) {
$retval = trim($matches[1]);
}
fclose($handle);

return $retval;
}

/* Recursion, here we go.. */
function list_dir($chdir) {
/* some globals, some cleaning */
global $root, $prefix, $showsize, $showtitle, $display, $excludedir, $excludefile;
unset($sdirs);
unset($sfiles);
chdir($chdir);

/* open current directory */
$handle = opendir('.');
/* read directory. If the item is a directory, place it in $sdirs, if it's a filetype we want
* and not this file, put it in $sfiles */

while ($file = readdir($handle))
{
if(is_dir($file) && $file != "." && $file != ".." && !in_array($file, $excludedir))
$sdirs[] = $file;
elseif(is_file($file) && array_key_exists(get_extension($file), $display)
&& !
in_array_regex($file, $excludefile))
$sfiles[] = $file;
}

/* count the slashes to determine how deep we're in the directory tree and how many
* nice bars we need to add */

$dir = getcwd();
$dir1 = str_replace($root, "", $dir."/");
$count = substr_count($dir1, "/") + substr_count($dir1, "\\");

/* display directory names and recursively list all of them */
if(is_array($sdirs)) {
sort($sdirs, SORT_STRING);
reset($sdirs);

for($y = 0; $y < sizeof($sdirs); $y++) {
echo "<tr><td style=\"padding:0; margin:0; border:none;\">";
for($z = 1; $z <= $count; $z++)
echo "<img align=\"absmiddle\" src=\"img/vertical.gif\">   ";
if(is_array($sfiles) || ($y < (sizeof($sdirs) - 1)))
echo "<img align=\"absmiddle\" src=\"img/verhor.gif\">";
else
echo "<img align=\"absmiddle\" src=\"img/verhor1.gif\">";
echo "<img align=\"absmiddle\" src=\"img/folder.gif\">\n";
list_dir($dir."/".$sdirs[$y]);
}
}


chdir($chdir);

/* iterate through the array of files and display them */
if(is_array($sfiles)) {
sort($sfiles, SORT_STRING);
reset($sfiles);

$sizeof = sizeof($sfiles);

/* what file types shall be displayed? */
for($y = 0; $y < $sizeof; $y++) {
echo "<tr><td style=\"padding:0; margin:0; border:none;\">\n";
for($z = 1; $z <= $count; $z++)
echo "<img align=\"absmiddle\" src=\"img/vertical.gif\">   ";
if($y == ($sizeof-1))
echo "<img align=\"absmiddle\" src=\"img/verhor1.gif\">";
else
echo "<img align=\"absmiddle\" src=\"img/verhor.gif\">";
echo "<img align=\"absmiddle\" src=\"";
echo $display[get_extension($sfiles[$y])];
echo "\"> ";
$title = "";
if($showtitle == 1) {
$title = get_title("$root$dir1$sfiles[$y]");
}
if($title == "") {
$title = $sfiles[$y];
}
echo "<a href=\"http://".$_SERVER['SERVER_NAME']."$prefix/$dir1$sfiles[$y]\" ";
echo "alt=\"".date("r", filemtime($sfiles[$y]))."\">$title</a>\n";
if($showsize == 1) {
$fsize = @filesize($sfiles[$y])/1024;
printf(" (%.2f kB)", $fsize);
}
echo "</td></tr>\n";
}
echo "<tr><td style=\"padding:0; margin:0; border:none;\">\n";

}
}


list_dir($root);

echo "</table>\n";

?>


Опытным путем удалось выяснить, что все кроется в одной строке:
preg_match(";<title>(.+)</title>;", $head, $matches);

вот только какие изменения здесь внести, чтобы title корректно выводился в моем случае ума не приложу.

Буду очень признателен за подсказку, и если нужна какая-то дополнительная информация, сообщу незамедлительно!

Заранее спасибо!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.