Problem: Short URLs und UPItoDB MOD
Verfasst: 18.06.2004 21:17
Hallo,
ich habe ein Problem in meinem Board beobachtet, bei dem ich nicht weiter komme.
Ich habe den "Unread Post Information to Database" MOD (UPItoDB) zusammen mit dem Short URLs MOD installiert.
Beim UPItoDB MOD werden alle von einem User gelesen Topic-IDs in einer Datenbank gespeichert. Dies geschieht in der viewtopic.php
Das klappt auch ganz gut - auch zusammen mit dem Short URLs MOD. Aber leider nur solange ich mit dem Internet Explorer unterwegs bin. Wenn ich den Mozialla Firefox benutze passiert etwas seltsames:
Es wird zusätzlich zu der richtigen Topic-ID noch eine weiter Topic-ID in die Datenbank geschrieben. Und zwar genau die Topic-ID des nächst neueren Topics aus dem gleichen Forum.
Ich hatte zunächst natürlich den UPItoDB MOD in Verdacht, der Übeltäter zu sein. Das hat sich aber nicht bestätigt. Ich habe herausgefunde, das der Fehler nur Auftritt, wenn in der page_tail.php die Funktion 'replace_for_mod_rewrite' aufgerufen wird.
Wenn ich die Zeile
in der Funktion auskommentiere tritt der Fehler nicht auf.
Und wie gesagt, er Fehler tritt nicht mit dem IE auf.
Es ist auch egal, ob Gzip ein- oder ausgeschaltet ist.
Aber wie kann das denn sein???
Was passiert beim Firefox, was beim IE keine Auswirkungen hat?
Hat jemand eine Idee?
Schönen Gruß
mObbY
ich habe ein Problem in meinem Board beobachtet, bei dem ich nicht weiter komme.
Ich habe den "Unread Post Information to Database" MOD (UPItoDB) zusammen mit dem Short URLs MOD installiert.
Beim UPItoDB MOD werden alle von einem User gelesen Topic-IDs in einer Datenbank gespeichert. Dies geschieht in der viewtopic.php
Code: Alles auswählen
if( $userdata['session_logged_in'] )
{
$user_id = $userdata[user_id];
$post_id = $postrow[$i]['post_id'];
$post_time = $postrow[$i]['post_time'];
$post_edit_time = $postrow[$i]['post_edit_time'];
$post_new = "";
// $zeit_min_monat = time() - 2592000;
$zeit_jetzt = time();
$zeit_monat = $zeit_jetzt - 2592000;
if ($post_time > $zeit_monat || $post_edit_time > $zeit_monat)
{
if ($visit_time < $post_time || $visit_time < $post_edit_time)
{
$post_new = "bgcolor=\"#ffffcc\"";
if ( $post_id == $last_post_id || $visit_time < $post_edit_time)
{
$sql = "DELETE FROM " . TOPIC_READ_TABLE . "
WHERE topic_id = $topic_id
AND user_id = $user_id";
if (!$result = $db->sql_query($sql) )
{
message_die(GENERAL_ERROR, "Couldn't remove Topic Read database", "", __LINE__, __FILE__, $sql);
}
$visit_time_new = time();
$sql = "INSERT INTO " . TOPIC_READ_TABLE . " (topic_id, post_id, user_id, visit_time, forum_id) VALUES ('$topic_id' , '$post_id' , '$user_id' , '$visit_time_new', '$forum_id')";
if (!$result = $db->sql_query($sql) )
{
message_die(GENERAL_ERROR, "Couldn't Build Topic Read database", "", __LINE__, __FILE__, $sql);
}
}
}
}
}
Es wird zusätzlich zu der richtigen Topic-ID noch eine weiter Topic-ID in die Datenbank geschrieben. Und zwar genau die Topic-ID des nächst neueren Topics aus dem gleichen Forum.

Ich hatte zunächst natürlich den UPItoDB MOD in Verdacht, der Übeltäter zu sein. Das hat sich aber nicht bestätigt. Ich habe herausgefunde, das der Fehler nur Auftritt, wenn in der page_tail.php die Funktion 'replace_for_mod_rewrite' aufgerufen wird.
Code: Alles auswählen
function replace_for_mod_rewrite(&$s) {
// get the correct base_url: protocoll,url,path to make sure to rewrite only internal links
if (empty($HTTP_SERVER_VARS['HTTP_HOST'])) {
$server = getenv('HTTP_HOST');
} else {
$server = $HTTP_SERVER_VARS['HTTP_HOST'];
}
// IIS sets HTTPS=off
if (isset($HTTP_SERVER_VARS['HTTPS']) && $HTTP_SERVER_VARS['HTTPS'] != 'off') {
$proto = 'https://';
} else {
$proto = 'http://';
}
// Get the name of this URI
// Start of with REQUEST_URI
if (isset($HTTP_SERVER_VARS['REQUEST_URI'])) {
$path = $HTTP_SERVER_VARS['REQUEST_URI'];
} else {
$path = getenv('REQUEST_URI');
}
if ((empty($path)) || (substr($path, -1, 1) == '/')) {
// REQUEST_URI was empty or pointed to a path
// Try looking at PATH_INFO
$path = getenv('PATH_INFO');
if (empty($path)) {
// No luck there either
// Try SCRIPT_NAME
if (isset($HTTP_SERVER_VARS['SCRIPT_NAME'])) {
$path = $HTTP_SERVER_VARS['SCRIPT_NAME'];
} else {
$path = getenv('SCRIPT_NAME');
}
}
}
$path = preg_replace('/[#\?].*/', '', $path);
$path = dirname($path);
if (preg_match('!^[/\\\]*$!', $path)) {
$path = '';
}
$base_url = "$proto$server$path/";
$prefix = '|"(?:'.$base_url.')?';
// now that we know about the correct $prefix we can start the rewriting
$urlin =
array(
$prefix . '(?<!/)index.php"|',
$prefix . '(?<!/)viewforum.php\?f=([0-9]*)&(?:amp;)topicdays=([0-9]*)&(?:amp;)start=([0-9]*)"|',
$prefix . '(?<!/)viewforum.php\?f=([0-9]*)"|',
$prefix . '(?<!/)viewtopic.php\?t=([0-9]*)&(?:amp;)view=previous"|',
$prefix . '(?<!/)viewtopic.php\?t=([0-9]*)&(?:amp;)view=next"|',
$prefix . '(?<!/)viewtopic.php\?t=([0-9]*)&(?:amp;)postdays=([0-9]*)&(?:amp;)postorder=([a-zA-Z]*)&(?:amp;)start=([0-9]*)"|',
$prefix . '(?<!/)viewtopic.php\?t=([0-9]*)&(?:amp;)start=([0-9]*)&(?:amp;)postdays=([0-9]*)&(?:amp;)postorder=([a-zA-Z]*)&(?:amp;)highlight=([a-zA-Z0-9]*)"|',
$prefix . '(?<!/)viewtopic.php\?t=([0-9]*)&(?:amp;)start=([0-9]*)"|',
$prefix . '(?<!/)viewtopic.php\?t=([0-9]*)"|',
);
$urlout = array(
'"forums.html"',
'"viewforum\\1-\\2-\\3.html"',
'"forum\\1.html"',
'"ptopic\\1.html"',
'"ntopic\\1.html"',
'"ftopic\\1-\\2-\\3-\\4.html"',
'"ftopic\\1.html"',
'"ftopic\\1-\\2.html"',
'"ftopic\\1.html"',
);
$s = preg_replace($urlin, $urlout, $s);
return $s;
}
Wenn ich die Zeile
Code: Alles auswählen
$s = preg_replace($urlin, $urlout, $s);
Und wie gesagt, er Fehler tritt nicht mit dem IE auf.

Es ist auch egal, ob Gzip ein- oder ausgeschaltet ist.
Aber wie kann das denn sein???
Was passiert beim Firefox, was beim IE keine Auswirkungen hat?
Hat jemand eine Idee?
Schönen Gruß
mObbY