Ohne return-Befehl Werte immer 'false'

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • weltvolk
    replied
    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?

    Leave a comment:


  • pekka
    replied
    Japp!

    Leave a comment:


  • gourmet
    replied
    Originally posted by pekka View Post
    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

    Leave a comment:


  • pekka
    replied
    Originally posted by gourmet View Post
    $variable ist nirgendwo definiert!
    Ich glaube nicht, daß das der Punkt ist. Es ist ja nur eine Beispielfunktion.

    Leave a comment:


  • gourmet
    replied
    Originally posted by weltvolk View Post
    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

    Leave a comment:


  • pekka
    replied
    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.

    Leave a comment:


  • weltvolk
    started a topic 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?
Working...
X