OffTopic: Hallelujah.Zitat von weltvolk Beitrag anzeigen
Ohne return-Befehl Werte immer 'false'
Einklappen
X
-
Am einfachsten mit file_get_contents().
Error_reporting() kurzfristig hochdrehen, um alle eventuellen Fehler angezeigt zu bekommen.
und auch schauen, ob ein curl_error() nach curl_exec() eine Fehlermeldung auswirft.
Einen Kommentar schreiben:
-
Ihr habt recht. Es funktionieren nur die Funktionen nicht mehr, die eine Datei übertragen. Einen return-Befehl bei zweischrittigen Funktionen, wie oben die Funktion 'ftp_copy', auszulassen, ist sicherlich unsauber, funktioniert aber weiterhin. Der Fehler liegt also woanders. Wie kann ich den Dateiinhalt von $z denn anzeigen lassen/debuggen?
Einen Kommentar schreiben:
-
Warum wiederholst Du's dann?Zitat von piratosEs ist ja eigentlich alles gesagt.
<haarspalterei>Zitat von piratos2a. Es ist unsinnig eine Funktion ohne Rückgabewert als eine solche nutzen zu wollen.
null ist auch ein Rückgabewert.
</haarspalterei>
Einen Kommentar schreiben:
-
Wenn eine Funktion keinen return-Befehl hat, gibt sie null zurück. Das hat sich in PHP5 nicht geändert. Wenn Du auf "ungleich true" prüfst, schlägt ein Rückgabewert 'null' genauso an wie 'false' oder jeder andere Wert außer true. Das war auch schon immer so. Deshalb würde ich gern die Original-Stelle sehen, an der Du das Ergebnis prüfst.
Wenn Du folgendermaßen prüfst:
if (!$ergebnis)
schlagen false und null an.
Wenn Du folgendermaßen prüfst:
if ($ergebnis === false)
schlägt nur false an. Das ist im Normalfall die optimale Lösung.
Einen Kommentar schreiben:
-
Die Frage ist viel eher, wieso sollte das bei PHP 4 der Fall gewesen sein? Das war niemals so. Also hör jetzt auf mit dieser Sinnlos-Behauptung und fang an vernünftig zu debuggen.Zitat von weltvolk Beitrag anzeigenAber warum funktionieren die Funktionen nach der Umstellung auf PHP 5 nicht mehr, bei denen im Erfolgsfall kein return-Befehl im Code gesetzt wurde?
Einen Kommentar schreiben:
-
Natürlich glaube ich dir. Aber warum funktionieren die Funktionen nach der Umstellung auf PHP 5 nicht mehr, bei denen im Erfolgsfall kein return-Befehl im Code gesetzt wurde?
Einen Kommentar schreiben:
-
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, 10:18.
Einen Kommentar schreiben:
-
Habe sogar auch mal 'return false' mit ausgeklammert, so dass die Funktion zum Wahrheitswert 'true/false' gar keine Aussage mehr machen dürfte. Trotzdem wird bei Funktionsaufruf weiterhin 'false' ausgegeben, was auf eine große Selbstständigkeit von PHP 5 schließen lässt, denn bei PHP 4 (jedenfalls bei meinem Provider) erfolgte gar keine Meldung.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, 10:15.
Einen Kommentar schreiben:
-
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.
Einen Kommentar schreiben:
-
Nö, kein Rückgabewert entspricht dem Wert NULL.Zu erwarten wäre doch, dass kein 'false' ausgegeben wird,
NULL ist auf jeden Fall nicht true, weshalb dein else-Zweig ausgeführt wird. Der Wahrheitswert von NULL ist nämlich false.aber jetzt bedeutet 'nicht true' wohl dasselbe wie 'false'. So war es vorher aber nicht!
Einen Kommentar schreiben:
-
Habe zur Veranschaulichung ein kleines Skript erstellt:
Die Funktion kann hier zwar nicht richtig arbeiten, da das Ergebnis des Rechenvorgangs nicht durch 'return' ausgegeben wird, aber beim Funktionsaufruf dürfte doch kein 'false' ausgegeben werden, weil es nicht so programmiert ist, oder? Unter http://www.weltvolk.de/php/addieren.php kann es aufgerufen werden. Hier die Ausgabe: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>";
}
?>
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!Code:Rechenvorgang ausgeführt. Ergebnis: 3 Funktion meldet 'false'
Einen Kommentar schreiben:
-
Ahh jetzt versthee ich.
Was sagt eine Testausgabe des Dateiinhalts von $z vor dem curl_exec()?
Einen Kommentar schreiben:
-
Wie weißt Du, daß die Datei $z leer ist - Du löschst sie doch kurz vor dem Return?
Einen Kommentar schreiben:
-
Schritt 1 schreibt die Datei $z. Es wird aber nicht 'return' getätigt. Schritt 2 liest $z. Allerdings nur den Dateinamen.
Einen Kommentar schreiben:
Einen Kommentar schreiben: