Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Wie kann man file handles erzeugen?

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Wie kann man file handles erzeugen?

    Hallo, ich möchte mit hilfe der ftp befehle eine datei lesen aber nicht speichern, um es in einer textbox anzeigen zu lassen. Kurz gesagt ich brauche ein file handle in dem ich schreiben kann aber ohne jedes mal eine datei zu erzeugen.
    Gibt's da nicht ein befehl mit dem man ganz einfach handles erzeugen kann. Ich habe schon alles rauf und runter gelesen, ich möchte speziel die ftp befehle benutzen und nicht mit direkten links öffnen.

    Danke


  • #2
    So viel ich weiss, heisst FTP doch file transfer protocol. Da wäre es doch naheliegend, dass damit nur Files transferiert/verschoben und nicht gelesen werden können. Ich kann das jedoch nicht mit Sicherheit sagen.

    Kommentar


    • #3
      Zitat von blade81 Beitrag anzeigen
      Kurz gesagt ich brauche ein file handle in dem ich schreiben kann aber ohne jedes mal eine datei zu erzeugen.
      Gibt's nicht direkt in der Form.

      Wenn es einzig und allein um's Aufräumen des entstehenden "Mülls" geht - dann nutze ein Tempfile + ftp_nb_get.

      Alternative wäre bspw., das ganze über fsockopen zu machen - aber dann musst du dich mit der Implementierung des FTProtokolls selber herumschlagen.

      Kommentar


      • #4
        Danke ChrisB, das habe ich mir schon gedacht :/

        Es geht um den unnötigen Festplattenzugriff und Fehler detailierter auszugeben.
        Und wenn man die Datei direkt öffnet, muss man sich jedes Mal mit user und pw beim Host anmelden (oder merkt PHP das beim kompilieren?).

        An fsocket habe ich auch gedacht aber nur wegen dem fehlenden handle mache ich mir die mühe erst gar nicht.

        Gibt es da nicht ein handle von einem anderen Befehl, den man als Puffer missbrauchen könnte?

        Naja sonst öffne ich die direkt und wenn der host nicht da ist oder die datei mache ich echo "geht nicht".

        Kommentar


        • #5
          Hallo,

          bitte ändere deinen Threadtitel. Warum? Wie?
          http://hallophp.de

          Kommentar


          • #6
            php://memory wäre noch eine weitere Möglichkeit.
            http://www.php.net/manual/en/wrappers.php.php

            Kommentar


            • #7
              Ich hab was hier. Das könnte es sein. Muss ich zu Hause testen
              PHP: stream_wrapper_register - Manual

              Kommentar


              • #8
                Damit kann man sich ein handle basteln

                PHP-Code:
                    
                $existed 
                in_array("var"stream_get_wrappers());
                if (
                $existed) {
                    
                stream_wrapper_unregister("var");
                }


                class 
                VariableStream {
                    private 
                $position;
                    private 
                $varname;
                    public function 
                stream_open($path$mode$options, &$opened_path) {
                        
                $url parse_url($path);
                        
                $this->varname $url["host"];
                        
                $this->position 0
                        return 
                true;
                    }
                    public function 
                stream_read($count) {
                        
                $p=&$this->position;
                        
                $ret substr($GLOBALS[$this->varname], $p$count);
                        
                $p += strlen($ret);
                        return 
                $ret;
                    }
                    public function 
                stream_write($data){
                        
                $v=&$GLOBALS[$this->varname];
                        
                $l=strlen($data);
                        
                $p=&$this->position;
                        
                $v substr($v0$p) . $data substr($v$p += $l);
                        return 
                $l;
                    }
                    public function 
                stream_tell() {
                        return 
                $this->position;
                    }
                    public function 
                stream_eof() {
                        return 
                $this->position >= strlen($GLOBALS[$this->varname]);
                    }
                    public function 
                stream_seek($offset$whence) {
                        
                $l=strlen(&$GLOBALS[$this->varname]);
                        
                $p=&$this->position;
                        switch (
                $whence) {
                            case 
                SEEK_SET$newPos $offset; break;
                            case 
                SEEK_CUR$newPos $p $offset; break;
                            case 
                SEEK_END$newPos $l $offset; break;
                            default: return 
                false;
                        }
                        
                $ret = ($newPos >=&& $newPos <=$l);
                        if (
                $ret$p=$newPos;
                        return 
                $ret;
                    }
                }
                stream_wrapper_register("var""VariableStream"
                or die(
                "Failed to register protocol");

                $myvar "";
                   
                $fp fopen("var://myvar""r+");

                fwrite($fp"line1\n");
                fwrite($fp"line2\n");
                fwrite($fp"line3\n");

                rewind($fp);
                while (!
                feof($fp)) {
                    echo 
                fgets($fp);
                }
                fclose($fp);
                var_dump($myvar); 
                Soviel Aufwand :/

                Kommentar


                • #9
                  Zitat von blade81 Beitrag anzeigen
                  Soviel Aufwand :/
                  Wenn du die Hinweise, die dir gegeben werden, nicht verfolgst ...

                  Kommentar


                  • #10
                    Tut mir leid, hab vor freude die seite schnell übersprungen

                    So ist es natürlich am einfachsten.

                    PHP-Code:
                    $fp fopen("php://memory""r+");

                    fwrite($fp"line1\n");
                    fwrite($fp"line2\n");
                    fwrite($fp"line3\n");

                    rewind($fp);
                    while (!
                    feof($fp)) {
                        echo 
                    fgets($fp);
                    }
                    fclose($fp); 

                    Kommentar

                    Lädt...
                    X