Доработка PHP скрипта

seomunch
На сайте с 21.11.2008
Offline
60
565

Итак, имеем простой PHP скрипт, который выполняет следующие функции:

1. Дергает все txt файлы из указанной папки

2. На главной странице выводит список (Название + при желании n число символов из текста)

3. При переходе по ссылке из названия - открывается этот текстовый документ с сохранием HTML тэгов, коих в нем не так много (картинка, выделения).

Что требуется:

1. При выводе на главной странице списка файлов (с текстом) заголовки (они же ссылки) имеют вид file.txt или нормальное название (если в txt есть тэг title), но с нижним подчеркиванием. Например: Дубленки_ Вот подчеркивание нужно убрать.

2. URL открываемого документа имеет корявый вид:


http://site.ru/modules.php?name=scriptname&way=bW2kdWxlcy7ob25kYS3maWxlcy5jZjc1LnR8dA==

Нужно сделать что то типа этого:

http://site.ru/modules.php?name=scriptname&way=name

где name - название открываемого файла (name.txt)

Ну может ещё что по мелочи. Кто сможет помочь? ЛС или Skype: munchrsc

Код скрипта:

<?php


//$f_show_nl - how much letters to show from each file in preview.
//$f_system - which operation system are used

if (!eregi("modules.php", $_SERVER['PHP_SELF'])) {
die ("You can't access this file directly...");
}


$f_show_nl="0"; //количество букв которые показывать из каждого файла первоначально. Поставить 0 если содержимое не надо выводить. Теоретически всё и так в титлах.
$f_convert_mode_on=1; //конвертить ли из кои в вин автоматом, или не трогать - жрет ресурсы
$f_system='Unix'; //закомментируйте эту строку для работы в Windows - localhost?
//$f_system='Windows'; //расскомментируйте эту строку для работы в Windows - localhost?


//ВСЕ файлы и директории которые Вы хотите показывать должны лежать в директории files
//Метод следующий
//Модуль проходит по всем директориям
//Если находит index.htm?, то выдирает из него титле, и начальный тект из боди, и выкидывает на экран со ссылкой
//если не находится такого файла, тогда модуль делает то же самое со всеми файлами из директории и спускается дальше
//$f_show_nl - количество букв которые показывать из каждого файла первоначально. Поставить 0 если содержимое не надо выводить. Теоретически всё и так в титлах.


require_once("mainfile.php");
$module_name = basename(dirname(__FILE__));
$pagetitle = "...";
$index=0;
global $way;
include("header.php");
opentable();
$f_startpath =realpath(".");
chdir("modules/honda/files");
$f_startpath2 =realpath(".");
if(isset($way)) {
$way=base64_decode($way);
$way=rawurldecode($way);
switch ($f_system) {
case 'Windows':
$way2=realpath($f_startpath.'\\\\'.$way);
$way=eregi_replace(addslashes($f_startpath).'\\\\',"",$way2);
break;
case 'Unix':
$way2=realpath($f_startpath.'/'.$way);
$way=eregi_replace(addslashes($f_startpath).'/',"",$way2);
break;
Default: echo 'Wrong choice of OS in config'; return;
}
$path_parts=pathinfo($way2);
$path_dir=$path_parts["dirname"];
if(strlen($path_dir)<strlen($f_startpath2)) {
echo 'Shit happens!';
return;
}
if(!eregi(addslashes($f_startpath2), $way2)) {
echo 'Shit happens.';
return;
}
echo fSetUpLinks(fGetBody("../../../".$way)).'<hr>';
};
if(!isset($way)) {
$f_content=fParseDir();
echo fSetUpLinks($f_content);
}
chdir("../../../");
closetable();


include("footer.php");
return;
function fParseDir() {
$f_htm=''; $f_html=''; $f_ind=0;
global $f_startpath, $f_show_nl;
$f_content='';
clearstatcache();
if (file_exists('index.htm')) {
$f_file='index.htm';
$f_ind=1;
}
else if (file_exists('index.html')) {
$f_file='index.html';
$f_ind=1;
}
else if (file_exists('default.htm')) {
$f_file='default.htm';
$f_ind=1;
}
else if (file_exists('default.html')) {
$f_file='default.html';
$f_ind=1;
}
if ($f_ind) {
$f_content=fsThrowFile($f_file);
return $f_content;
}
$handle=opendir(".");
$i=0;
while (($file=readdir($handle))!==false) {
if ($file=='.' OR $file=='..') continue;
if (is_file($file)) {
@list($f_n,$f_e) = spliti("\.",$file,2);
if(eregi("htm", $f_e)) $f_files[]=$file;
else if(eregi("txt", $f_e)) $f_files[]=$file;
}
if (is_dir($file)) {
$f_dirs[]=$file;
}
}
closedir($handle);
$f_fn=sizeof($f_files);
$f_fd=sizeof($f_dirs);
for($i=0;$i<$f_fn;$i++) {
$f_content.=fsThrowFile($f_files[$i]);
}
for($i=0;$i<$f_fd;$i++) {
chdir($f_dirs[$i]);
$f_content.='<table width="100%" border="1" cellpadding=3 cellspacing=1><tr><td>'.fParseDir().'</td></tr></table>';
chdir("../");
}
return $f_content;
}
function fGetTitle($filename) {
global $f_startpath, $f_show_nl;
global $f_convert_mode_on;
$f_res='';
$filename=str_replace("%20"," ",$filename);
$text=@file_get_contents($filename);
@list($start,$end) = spliti("</title>",$text,2);
@list($recycle,$FIND) = spliti("<title>",$start,2);
if (isset($FIND)) $f_res=$FIND; else $f_res=$filename;
$f_res.='_';
if ($f_convert_mode_on) {
$k=detect_cyr_charset(strip_tags($f_res));
if($k=='k') $f_res=convert_cyr_string($f_res, 'k', 'w');
}
return $f_res;
}
function fGetBody($filename) {
global $f_convert_mode_on;
$f_res='';
$filename=str_replace("%20"," ",$filename);
$text=@file_get_contents($filename);
if($text==FALSE) return 'File not found';
@list($start,$end) = spliti("</body>",$text,2);
@list($recycle,$FIND) = spliti("<body",$start,2);
@list($recycle,$FIND) = spliti(">",$FIND,2);
if (isset($FIND)) $f_res=$FIND; else $f_res=$text;
do {
$text=$f_res;
unset($FIND);
@list($start,$end) = spliti("<script",$text,2);
@list($recycle,$FIND) = spliti("</script>",$end,2);
if (isset($FIND)) $f_res=$start.$FIND; else $f_res=$text;
}
while (isset($FIND));
if ($f_convert_mode_on) {
$k=detect_cyr_charset(strip_tags($f_res));
if($k=='k') $f_res=convert_cyr_string($f_res, 'k', 'w');
}
return $f_res;
}
function fsThrowFile ($filename) {
global $f_startpath, $f_show_nl;
$ff=realpath(".");
$ff=substr($ff,strlen($f_startpath)+1,strlen($ff));

$f_content='<a href="'.$ff.'/'.$filename.'">'.fGetTitle($filename).'</a><br>';
$f_content.=substr(strip_tags(fGetBody($filename)),0,$f_show_nl).'<hr>';
return $f_content;
}
function fSetUpLinks ($f_content) {
global $f_startpath, $f_show_nl;
global $way; global $path_dir;
if(!isset($way)) $way='';
$path_parts=pathinfo($way);
$path_dir=$path_parts["dirname"];
if($path_dir!='')
$path_dir=$path_dir."/";
$f_content2=preg_replace_callback ("~(<a|<img)((.+?)(href|src)\s*=\s*(((\"|\')\s*([^\\7]*?)\s*(\\7))|([^\s|\"|\'|>]*))[^>]*)>~si", "fCandid", $f_content);
$f_content3=$f_content2;
return $f_content3;
}
function fCandid ($match) {
global $path_dir;
global $f_startpath, $f_startpath2;
global $way,$way2;
$a=$match[0];
if($match[4]=='name') return $a;
if($match[7]=='"' or $match[7]=="'") $f=$match[8]; else $f=$match[10];
if($f=='') return $a;
$stop=0;
if(stristr(substr($f,0,1),"#") or stristr($f,"http://") or stristr($f,"mailto:")) $stop=1;
@list($start,$end) = spliti("#",$f,2);
$fe='';
if (isset($end)) { $f=$start; $fe="#".$end;}
if(!$stop) {
$fwop=$f;
$f=$path_dir.$f;
$fenc=base64_encode($f);
$fthrow='modules.php?name=honda&way='.$fenc;
if(stristr($match[1],'<img')) {
$f=rawurlencode($f);
$fthrow=str_replace("%2F","/",$f);
$fthrow=str_replace("%5C","/",$fthrow);
}
@$f=eregi_replace(addslashes($fwop),$fthrow,$a);
}
else {
$f=$a;
}
return $f;
}
function detect_cyr_charset($str) {
define('LOWERCASE',3);
define('UPPERCASE',1);
$charsets = Array(
'k' => 0,
'w' => 0,
'd' => 0,
'i' => 0,
'm' => 0
);
for ( $i = 0, $length = strlen($str); $i < $length; $i++ ) {
$char = ord($str[$i]);
if ($char < 128 || $char > 256) continue;
if (($char > 159 && $char < 176) || ($char > 223 && $char < 242))
$charsets['d']+=LOWERCASE;
if (($char > 127 && $char < 160)) $charsets['d']+=UPPERCASE;
if (($char > 191 && $char < 223)) $charsets['k']+=LOWERCASE;
if (($char > 222 && $char < 256)) $charsets['k']+=UPPERCASE;
if ($char > 223 && $char < 256) $charsets['w']+=LOWERCASE;
if ($char > 191 && $char < 224) $charsets['w']+=UPPERCASE;
if ($char > 221 && $char < 255) $charsets['m']+=LOWERCASE;
if ($char > 127 && $char < 160) $charsets['m']+=UPPERCASE;
if ($char > 207 && $char < 240) $charsets['i']+=LOWERCASE;
if ($char > 175 && $char < 208) $charsets['i']+=UPPERCASE;
}
arsort($charsets);
return key($charsets);
}
?>
Банк времени (http://bank-vremeni.ru) - обменивайся своими возможностями с другими

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий