Суть ее в следующем: есть готовый, работающий скрипт формирования карты сайта с выводом в качестве линка 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 корректно выводился в моем случае ума не приложу.
Буду очень признателен за подсказку, и если нужна какая-то дополнительная информация, сообщу незамедлительно!
Заранее спасибо!