Serveradministration - Forum

Derzeit sind Sie als Gast in unserem Forum aktiv. Für das Schreiben registrieren Sie sich bitte. Unser Forum ist eine Austauschplattform für Webworker zum Kommunizieren, Helfen, Informieren und Hilfe finden. Auf der rechten Seiten finden Sie eine Forenübersicht über alle Bereiche des Webmaster-Forums. Unterhalb finden Sie alle aktuellen Themen.

Apache2 u. Windows :: PHP Script wird doppelt ausgeführt

Link zur Antwort auf "Apache2 u. Windows :: PHP Script wird doppelt ausgeführt" von Dominik Habichtsberg Dominik Habichtsberg, am Dienstag den 28.09.2010 um 23:36:44

Guten Morgen zusammen,

so langsam drehe ich ein wenig am Rad.

Ich habe seit einigen Stunden das Problem, dass mein Apache-Webserver scheinbar jedes Script gleich 2 mal nacheinander ausführt. Sämtliche SQL-Queries gehen doppelt in / auf die Datenbank.

Woher weiß ich, dass das Skript 2 mal durchläuft und wie äußert sich das?

- Der erste Durchlauf wird komplett an den Browser gesendet und abgeschlossen. Zwischen Client und Server besteht nun keine aktive Kommunikation mehr. Bis zum Abschluss des ersten Durchlaufes sind sämtliche Einträge genau einmal in der Datenbank abgelegt.

- Der zweite Durchlauf (komplett von vorne) läuft (warum auch immer) rein Serverseitig ab. Da das Include-once erneut ausgeführt wird, scheint das Script komplett neu angestoßen zu sein - sämtliche Clientdaten fehlen hier ebenfalls was alles in allem ein weiteres Zeichen für mich ist, dass keinerlei Verbindung zum Client mehr besteht.

---

Ich habe sämtlichen register_shutdown_functions etc. überprüft und bin sogar in der ersten Datei die aufgerufen wird hingegangen und habe ein echo "test"; drauf gelegt und alles andere auskommentiert und auch dies wird 2 mal ausgeführt - beim ersten mal geht alles an den Client und er bekommt den Status 200 gemeldet und das zweite mal läuft rein Serverintern.

Habt ihr eine Idee wodran das liegen kann?

Viele Grüße,

Dominik

Link zur Antwort auf "Apache2 u. Windows :: PHP Script wird doppelt ausgeführt" von Dominik Habichtsberg Dominik Habichtsberg, am Mittwoch den 29.09.2010 um 00:08:02

Nach einigen weiteren Debugging-Versuchen bin ich schlussendlich zu der Erkenntnis gelangt, dass die .htaccess Verursacher des ganzen übels zu sein scheint.

Ich konnte es dort auf eine Zeile genau lokalisieren:

.htaccess  
Apache Konfiguration
1
RewriteRule ^(.*) index.php

Nehme ich diese Zeile raus, so läuft das PHP-Skript genau einmal und nicht mehr und nicht weniger.

Nur warum genau macht er das, was er da macht (das er das Skript 2 mal durchlaufen lässt) - bin ich blind und sehe den Fehler in dieser Zeile nicht, oder wo hängt der Wurm? ... und vor allem - wie kann ich das Problem beheben?

Eine Neuinstallation des Servers brachte mich nicht weiter.

Viele Grüße,

Dominik

P.S.: Die gesamte .htaccess sieht so aus:

.htaccess  
Apache Konfiguration
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
RewriteEngine on

RewriteBase /

RewriteCond %{REQUEST_URI} !^/media/
RewriteCond %{REQUEST_URI} !^/css/
RewriteCond %{REQUEST_URI} !^/gfx/
RewriteCond %{REQUEST_URI} !^/js/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.*) index.php

Link zur Antwort auf "Apache2 u. Windows :: PHP Script wird doppelt ausgeführt" von Jannik Zschiesche Jannik Zschiesche, am Mittwoch den 29.09.2010 um 13:31:46

Mach mal ein [L] hinter die RewriteRule, vielleicht hilft das.

Ansonsten ist es bei deinem Script aktuell so, dass auch eigentlich fehlerhafte 404-Anfragen (z.B. CSS-Dateien, bei denen man sich in dem Ordnernamen vertippt hat, etc..) auf die index.php umgeleitet werden.


David Danier
Beiträge: 1677

PN schreiben
Profil ansehen
User ist offline
Link zur Antwort auf "Apache2 u. Windows :: PHP Script wird doppelt ausgeführt" von David Danier David Danier, am Donnerstag den 30.09.2010 um 07:20:06
Zitat von: Jannik Zschiesche

Ansonsten ist es bei deinem Script aktuell so, dass auch eigentlich fehlerhafte 404-Anfragen (z.B. CSS-Dateien, bei denen man sich in dem Ordnernamen vertippt hat, etc..) auf die index.php umgeleitet werden.

