AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [PHP]ftp_get will nicht so wie ich es will
Thema durchsuchen
Ansicht
Themen-Optionen

[PHP]ftp_get will nicht so wie ich es will

Ein Thema von Luckie · begonnen am 3. Nov 2005 · letzter Beitrag vom 4. Nov 2005
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#11

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

  Alt 4. Nov 2005, 00:04
Code:
function ftp_passthru($ftphandle,$filename,$tmppath) {
ftp_get($ftphandle,$tmppath.'/'.basename($filename),$filename,octdec("777"));
header(Content-Type: application/x-download);
readfile($tmppath.'/'.basename($filename));
unlink($tmppath.'/'.basename($filename));
}
sollte "prinizipiell" funktionieren. evtl. macht das basename probleme.

jetzt muss ich aber ganz schnell off, cu.

Kontodaten kommen dann per PM.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#12

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

  Alt 4. Nov 2005, 00:27
Ich habe jetzt folgendes gefunden:
Code:
<?php
  $tp = tmpfile ();
  // get file as the tempfile created
  $result = @ftp_fget ( $fp, $tp, $newpath.'/'.$downloadfile, FTP_BINARY);

  // if the server sucessfully got the file
  if ( $result )
  {
    header( "Content-Disposition: inline; filename=$newpath.'/'.$downloadfile\n\n");
    header ( "Content-type: applicatation/download; name=\"$newpath.'/'.$downloadfile\"\n\n" );
    rewind ( $tp );
    fpassthru ( $tp );
    die ();
  }
?>
Dies sollte eigentlich den Datei-Download-Dialog öffnen. Tut es aber leider nicht. das
Code:
$newpath.'/'.$downloadfile
ergibt zum Beispiel: /html/Ablage/02 Gipsy.jpg, sollte also stimmen. Ausgegeben wird aber nur eine leere Seite mit diesem Quelltext:
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=windows-1252"></HEAD>
<BODY></BODY></HTML>
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
ripper8472

Registriert seit: 17. Aug 2003
275 Beiträge
 
#13

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

  Alt 4. Nov 2005, 01:10
fseek($tp, 0, SEEK_SET); vor dem passthruen
Christoph
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#14

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

  Alt 4. Nov 2005, 01:13
Code:
<?php
  $tp = tmpfile ();
  // get file as the tempfile created
  $result = @ftp_fget ( $fp, $tp, $newpath.'/'.$downloadfile, FTP_BINARY);

  // if the server sucessfully got the file
  if ( $result )
  {
    header( "Content-Disposition: inline; filename=$newpath.'/'.$downloadfile\n\n");
    header ( "Content-type: applicatation/download; name=\"$newpath.'/'.$downloadfile\"\n\n" );
    rewind ( $tp );
    fseek($tp, 0, SEEK_SET);
    fpassthru ( $tp );
    die ();
  }
?>
Änderert leider nichts an der Ausgabe.
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=windows-1252"></HEAD>
<BODY></BODY></HTML>
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
ripper8472

Registriert seit: 17. Aug 2003
275 Beiträge
 
#15

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

  Alt 4. Nov 2005, 01:25
kann es sein, dass dieses tmpfile() nicht fuer lesezugriff geoeffnet ist?
probier mal selber eins anzulegen (tempnam).

ist $result wirklich === true? var_dump($result) vor dem if waere aufschlussreich
Christoph
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#16

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

  Alt 4. Nov 2005, 01:33
Zitat:
tmpfile
Erstellt eine temporäre Datei mit einem eindeutigen Dateinamen im Schreibmodus und gibt einen Dateizeiger ähnlich wie es bei der Funktion fopen() erfolgt, zurück. Die Datei wird automatisch gelöscht, wenn sie geschlossen wird (mit fclose()), oder das Skript beendet wird.
Also rein schreiben sollte gehen.

Hm, $result ist NULL. Und jetzt?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
ripper8472

Registriert seit: 17. Aug 2003
275 Beiträge
 
#17

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

  Alt 4. Nov 2005, 01:39
wenn result null ist, dann ist schon da oben der fehler. kontrolliere bitte alle parameter.
$result sollte eigentlich nur true oder false sein, niemals NULL... wundert mich. dich nicht?

dieses tmpfile muss auch lesezugriff haben, sonst is asche mit fpassthru.
Christoph
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#18

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

  Alt 4. Nov 2005, 02:15
Ich habe vergessen vorher eine Verbindung zu dem FTP-Server aufzubauen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#19

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

  Alt 4. Nov 2005, 08:58
Zitat von Luckie:
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.
Wenn dir alle etwas anders erzählen, solltest du vielleicht mal anfangen nachzudenken...

Zitat von Luckie:
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&lt;/h3&gt;';
          echo '&lt;p&gt;';
          if ($_FILES['uploadfile']['size'] &lt; $MAX_FILE_SIZE)
          {
            if (!@upload_file('/'.$newpath.'/'.$_FILES['uploadfile']['name'], $uploadfile, FTP_BINARY))
            {
              echo 'Error!'.'&lt;br&gt;';
              echo 'File &lt;i&gt;'.$_FILES['uploadfile']['name'].'&lt;/i&gt; could not be saved in &lt;i&gt;'.$newpath.'&lt;/i&gt;';
              echo $_FILES['uploadfile']['error'];
            }
            else
            {
              echo 'File &lt;i&gt;'.$_FILES['uploadfile']['name'].'&lt;/i&gt; successfully saved in &lt;i&gt;'.$newpath.'&lt;/i&gt;&lt;br&gt;';
            }
            }
            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.
Sicher geht das, du lädst ja etwas von deinem Server (dem FTP-Client) auf deinen Server (dem FTP-Server). Wenn in der PHP-Dokumentation "lokal" steht, dann meinen die den Rechner, auf dem PHP ausgeführt wird.

Jetzt noch einmal ausführlich von Jemandem, der seit ~3 Jahren richtig große Web-Applikationen mit PHP schreibt (> 50.000 Zeilen):

Wenn du einen Form-Based-File-Upload machst, also
Code:
<form method="post" action="meinscript.php">
<input type="file" ...>
</form>
und man damit eine Datei auswählt und das Formular abschickt, dann wird der Inhalt der Datei zusammen mit der Anfrage an deinen Webserver geschickt. Die Datei ist also schon auf dem Server wenn dein Skript ausgeführt wird.

Die Funktion move_uploaded_file dient nur dazu, die dafür angelegte temporäre Datei an die endgültige Position zu verschieben. Darum bekommt diese Funktion als Parameter auch die Namen von zwei Dateien auf deinem Server und nicht den ersten von deinem lokalen Rechner.

Wenn es anders nicht ginge, meinst du nicht dann gäbe es schon 1.000 Skripte für das, was du zu implementieren versuchst?

Ich muss jetzt los - wenn du es immer noch nicht glaubst, dann schreibe ich dir nachher ein kleines Skript...

@ripper8472: Bestärke ihn doch nicht noch in seinem Irrglauben, es ginge nur über eine FTP-Verbindung.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#20

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

  Alt 4. Nov 2005, 10:24
@FLocke: Ja, ich habe ihm das auch schon ein paar mal gesagt. Ich glaube, er glaubts mir inzwischen. Im übrigen sind da doch ien paar nicht ganz saubere Sachen in deinem Post...

Code:
<?php
  $tp = tmpfile ();
  // get file as the tempfile created
  $result = @ftp_fget ( $fp, $tp, $newpath.'/'.$downloadfile, FTP_BINARY);

  // if the server sucessfully got the file
  if ( $result )
  {
    header ( "Content-Disposition: inline; filename=$downloadfile\n\n"); //der pfad ist ja wohl irrelevant
    header ( "Content-type: application/x-download" ); //fipptehler, ausserdem mal das filename zeuchs weggelassen. braucht man doch nicht zweimal.
    rewind ( $tp ); //nach rewind braucht man kein seek mehr
    fpassthru ( $tp );
    flush(); //flush ist sauberer als die.
  }
?>
Hab hier ein paar Fehler ausgebessert. sollte so gehen, wenn du zuvor die FTP-Verbindung aufbaust und die Variablen setzt.

Wie aus diesem Script die unten angegebenen Metas rauskommen sollen, ist mir aber schleierhaft.

Ansonsten könntest du ja auch das von mir mal ausprobieren. Ich bin zwar kein Pro wie Flocke, aber trotzdem...
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:36 Uhr.
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