phpbar.de logo

Mailinglisten-Archive

[php] imap-Programmierung

[php] imap-Programmierung

Johannes Schlueter schlueter at phpbar.de
Mit Nov 2 17:57:52 CET 2005


Hi B,

zunächst: Hier gilt es als höflich seinen Namen in des From Feld einzutragen. 
Die Angabe dessen erhöt die warscheinlichkeit, dass das Posting gelesen wird. 
("Wieso soll ich jemandem helfen der sich versteckt?")

Aber zum Punkt:

On Wednesday 02 November 2005 17:10, B wrote:
> $mbox = imap_open ("{localhost:143 /imap/tls/novalidate-cert}", "cyrus",
> "PASSWORT", OP_HALFOPEN) || die ("can't connect: ".imap_last_error());
> echo $mbox,'<br>';
[...]
> Ich bekomme aber als Ausgabe
>
> 1
[...]
> Dabei macht mich die ressource_ID '1' besonders stutzig. Und sie ist ja
> wohl auch falsch, wenn man dem Fehler Glauben schenken darf.

Das Problem ist das || nach dem imap_open. Entsprechend der 
Operator-Reihenfolge[1] wird zunächst || und dann = ausgewertet. d.h. das 
Ergebnis von imap_open (in diesem Fall eine Resource) wird genommen. Der || 
Operator sieht, dass der, nach cast zu bool, true ist und wertet die(...) 
nichtmehr aus. Der Rückgabewert dieser Boolschen-Operation (true) wird dann 
durch das = an $mbox zugewiesen. echo macht dann ein Cast zu einem String, 
somit wird aus true ein String "1".

Was du willst ist "or" statt "||". Da hat dann "=" Vorrang vor dem "or".

$mbox = imap_open ("{localhost:143 /imap/tls/novalidate-cert}", "cyrus", 
"PASSWORT", OP_HALFOPEN) OR die ("can't connect: ".imap_last_error());

da wird zunächst imap_open ausgeführt, das ergibt Resource, dann die Zuweisung 
ausgeführt, also $mbox bekommt die Resource, das "Ergebnis" einer Zuweisung 
ist der zugewiesene Wert also Resource, damit wird "or" ausgewertet, dass ist 
true somit wird das die() auch nichtmehr ausgewertet.

Das ganze kann man umgehen indem man die Fehlerprüfung mit einem if-Statement 
macht, was auch den Vorteil hat, dass man im Fehlerfall umfassendere 
Behandlung machen kann.

$mbox = imap_open ("{localhost:143 /imap/tls/novalidate-cert}", "cyrus", 
"PASSWORT", OP_HALFOPEN);
if (!$mbox) {
    die ("can't connect: ".imap_last_error());
}

johannes

[1] http://php.net/operators

php::bar PHP Wiki   -   Listenarchive