Heißt: Wenn du z.B. irgendwo ein <img src="datei-die-nicht-existiert" alt="" /> drin hast, dann erklärt das den Effekt. Gilt für alle Elemente die Dateien nachladen, also auch CSS, JS, <iframe> und natürlich auch Dateien, die per CSS geladen werden.

Link zur Antwort auf "Apache2 u. Windows :: PHP Script wird doppelt ausgeführt" von Dominik Habichtsberg Dominik Habichtsberg, am Montag den 04.10.2010 um 13:54:49

Hallo Jannik, hallo David,

danke für eure Antworten. Ja das ist mir bewusst und auch korrekt so und hatte ich an dieser Stelle bedacht. Jedoch war dies nicht der Auslöser für die doppelte Ausführung des Scriptes.

Immer wenn ich diese Zeile einkommentiert hatte, führte er das Script doppelt aus ... auch als in der auszuführenden Datei nur folgendes drinne stand.

 
PHP
1
2
3
<?php
    echo "test";
?>

Die Variante mit dem [L] hatte ich ebenfalls ausprobiert - erfolglos.

Viele Grüße,

Dominik


Max B
Beiträge: 220

PN schreiben
Profil ansehen
User ist offline
Link zur Antwort auf "Apache2 u. Windows :: PHP Script wird doppelt ausgeführt" von Max B Max B, am Montag den 04.10.2010 um 15:43:28

Hi,

ich habe gerade nur den Anfang überflogen, aber ich hatte vor einiger Zeit dasselbe Problem und hab echt an mir selbst gezweifelt :D

Bei mir lag's daran, dass das CMS-System HTML-Code ausgab, der <img>-Tags enthielt (= 1. Script-Aufruf). Die Referenzen dieser Tags waren teilweise fehlerhaft, sodass dank .htaccess die 404-Seite des CMS' aufgerufen wurde (= 2. Script-Aufruf). Letztendlich wurde das Script dann also bei 1 Browser-Aufruf 2x ausgeführt.

Mir hat hierbei insbesondere das "RewriteLogLevel" geholfen: http://buecher.lingoworld.de/apache2/showdir.php?id=673&o=mod Damit kann man den Server anweisen sämtliche Rewrite-Entscheidungen zu protokollieren sodass man genau sieht warum der wohin weiterleitet.

Hoffe es war nicht alles schon oben erwähnt ;)

VG

Link zur Antwort auf "Apache2 u. Windows :: PHP Script wird doppelt ausgeführt" von Dominik Habichtsberg Dominik Habichtsberg, am Freitag den 08.10.2010 um 15:04:00

Hallo Max,

doch das war es bereits und auch meine letzte Antwort hat nochmal klar dargelegt, dass diese Bedingungen eben nicht gegeben waren. Wie gesagt: selbst als kein anderer Output außer dem einen "echo" erfolgte trat das Phänomen auf.

Die Idee mit dem doppelten Aufrufen aufgrund von IMG, Style oder Javascript-Tags etc. hatte ich in meinen Debuging versuchen berücksichtigt gehabt.

Link zur Antwort auf "Apache2 u. Windows :: PHP Script wird doppelt ausgeführt" von Jannik Zschiesche Jannik Zschiesche, am Freitag den 08.10.2010 um 16:27:07

Einfach mal nen Profiler drüberlaufen lassen und nachsehen, was nun wirklich passiert.

Link zur Antwort auf "Apache2 u. Windows :: PHP Script wird doppelt ausgeführt" von Dominik Habichtsberg Dominik Habichtsberg, am Freitag den 08.10.2010 um 17:54:04
Zitat von: Jannik Zschiesche

Einfach mal nen Profiler drüberlaufen lassen und nachsehen, was nun wirklich passiert.

exakt das, nur zwei mal ... Der Profiler läuft bis zum ende durch und geht dann sofort zum Anfang um erneut anzufangen - habe ich bevor ich den Thread hier erstellt hatte ebenfalls bereits gemacht gehabt - dennoch danke für den Hinweis.

Macht er übrigens auch bei einem expliziten Exit.


bodomalo
Beiträge: 3

PN schreiben
Profil ansehen
User ist offline
Link zur Antwort auf "Apache2 u. Windows :: PHP Script wird doppelt ausgeführt" von bodomalo bodomalo, am Donnerstag den 28.10.2010 um 15:54:36
Zitat von: Jannik Zschiesche

exakt das, nur zwei mal ... Der Profiler läuft bis zum ende durch und geht dann sofort zum Anfang um erneut anzufangen - habe ich bevor ich den Thread hier erstellt hatte ebenfalls bereits gemacht gehabt - dennoch danke für den Hinweis.

Hallo Dominik

Ich nehme nicht an, dass du inzwischen eine Lösung hast oder? Denn ich habe exakt das gleiche Problem :-(

Meine Skripte werden zumeist (nicht immer!!) 2 mal aufgerufen. Ich denke aber, dass etwas in meine rewrite rules falsch ist...aber was?

Hier mal mein Code.

Options +FollowSymLinks

RewriteEngine On

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www.onomalo\.com$ [NC]

RewriteRule ^(.*)$ http://onomalo.com/$1 [R=301,L]

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^name-(.+)-(.+)\.html$ ./name.php?buchstabe=$1&limiter=$2 [L]

RewriteRule ^name-(.+)\.html$ ./name.php?buchstabe=$1 [L]

RewriteRule ^(.*)\.html$ ./gedicht.php?url=$1 [L]

</IfModule>

Wenn ich es so mache funktioniert es aber!!!

Options +FollowSymLinks

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteRule ^(.*)\.html$ ./gedicht.php?url=$1 [L]

</IfModule>

Link zur Antwort auf "Apache2 u. Windows :: PHP Script wird doppelt ausgeführt" von Jannik Zschiesche Jannik Zschiesche, am Donnerstag den 28.10.2010 um 17:33:18

Ein kleiner Hinweis, da ich nicht weiß, ob dir das bekannt ist:

die RewriteCond gilt nur für die nächste, darauffolgende RewriteRule.

Beispiel: (RC sind RewriteCond, RR heißt RewriteRule)

RC 1

RC 2

RR 1

RR 2

Nun gelten folgende RCs für RR:

RR1: es werden RC1 und RC2 darauf angewandt und werden dadurch "aufgebraucht"

RR2: hat keine direkt davor stehen RCs, d. h. auch keinerlei Beschränkung

Dies könnte, ohne eine genauere Betrachtung, der Fehler sein.


bodomalo
Beiträge: 3

PN schreiben
Profil ansehen
User ist offline
Link zur Antwort auf "Apache2 u. Windows :: PHP Script wird doppelt ausgeführt" von bodomalo bodomalo, am Freitag den 29.10.2010 um 12:32:03

Hallo Jannik

Danke für die Antwort...leider hat das bisher nicht geholfen. Ich habe eine zweite Webseite, auch dort werden alle Skripte 2 mal ausgeführt seitdem ich mod rewrite verwende.

Hier habe ich das so aufgebaut. Die RWCond kommt vor jeder Rule erneut vor. Es funktioniert zwar, aber doc.php wird imemr 2 oder 3 mal durchlaufen

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^www.dokumente-online\.com$ [NC]
RewriteRule ^(.*)$ http://dokumente-online.com/$1 [R=301,L]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^www.swopdoc\.com$ [NC]
RewriteRule ^(.*)$ http://swopdoc.com/$1 [R=301,L]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ ./doc.php?url=$1 [L]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+) /dokumentenliste2.php?wissen=$1&kat=$2&typ=$3&seite=$4 [L]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/([^/]+) /dokumentenliste2.php?wissen=$1&kat=$2&typ=$3 [L]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+) /dokumentenliste1.php?wissen=$1&kat=$2 [L]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/ /dokumentenliste_wissenschaften.php?wissen=$1 [L]

Link zur Antwort auf "Apache2 u. Windows :: PHP Script wird doppelt ausgeführt" von Jannik Zschiesche Jannik Zschiesche, am Freitag den 29.10.2010 um 18:39:58

Hi,

RewriteBase musst du übrigens nicht immer wieder setzen, das gilt übergreifend.

Gibt es ein Anschauungsexemplar online? Vielleicht lässt sich an den Request was sehen.

Link zur Antwort auf "Apache2 u. Windows :: PHP Script wird doppelt ausgeführt" von Dominik Habichtsberg Dominik Habichtsberg, am Freitag den 12.11.2010 um 15:36:53

Also ich habe das Problem umgangen indem ich eine andere Lösung verwendet habe, jedoch interessiert mich halt immer noch, wie dieses Phänomen so zustande kommen kann.

Meine aktuelle Lösung  
Apache Konfiguration
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
RewriteEngine on

RewriteBase /

RewriteCond %{REQUEST_URI} !^/media/
RewriteCond %{REQUEST_URI} !^/css/
RewriteCond %{REQUEST_URI} !^/gfx/
RewriteCond %{REQUEST_URI} !^/js/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule !\.(xml|ico|txt)$ index.php

Viele Grüße,

Dominik


bodomalo
Beiträge: 3

PN schreiben
Profil ansehen
User ist offline
Link zur Antwort auf "Apache2 u. Windows :: PHP Script wird doppelt ausgeführt" von bodomalo bodomalo, am Donnerstag den 23.12.2010 um 12:37:05

Um mich gleich für meine Dummheit zu entschuldigen mal eine Antwort...

Meine Skripts wurden alle 2 mal hintereinander ausgeführt, da ich google adsense verwende.. :-\ Ich habe daran überhaupt nicht mehr gedacht. Der Adsense code lädt die Seite natürlich sofort nochmal und analysiert den Inhalt auf seinem Server. Das macht ganz schön Traffic...

Aus irgendeinem Grund dachte ich das kommt von den rewrite rules, die Stimmen aber alle... so falsch kann man liegen.