@pekka Am Ende des ersten Schrittes wird der Erfolg des Vorgangs, also im Beispiel das Schreiben von $z, als 'false' gewertet (dies sieht man, wenn man nur den ersten Schritt ausführt). Die intakte, aber als 'false' vorgestellte Variable $z wird dann im zweiten Schritt verarbeitet, aber das Ergebnis ist fehlerhaft.
Ohne return-Befehl Werte immer 'false'
Einklappen
X
-
Es liegt nicht an cURL, auch andere zweischrittige Funktionen sind betroffen. Was hatte es mit dem Hinweis auf sich, dass Funktionen ohne 'return' immer 'Null' ausgeben? Das stimmt hier fast. $z wird im ersten Schritt erfolgreich geschrieben, wird im zweiten Schritt aber nicht mehr richtig gelesen und ist am Ende leer (bzw. nur der Dateiname wurde kopiert).
Kommentar
-
Die Funktion slash() setzt bloß die Schrägstriche im Dateipfad, daran liegt es nicht. Wie gesagt, wenn man die Funktion in zwei Funktionen aufteilt, kann man sehen, wie Funktion 1 oder Schritt 1 erfolgreich die Datei schreibt (die dann auch auf dem Server vorhanden ist), was, da 'return' fehlt, im Funktionsaufruf nicht gemeldet wird. Eigentlich sollte also in diesem Fall nichts gemeldet werden. Seit der Umstellung wird jetzt aber die false-Meldung ausgegeben.
Kommentar
-
Habe zur Veranschaulichung ein kleines Skript erstellt:
PHP-Code:<?php
function addieren ($a, $b) {
$c = $a + $b;
if ($c == true) {
echo "<p style=\"color:#008000; font-weight:bold\">Rechenvorgang ausgeführt. Ergebnis: $c</p>";
// Kein 'return' des Ergebnisses
// return $c;
} else {
echo "<p style=\"color:#bb0000; font-weight:bold\">Rechenvorgang kann nicht ausgeführt werden</p>";
// 'return'
return false;
}
}
$ergebnis = addieren("1", "2");
if ($ergebnis == true) {
echo "<p style=\"color:#008000; font-weight:bold\">Funktion meldet 'true'. Ergebnis: $ergebnis";
} else {
echo "<p style=\"color:#bb0000; font-weight:bold\">Funktion meldet 'false'</p>";
}
?>
Code:Rechenvorgang ausgeführt. Ergebnis: 3 Funktion meldet 'false'
Kommentar
-
Zu erwarten wäre doch, dass kein 'false' ausgegeben wird,
aber jetzt bedeutet 'nicht true' wohl dasselbe wie 'false'. So war es vorher aber nicht!
Kommentar
-
PHP-Desaster hat schon alles gesagt... Und genau aus dem Grund bin ich sicher, daß dein Problem seine Wurzel woanders hat
Was sagt eine Testausgabe des Dateiinhalts von $z? Denn der Punkt ist ja im Moment, wenn ich es richtig verstanden habe, daß eine leere Datei übergeben wird.
Kommentar
-
Zitat von PHP-Desaster Beitrag anzeigenNö, kein Rückgabewert entspricht dem Wert NULL.
NULL ist auf jeden Fall nicht true, weshalb dein else-Zweig ausgeführt wird. Der Wahrheitswert von NULL ist nämlich false.
Das Zweite, was mir aufgefallen ist, ist, dass eine Funktion durch 'return' gar nicht mehr abgebrochen/beendet wird, sondern, wenn in der Funktion nach einem return-Befehl noch Code folgt, die Funktion dann auch bis zum Ende des Codes weiterläuft. Das war bei PHP 4 auch anders!
Jetzt muss ich die Skripte in Bezug auf die problematischen Funktionen komplett umschreiben, d. h. alle zweischrittigen Funktionen, auf die ich so stolz war, in zwei Funktionen teilen. Wie soll ich das schaffen, wo diese Funktionen Bestandteil von anderen Funktionen sind? Jetzt wird alles viel zu kompliziert!
@pekka Es hat wirklich nichts mit cURL zu tun.Zuletzt geändert von weltvolk; 03.08.2009, 11:15.
Kommentar
-
Das Verhalten beim Zurückgeben von Funktionen hat sich mit PHP 5 nicht geändert. Glaub mir: Ich hab ein Tutorial zu dem Thema geschrieben. Auch return hat sich nicht verändert. Hast Du eine konkrete Stelle, an der return die Bearbeitung einer Funktion nicht abbricht?`Zeig mal.
Zeig auchb mal die Original-Stelle, an der Du den Rückgabewert vergleichst. Passiert das so wie oben von Dir geschrieben? Daß das mal funktioniert hat, ist fast unmöglich bzw. für mich im Moment nicht nachzuvollziehen wie das gegangen sein soll.Zuletzt geändert von pekka; 03.08.2009, 11:18.
Kommentar
Kommentar