Ohne return-Befehl Werte immer 'false'

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • weltvolk
    antwortet
    Also $z ist ja eigentlich nie komplett leer, da der Dateiname in Schritt 2 übertragen wird. Die Datei ist leer.

    Einen Kommentar schreiben:


  • pekka
    antwortet
    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:


  • weltvolk
    antwortet
    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:


  • pekka
    antwortet
    Prüfe mal durch schrittweise Testausgaben, an welcher Stelle $z geleert wird. Ab welcher Zeile ist $z leer?

    Einen Kommentar schreiben:


  • weltvolk
    antwortet
    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:


  • pekka
    antwortet
    Was macht die Funktion slash()?
    Was zeigt eine Testausgabe von $z direkt nach der Zuweisung von slash()?

    Einen Kommentar schreiben:


  • weltvolk
    antwortet
    @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:


  • pekka
    antwortet
    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:


  • weltvolk
    antwortet
    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:


  • pekka
    antwortet
    Also ich verstehe nur Bahnhof.
    Was verhält sich jetzt genau wo anders als früher?

    Einen Kommentar schreiben:


  • gourmet
    antwortet
    Zitat von weltvolk Beitrag anzeigen
    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'?
    Das soll ja auch der Sinn der Sache sein, dass Die Variable überschrieben wird und einen anderen Wert hat damit das Script eben dort weitermacht wo var eben true ist und nicht dort wo var false ist.

    Einen Kommentar schreiben:


  • weltvolk
    antwortet
    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:


  • gourmet
    antwortet
    Zitat von weltvolk Beitrag anzeigen
    Bisher hat es immer funktioniert. Gibt es eine Möglichkeit, die Variable innerhalb der Funktion zu übergeben?
    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
          
    }


    ^^ meinst du so?

    Einen Kommentar schreiben:


  • weltvolk
    antwortet
    Bisher hat es immer funktioniert. Gibt es eine Möglichkeit, die Variable innerhalb der Funktion zu übergeben?

    Einen Kommentar schreiben:


  • gourmet
    antwortet
    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:

Lädt...
X