Ohne return-Befehl Werte immer 'false'
Einklappen
X
-
Also $z ist ja eigentlich nie komplett leer, da der Dateiname in Schritt 2 übertragen wird. Die Datei ist leer.
-
Sorry, aber ich verstehe immer noch nicht, was das Problem ist
Beschreibe es mal bitte ganz simpel für blöde.
Was ist falsch?
Welche Variable hat in welcher Zeile welchen Wert?
Welchen Wert sollte sie haben?
Einen Kommentar schreiben:
-
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.
Einen Kommentar schreiben:
-
Prüfe mal durch schrittweise Testausgaben, an welcher Stelle $z geleert wird. Ab welcher Zeile ist $z leer?
Einen Kommentar schreiben:
-
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).
Einen Kommentar schreiben:
-
Was macht die Funktion slash()?
Was zeigt eine Testausgabe von $z direkt nach der Zuweisung von slash()?
Einen Kommentar schreiben:
-
@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.
Einen Kommentar schreiben:
-
Wann wird was genau defekt befüllt?
Gehe die Funktion mal Schritt für Schritt durch und definiere, was wo schiefläuft. Das blicke ich nämlich immer noch nicht.
Ich würde intuitiv mal drauf tippen, daß curl_exec() seit der Umstellung nicht mehr richtig funktioniert und da das Problem liegt.Zuletzt geändert von pekka; 02.08.2009, 19:02.
Einen Kommentar schreiben:
-
Naja, die Funktion läuft ja immer weiter und fängt nicht von vorne an. Nur was nützt es, wenn das Ergebnis des erfolgreichen ersten Funktionsschrittes falsch interpretiert wird und der zweite Schritt mit einer als defekt angesehenen Variable weitermacht, so dass das Endergebnis zwar als Erfolg/'true' ausgegeben wird, die Variable aber kaputt/leer ist.
Einen Kommentar schreiben:
-
Also ich verstehe nur Bahnhof.
Was verhält sich jetzt genau wo anders als früher?
Einen Kommentar schreiben:
-
Das soll ja auch der Sinn der Sache sein, dass Die Variable überschrieben wird und einen anderen Wert hatZitat von weltvolk Beitrag anzeigenJa, aber so wird der eigentliche Wert von $var mit dem String "true" überschrieben, das hatte ich auch schon probiert. Oder setzt man gefüllte Variablen auf diese Weise auf 'true'?
damit das Script eben dort weitermacht wo var eben true ist und nicht dort wo var false ist.
Einen Kommentar schreiben:
-
Ja, aber so wird der eigentliche Wert von $var mit dem String "true" überschrieben, das hatte ich auch schon probiert. Oder setzt man gefüllte Variablen auf diese Weise auf 'true'?
Einen Kommentar schreiben:
-
Zitat von weltvolk Beitrag anzeigenBisher hat es immer funktioniert. Gibt es eine Möglichkeit, die Variable innerhalb der Funktion zu übergeben?^^ meinst du so?PHP-Code:function ftp_copy($x, $y) {
$var = false;
/*
...
*/
if (curl_exec($ch) !== false) {
curl_close($ch);
fclose($fp);
// Kein 'return', da sonst Funktion beendet, $z immer 'false', auch wenn Download erfolgt ist :-(
$var = true;
} else {
curl_close($ch);
fclose($fp);
// Wenn Download nicht geklappt hat, Datei löschen und Funktion beenden
unlink($z);
return false;
}
if($var == true) {
//mache Schritt 2
}
}
Einen Kommentar schreiben:
-
Bisher hat es immer funktioniert. Gibt es eine Möglichkeit, die Variable innerhalb der Funktion zu übergeben?
Einen Kommentar schreiben:
-
ich bin immernoch der Meinung das diese Funktionion nicht funktionieren kann.
Wenn Schritt 1 true ist wird nicht returned weil kein return vorhanden, wenn Schritt 1 false dann return false also wird Schritt 2 schon garnicht mehr ausgeführt.
Wieso teilst du die beiden Schritte nicht einfach in 2 Funktionen auf, wenn Funktion Schritt 1 true dann Funktion Schritt 2
Einen Kommentar schreiben:
Einen Kommentar schreiben: