Ohne return-Befehl Werte immer 'false'

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

  • weltvolk
    antwortet
    Eine davon betroffene Funktion poste ich hier mal direkt aus dem Skript (also etwas aus dem Zusammenhang gerissen, aber vollständig):
    PHP-Code:
    //Funktion kopiert per cUrl Dateien
    function ftp_copy ($x$y) {
      global 
    $server$benutzer$passwort$tempdir$ds;
      
    //Schritt 1: auf Remote-Server einloggen und Datei herunterladen
      
    $url "ftp://" $benutzer ":" $passwort "@" $server ":21" $x;
      
    // $z wird am Ende von Schritt 1 jetzt immer als 'false' angesehen :-(
      
    $z slash($tempdir"copy_" substr(strrchr($x$ds), 1));
      
    // $z wird geschrieben und später in Schritt 2 weiterverarbeitet
      
    $fp fopen($z"wb");
      
    $ch curl_init();
      
    curl_setopt($chCURLOPT_URL$url);
      
    curl_setopt($chCURLOPT_RETURNTRANSFER0);
      
    curl_setopt($chCURLOPT_UPLOAD0);
      
    curl_setopt($chCURLOPT_FILE$fp);
      if (
    curl_exec($ch) !== false) {
        
    curl_close($ch);
        
    fclose($fp);
        
    // Kein 'return', da sonst Funktion beendet, $z immer 'false', auch wenn Download erfolgt ist :-(
      
    } else {
        
    curl_close($ch);
        
    fclose($fp);
        
    // Wenn Download nicht geklappt hat, Datei löschen und Funktion beenden
        
    unlink($z);
        return 
    false;
      }
      
    // Schritt 2: auf Remote-Server einloggen und Datei hochladen
      
    $url2 "ftp://" $benutzer ":" $passwort "@" $server ":21" $y;
      
    // $z lesen
      
    $fp2 fopen($z"rb");
      
    $ch2 curl_init();
      
    curl_setopt($ch2CURLOPT_URL$url2);
      
    curl_setopt($ch2CURLOPT_RETURNTRANSFER1);
      
    curl_setopt($ch2CURLOPT_UPLOAD1);
      
    curl_setopt($ch2CURLOPT_INFILE$fp2);
      
    curl_setopt($ch2CURLOPT_INFILESIZEfilesize($z));
      if (
    curl_exec($ch2) !== false) {
        
    curl_close($ch2);
        
    fclose($fp2);
        
    unlink($z);
        
    // Funktion gibt 'true' aus, aber $z ist leer, nur der Dateiname wurde hochgeladen/kopiert
        
    return true;
      } else {
        
    curl_close($ch2);
        
    fclose($fp2);
        
    unlink($z);
        return 
    false;
      }

    Vor der Umstellung hatte es immer funktioniert. Kann man die Variable nicht einfach auf 'true' setzen, damit es keine Probleme gibt?

    Einen Kommentar schreiben:


  • pekka
    antwortet
    Japp!

    Einen Kommentar schreiben:


  • gourmet
    antwortet
    Zitat von pekka Beitrag anzeigen
    Ich glaube nicht, daß das der Punkt ist. Es ist ja nur eine Beispielfunktion.
    Dann sollte Weltvolk eine Beispielfunktion inklusive Aufruf liefern die seinem original Script nahe kommen, ansonsten hilft nur ein Blick in die Glaskugel

    Einen Kommentar schreiben:


  • pekka
    antwortet
    Zitat von gourmet Beitrag anzeigen
    $variable ist nirgendwo definiert!
    Ich glaube nicht, daß das der Punkt ist. Es ist ja nur eine Beispielfunktion.

    Einen Kommentar schreiben:


  • gourmet
    antwortet
    Zitat von weltvolk Beitrag anzeigen
    PHP-Code:
    function Beispiel () {
      if (
    $variable == true) {
        echo 
    "O. K.";
    // Hier kein return-Befehl und der Wert ist immer 'false', obwohl alles O. K./'true' ist
      
    } else {
        echo 
    "Fehler";
        return 
    false;
      }

    Hallo,

    die funktion ergibt so immer false.
    $variable ist nirgendwo definiert!
    setzte mal error_reporting, dann siehst du den Fehler.

    VG
    gourmet

    Einen Kommentar schreiben:


  • pekka
    antwortet
    Wenn nicht explizit ein return-Wert angegeben wird, wird null zurückgegeben. Das war aber schon immer so und hat sich mit PHP5 nicht geändert. Was meinst Du mit "Wahrheitswert"?
    Ich verstehe nicht, was Du meinst.

    Einen Kommentar schreiben:


  • weltvolk
    hat ein Thema erstellt Ohne return-Befehl Werte immer 'false'.

    Ohne return-Befehl Werte immer 'false'

    Bei meinem Provider ist auf PHP 5 umgestellt worden. Seitdem ist das Ergebnis eigener Funktionen, in denen kein return-Befehl eingebaut wurde, immer 'false', auch wenn der Vorgang erfolgreich war:
    PHP-Code:
    function Beispiel () {
      if (
    $variable == true) {
        echo 
    "O. K.";
    // Hier kein return-Befehl und der Wert ist immer 'false', obwohl alles O. K./'true' ist
      
    } else {
        echo 
    "Fehler";
        return 
    false;
      }

    Ich möchte das Ergebnis des erfolgreichen Vorgangs nicht per 'return' ausgeben, da dadurch die Funktion beendet würde. Im Skript habe ich eine zweischrittige Funktion, die im zweiten Schritt mit dem Ergebnis des ersten Schrittes arbeitet, weshalb ich bei Erfolg des ersten Schrittes eben nur den Wert haben möchte und kein Beenden der Funktion durch 'return'. Woran liegt es, dass bei fehlendem return-Befehl der Wahrheitswert jetzt immer 'false' ist und wie kann ich das ändern?
Lädt...
X