[PHP] Handler bleibt nicht bestehen

Rayn

Lt. Commander
🎅Rätsel-Elite ’24
Registriert
März 2001
Beiträge
1.052
Hallo,

ich habe wieder mal ein Problem mit PHP und meinem IMAP-eMail-Script ;)

Ich mache das so:
Ich lasse eine Testverbindung aufbauen um Username und Passwort zu überprüfen.
Wenn das geht hab ich auch direkt die Verbindung, deren Handler in $imap_handle gespeichert wird.
Das sieht dann so aus:
PHP:
$imap_handle = @imap_open("{server/pop3}INBOX", $user, $pass);

Mein Problem jetzt:
Wenn ich beim Ausführen einer neuen Aktion, z.B. nach Klicken des Links für den Posteingang, die Seite neu laden lasse und vorher überprüfen will, ob die Verbindung noch besteht (mit imap_ping($imap_handle); ), bekomme ich eine Fehlermeldung:
"supplied argument is not a valid imap resource ... " usw.

Kann mir einer helfen, wie ich den Handler auch beim Neuladen weiterhin verwenden kann?
Kann ich z.B. $imap_handle auch in $GLOBALS speichern lassen und dann damit arbeiten?
 
Zuletzt bearbeitet:
Alle Daten, die ein PHP-Script erzeugt, aber nicht ausgibt (an den Browser sendet oder irgendwo sonst abspeichert) gehen grundsätzlich verloren. So auch MySQL- oder IMAP-Verbindungen, d.h. sie müssen bei jedem Script-Abruf neu aufgebaut werden. (Ok, bei MySQL gibt es eine pconnect()-Funktion, aber grundsätzlich stimmt meine Aussage... ;))

Es gibt über externe Tools Möglichkeiten, Daten im RAM für mehrere PHP-Scripte abrufbar zu machen. Dass dies mit Verbindungs-Handlern geht, bezweifle ich aber.
 
Hm... ist imap_ping dann nicht ziemlich sinnlos ?
Damit kann man ja überprüfen, ob eine Verbindung noch besteht.
Wenn man aber die Seite neu laden lässt, wird sie aber doch immer FALSE zurückliefern ?!?!?!

Oder lieg ich da jetzt falsch ?

Ok, ich muss dann also immer die Verbindung neu aufbauen lassen, richtig ?
 
Richtig.

zu mysql_pconnect():

Auch hier verliert das Script "seine" Verbindung. Der Webserver, genauer das PHP Modul bzw. die php.exe hält diese Verbindung weiterhin.

Man muss also auch bei mysql_pconnect jedes Mal eine Verbindung im Script aufmachen, bekommt dann aber im Normalfall eine schon offene Verbindung zugewiesen. Das bringt dann meistens einen Performancevorteil, weil man sich nicht mehr am MySQL Server anmelden muss, sondern die zuvor geöffnete Verbindung weiternutzen kann.

PHP unterscheidet die Verbindungen nach den Angaben der Argumente (Server, User, Passwort, DB).

Beim Apache erhält im Endeffekt bei starker Auslastung jeder Worker Thread eine MySQL persistent Connection. Man sollte also seine Prioritäten setzen. Ich hatte bisher mit pconnect() zweigeteilte Erfahrungen. Es scheint noch nicht so ausgereift zu sein. Könnte aber auch an der experimentellen Implementierung von PHP als Apache2 Modul liegen.

-alex
 
@Rayn: Ja, du musst jedesmal eine neue Verbindung aufbauen. Was imap_ping() soll, weiß ich auch nicht, nie benutzt.

@[UPS]Erazor: Ja, vor allem weil ja leider nicht eine einzige Verbindung, sondern pro Apache-Prozess je eine Verbindung aufgebaut werden muss, ist die Sache nicht ganz so toll und ich habe auch von unterschiedlichen Erfahrungen gehört. Momentan verwenden wir auf ComputerBase daher kein mysql_pconnet(), selbst habe ich jedoch keine Tests durchgeführt.
 
Zurück
Oben