Hallo,
ich benutze Cutenews für meine Seite und heute habe ich zum ersten Mal den Mod-Rewrite Hack ausprobiert. Er ermöglicht mir die Links Suchmaschinenfreundlicher zu gestalten:
index.php/t=title => index/comments/title
Allerdings habe ich zwei News auf der gleichen Seite, ohne den Hack funktioniert alles wunderbar. Ich kann Kommentare unanbhängig voneinander verfassen und senden.
Ohne Hack sieht es so aus:
<?PHP
$template = "blog";
$number = "2";
$category = "111";
include("post/show_news.php");
?>
Mit Hack so:
<?PHP
$template = "blog";
$number = "2";
$category = "110";
ob_start();
$path_to_data = "post/data/";
$url = $_GET['url'];
$test = find_archive(title_to_id($url));
$id = title_to_id($url);
$ucat = title_to_ucat($url);
include("post/show_news.php");
function replace_title($title){
$letter_replacements = array('ö' => 'oe', 'ä' => 'ae');
$result = strtolower(strip_tags(html_entity_decode($title)));
$result = strtr($result, $letter_replacements);
$result = preg_replace('/\W/', "-", strip_tags($result));
return $result;
}
function title_to_id($title){
global $path_to_data;
if($handle = opendir($path_to_data."/archives"))
while (false !== ($file = readdir($handle))){
if($file != "." and $file != ".." and eregi("news", $file)){
$files_arch[] = $path_to_data."/archives/$file";
}
}
$files_arch[] = $path_to_data."/news.txt";
foreach($files_arch as $file){
$all_news = file($file);
foreach($all_news as $news_line){
$news_arr = explode("|", $news_line);
if(replace_title($news_arr[2]) == $title){
return $news_arr[0];
}
}
}
}
function title_to_ucat($title){
global $path_to_data;
$all_news = file($path_to_data."/news.txt");
foreach($all_news as $news_line){
$news_arr = explode("|", $news_line);
if(replace_title($news_arr[2]) == $title){
return $news_arr[6];
}
}
}
function find_archive($id){
global $path_to_data;
if($handle = opendir($path_to_data."/archives"))
while (false !== ($file = readdir($handle))){
if($file != "." and $file != ".." and eregi("news", $file)){
$files_arch[] = $path_to_data."/archives/$file";
}
}
$files_arch[] = $path_to_data."/news.txt";
foreach($files_arch as $file){
$all_news_db = file("$file");
foreach($all_news_db as $news_line){
$news_arr = explode("|", $news_line);
if($news_arr[0] == $id){
if(ereg("([[:digit:]]{0,}).news.arch", $file, $regs)){ $archive = $regs[1]; }
return $archive;
}
}
}
}
function id_to_title($id, $archiv = false, $type, $page = ''){
global $path_to_data;
if($archiv){
$all_news = file($path_to_data."/archives/".$archiv.".news.arch");
}
else{
$all_news = file($path_to_data."/news.txt");
}
foreach($all_news as $news_line){
$news_arr = explode("|", $news_line);
if($news_arr[0] == $id){
$title = replace_title($news_arr[2]);
if($type == "commentspage"){
return "commentspage/".$page."/".$title.".html";
}
else
return $type."/".$title.".html";
}
}
}
$show_news = ob_get_contents();
ob_get_clean();
$script_file = end($script_url = explode("/", $HTTP_SERVER_VARS['SCRIPT_NAME']));
$path = substr($HTTP_SERVER_VARS['SCRIPT_NAME'], 0, -strlen($script_file));
$find = array( /*post*/ "#".$script_file."?subaction=showfull&id=(.*?)&archive=&start_from=&ucat=(.*?)&#ie",
/*postcomments*/ "#".$script_file."?subaction=showcomments&id=(.*?)&archive=&start_from=&ucat=(.*?)&#ie",
/*postpage*/ "#".$script_file."?start_from=(.*?)&ucat=&archive=&subaction=&id=(.*?)&#i",
/*archiveindex*/ "#".$script_file."?archive=(.*?)&subaction=list-archive#i",
/*archive*/ "#".$script_file."?subaction=showfull&id=(.*?)&archive=(.*?)&start_from=&ucat=(.*?)&#ie",
/*archivepage*/ "#".$script_file."?start_from=(.*?)&ucat=&archive=(.*?)&subaction=list-archive&id=&#i",
/*archivecomments*/ "#".$script_file."?subaction=showcomments&id=(.*?)&archive=(.*?)&start_from=&ucat=(.*)&#ie",
/*searchnews*/ "#".$script_file."?misc=search&subaction=showfull&id=(.*?)&archive=&cnshow=news&ucat=(.*?)&start_from=&#ie",
/*searcharchives*/ "#".$script_file."?misc=search&subaction=showfull&id=(.*?)&archive=(.*?)&cnshow=news&ucat=(.*?)&start_from=&#ie",
/*ncommentspage*/ "#".$script_file."?comm_start_from=(.*?)&archive=&subaction=showcomments&id=(.*?)&ucat=(.*?)&#ie",
/*acommentspage*/ "#".$script_file."?comm_start_from=(.*?)&archive=(.*?)&subaction=showcomments&id=(.*?)&ucat=(.*?)&#ie",
);
$replace = array( "id_to_title('\1', false, 'post')",
"id_to_title('\1', false, 'comments')",
"postpage/\1.html",
"archiveindex/\1.html",
"id_to_title('\1', '\2', 'archive')",
"archivepage/\2/\1.html",
"id_to_title('\1', '\2', 'comments')",
"id_to_title('\1', false, 'post')",
"id_to_title('\1', '\2', 'archive')",
"id_to_title('\2', false, 'commentspage', '\1')",
"id_to_title('\3', '\2', 'commentspage', '\1')",
);
$show_news = preg_replace($find, $replace, $show_news);
$show_news = str_replace("&url=".$url, '', $show_news);
if(!file_exists('.htaccess')){
$htaccess = "RewriteEngine On\n";
$htaccess .= "RewriteBase ".$path."\n\n";
$htaccess .= "RewriteRule ^post/(.*).html(.*)$ ".$script_file."?subaction=showfull&url=$1$2 [L,NC]\n";
$htaccess .= "RewriteRule ^postpage/(.*).html(.*)$ ".$script_file."?start_from=$1$2 [L,NC]\n\n";
$htaccess .= "RewriteRule ^comments/(.*).html(.*)$ ".$script_file."?subaction=showcomments&url=$1$2 [L,NC]\n";
$htaccess .= "RewriteRule ^commentspage/(.*)/(.*).html(.*)$ ".$script_file."?comm_start_from=$1&subaction=showcomments&url=$2$3 [L,NC]\n\n";
$htaccess .= "RewriteRule ^archiveindex/(.*).html(.*)$ ".$script_file."?archive=$1&subaction=list-archive$2 [L,NC]\n";
$htaccess .= "RewriteRule ^archive/(.*).html(.*)$ ".$script_file."?subaction=showfull&url=$1$2 [L,NC]\n";
$htaccess .= "RewriteRule ^archivepage/(.*)/(.*).html(.*)$ ".$script_file."?start_from=$2&archive=$1&subaction=list-archive$3 [L,NC]";
$file = fopen(".htaccess", "w");
fwrite($file, $htaccess);
fclose($file);
}
echo $show_news;
?>
Nun bekomme ich die Fehlermeldung:
Fatal error: Cannot redeclare replace_title() (previously declared in /data/apache/users/kilu.de/toast/www/index.php:18) in /data/apache/users/kilu.de/toast/www/index.php on line 188
Zwei Funktionen treffen aufeinander und es kommt zum Fehler. Gibt es eine Möglichkeit den Fehler zu beheben?