Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP]ftp_get will nicht so wie ich es will (https://www.delphipraxis.net/56321-%5Bphp%5Dftp_get-will-nicht-so-wie-ich-es-will.html)

Luckie 3. Nov 2005 21:29


[PHP]ftp_get will nicht so wie ich es will
 
Ich versuche mit ftp_get eine Datei runterzuladen und lokal zu speichern, wie es ja angeblich möglich sein soll.

Implementiert ist das so:
Code:
      case '7':
        echo '<h3>Download file</h3>';
        echo '

';
        $path_parts = pathinfo($downloadfile);
        $filename = $path_parts["basename"];
        $destfile = $localdir.'\\'.$filename;
        $sourcefile = $newpath.'/'.$downloadfile;
        if (!@download_file($destfile , $sourcefile, FTP_BINARY))
        {
          echo 'Error!
';
          echo 'File [i]'.$sourcefile.'[/i] could not be save in [i]'.$destfile.'[/i]';
        }
        else
        {
          echo 'File [i]'.$sourcefile.'[/i] successfully downloaded in [i]'.$destfile.'[/i]';
        }
        echo '</p>';
        break;
Code:
function download_file($dest, $source, $mode)
    {
      $conn = ftp_connect(SERVER);
      ftp_login($conn, USER, PW);
      $result = ftp_get($conn, $dest, $source, $mode);
      ftp_close($conn);
      return $result;
    }
In $destfile steht dann so was drinne: d:\foobar.txt und in $sourcefile steht auch was gescheites drinne. Nur ladet die Datei nicht auf meiner loaklen Festplatte, sondern wieder auf dem Server in dem Verzeichnis, wo das Script ausgeführt wird unter dem Dateinamen, der in $destfile angegeben ist, also d:\foobar.txt heißt die datei dann. :(

Aber wenn das Hochladen vom lokalen Rechner geht, dann muss doch auch das Runterladen gehen. :gruebel:

ripper8472 3. Nov 2005 21:32

Re: [PHP]ftp_get will nicht so wie ich es will
 
die datei muss schon geoeffnet sein. so stehts aber auch in der doku... es wird ein filehandle verlangt.

Luckie 3. Nov 2005 21:35

Re: [PHP]ftp_get will nicht so wie ich es will
 
Sorry falsche Funktion verlinkt. das, was du sagst trifft auf ftp_fget zu, ich benutze aber ftp_get.

ripper8472 3. Nov 2005 21:46

Re: [PHP]ftp_get will nicht so wie ich es will
 
es ist klar, dass die datei auf dem server gespeichert wird, auf dem auch php laeuft.

runterladen geht ueber den browser, also musst du die datei im php script ausgeben.

Luckie 3. Nov 2005 21:50

Re: [PHP]ftp_get will nicht so wie ich es will
 
Das wollte mir auch alle bei ftp_put erklären und haben gesagt, das Script hätte keinen Zugriff auf meinem lokalen Rechner, um die Datei hochzuladen, letzt endlich ging es aber doch. Also muss es auch andersrum gehen. Ich habe nur noch nicht rausgefunden, was ich anders bzw. falsch mache.

Außerdem steht da ja:
Zitat:

Liest eine Datei von einem FTP-Server und speichert sie lokal (download)
Und lokal bedeutet für mich: 'hier bei mir und nicht auf dem Sever, wo das Script läuft'. Desweiteren habe ich schon Scripte gesehen und ausprobiert, die das auch konnten. Nur leider kann ich nicht nachvollziehen, was die anders machen als ich.

Also hört auf mir zu erzählen, dass das nicht ginge.

DGL-luke 3. Nov 2005 22:07

Re: [PHP]ftp_get will nicht so wie ich es will
 
ähm...

Luckie, ich will ja nicht rechthaberisch wirken, aber für ein PHP-Skript ist "lokal" der Server, auf dem es läuft. Der User kriegt nur, was der Browser kriegt, und der Browser kriegt nur, was du ihm per header, echo, print oder sonstigem zukommen lässt.

stell dir mal vor, ich bau mir ein php-skript, und bei jedem, der es ausführt landet einfach so "1337_virus.exe" im verzeichnis D:\ :shock: :mrgreen:

Du musst ein wenig anders an die Sache rangehen ;)

downloaden geht nur mit
Code:
header("Content-Type: application/octet-stream");
und anschließendem durchspulen des codes. ausser du verweist den browser auf eine tatsächlich existierende datei auf dem server.

Das hier:

Zitat:

Das wollte mir auch alle bei ftp_put erklären und haben gesagt, das Script hätte keinen Zugriff auf meinem lokalen Rechner, um die Datei hochzuladen, letzt endlich ging es aber doch.
Halte ich für ein gerücht, ohne uploadform, $_FILES[] und move_uploaded_file geht da gar nix. Echt nicht. Du musst da was falsch verstanden haben. (Copy&Paste? Na? Na? Na? :stupid: :mrgreen: )

bitte nicht falsch verstehen, aber es macht Spaß zu sehen, dass auch Mods nicht allwissend sind ;)

Im übrigen sehe ich keinen Sinn darin, etwas per FTP zu holen und dann dem user zu geben - verlinke da besser direkt auf eine Datei, hol sie direkt vom Filesystem des Servers, wenn es der gleiche ist, oder verweise den Browser auf die Datei.

Luckie 3. Nov 2005 22:10

Re: [PHP]ftp_get will nicht so wie ich es will
 
OK, gegenbeweis, hier mein Upload-Code:
Code:
    function upload_file($dest, $source, $mode)
    {
      $conn = ftp_connect(SERVER);
      ftp_login($conn, USER, PW);
      $result = ftp_put($conn, $dest, $source, $mode);
      ftp_close($conn);
      return $result;
    }
Code:
echo '<h3>Upload file</h3>';
          echo '

';
          if ($_FILES['uploadfile']['size'] < $MAX_FILE_SIZE)
          {
            if (!@upload_file('/'.$newpath.'/'.$_FILES['uploadfile']['name'], $uploadfile, FTP_BINARY))
            {
              echo 'Error!'.'
';
              echo 'File [i]'.$_FILES['uploadfile']['name'].'[/i] could not be saved in [i]'.$newpath.'[/i]';
              echo $_FILES['uploadfile']['error'];
            }
            else
            {
              echo 'File [i]'.$_FILES['uploadfile']['name'].'[/i] successfully saved in [i]'.$newpath.'[/i]
';
            }
            }
            else
            {
              echo 'The filesize of '.$_FILES['uploadfile']['name'].' ('.format_filesize($_FILES['uploadfile']['size']).') exceeds the allowed filesize of '.format_filesize(MAX_FILE_SIZE);
            }
Nichts mit move_uploaded_file . ;)

Und es soll ein WebFTP Client für mich werden und es gibt Verzeichnisse außerhalb des Documentroot-Folders, an die ich mit dem Browser nicht drankomme, aber mit einem FTP-Client. Und an die möchte ich natürlich auch mit meinem WebFTP Client drankommen.

Desweiteren bedeutet bei ftp_put lokal auch wirklich lokal:
Zitat:

int ftp_put ( int ftp_stream, string remote_file, string local_file, int mode )
Und es sind ja explizit FTP-Funktionen, also es ist das FTP Protokoll, was dazu geschaffen wurde Dateien zwischen Rechnern auszutauschen.

ripper8472 3. Nov 2005 22:11

Re: [PHP]ftp_get will nicht so wie ich es will
 
definition: lokal heisst auf sem server.

uploads und downloads laufen NUR ueber den browser.
upload:
auswahl der datei im browser.
browser sendet datei an script.
script speichert datei in einem /tmp verzeichnis.
im script verschiebt eine funktion diese tmpdatei an den entgueltigen ort.

download:
(hier wuerde dein ftp kram an die reihe kommen: datei vom ftp laden und aufm webserver speichern)
script liest datei (auf dem server) und gibt diese daten an den browser aus.
browser entscheidet, ob zum download anbieten oder anzeigen.

ich hab das alles schon mal gemacht und bin mir sicher, dass es nur so ablaeuft.

offtopic: luckie, ich hoffe du erinnerst dich an diesen thread, wenn ein anfaenger mal wieder deine nerven strapaziert. du machst es uns (mir jedenfalls) nicht leichter, indem du manche dinge einfach als gegeben ansiehst oder "lokal bin ich, nicht der server" sagst.

DGL-luke 3. Nov 2005 22:27

Re: [PHP]ftp_get will nicht so wie ich es will
 
Ok, Luckie, das move_uploaded_file fehlt nur, weil dus eben per FTP gleich hochlädst. Was bei einem WebFTP ja auch sinnvoll ist. Du greifst aber trotzdem auf $_FILES zu, das heisst, die Datei kommt vom Browser per POST-Anfrage in das temp-verzeichnis des webservers, das PHP-Script kriegt per $_FILES den pfad, und lädt das ganze dann auf einen FTP-Server hoch. es existiert zwischen Browser und Server also keine vom PHP-Skript "ausgelöste" FTP-Verbindung. Quod erat demonstrandum. ;)

Dass du beim WebFTP auch beim Download wieder die zwischenstation über den Webserver gehen musst, ist dann natürlich klar. also Vom FTP-Server zum Skript und von da zum browser. am besten per ftp_get, das stimmt. und von da aus dann per readfile, die spult dir eine komplette datei an den browser durch. Eventuell musst du vorher noch die header senden. ftp_get sollte dir ja direkt die datei im dateisystem des Webservers anlegen, diese kannt du dann durchspulen. wenn du einen Datezeiger hast, kannst du auch fpassthru nehmen. und danach das löschen der temporären datei nicht vergessen. ;)

Luckie 3. Nov 2005 22:52

Re: [PHP]ftp_get will nicht so wie ich es will
 
Zitat:

Zitat von DGL-luke
Dass du beim WebFTP auch beim Download wieder die zwischenstation über den Webserver gehen musst, ist dann natürlich klar. also Vom FTP-Server zum Skript und von da zum browser. am besten per ftp_get, das stimmt. und von da aus dann per readfile, die spult dir eine komplette datei an den browser durch. Eventuell musst du vorher noch die header senden. ftp_get sollte dir ja direkt die datei im dateisystem des Webservers anlegen, diese kannt du dann durchspulen. wenn du einen Datezeiger hast, kannst du auch fpassthru nehmen. und danach das löschen der temporären datei nicht vergessen. ;)

Ächtz. Kannst du mir da mal bitte ein Beispiel geben?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:01 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz