Autor Beitrag
blo
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Sa 11.11.06 03:17 
Hallo!
Ich möchte folgendes Problem lösen: Eine lokale Datei auf einen Webserver hochladen.
Testumgebung: D5 Prof, Indy 9.0.14, xampplight mit php 5.14.
Per FTP klappt das alles. Aber manchmal muss ich auf das Http-Protokoll ausweichen.
Habe versucht mich im Forum schlau zu machen, und verwende mittlerweile folgenden Delphi-Code:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.Button1Click(Sender: TObject);
var
  Data: TIDMultiPartFormDataStream;
begin
  Data := TIdMultiPartFormDataStream.Create;
  try
    Data.AddFile('archive''c:\temp\abc.zip''application/zip');
    IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
    Data.Position := 0;
    Memo1.Lines.Text := IdHTTP1.Post('http://localhost/upload.php', Data);
  finally
    Data.Free;
  end;
end;


Das zugeörige PHP-Script lautet:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
<?php
// In PHP earlier then 4.1.0, $HTTP_POST_FILES should be used instead of
// $_FILES.  In PHP earlier then 4.0.3, use copy() and is_uploaded_file()
// instead of move_uploaded_file

$uploaddir = 'tausch/';
$uploadfile = $uploaddir. $_FILES['archive']['name'];

print "<pre>";
if (move_uploaded_file($_FILES['archive']['name'], $uploadfile)) {
    print "File is valid, and was successfully uploaded. ";
    print "Here's some more debugging info:\n";
    print_r($_FILES);
}
 else {
    print "Possible file upload attack!  Here's some debugging info:\n";
    print_r($uploadfile);
}

?>


Wenn ich das Delphiprog. starte gibt das Php-Script zurück:
ausblenden Delphi-Quelltext
1:
2:
<pre>Possible file upload attack!  Here's some debugging info:
tausch/

Mit anderen Worten, die Datei wurde nicht auf den Server gespeichert.
Kann mir jemand helfen, damit die Datei auf den Server gespeichert wird?
blaueled
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 133

Win XP
D5
BeitragVerfasst: Sa 11.11.06 11:17 
Hallo,

hast du den savemode eingeschaltet ?
setz die berechtigungen mal auf 777

Arne
blo Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Sa 11.11.06 12:05 
Hallo Arne,
was meinst Du mit "savemode"?
Soweit ich das Problem mit meinem Programm verstehe (siehe Rückmeldung des Php-Scripts), erhält das Script erst gar nicht den File-Namen der Datei die gespeichert werden soll.
Ich finde nirgendwo eine Doku. die das erklärt (weder in "Indy in depth" oder sonstwo). Für das Ftp-Protokoll ist alles gut erklärt. Aber wer kennt ein gutes Beispiel für das Zusammenspiel Delphi <-> Php bzgl. Dateidown- bzw Upload? Könnte ich gut gebrauchen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 11.11.06 12:48 
Du nimmst ['name'], das ist aber doch der Dateiname auf dem Client-PC!! Und der existiert auf dem Server logischerweise nicht so ohne Pfadangabe...
Du musst ['tmp_name'] nehmen! DAS ist der Name und Pfad der temporären Datei (ich meine jetzt in Zeile 10 natürlich)!
blo Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Sa 11.11.06 13:27 
Sorry, du hast natürlich recht! Habe ich entsprechend wieder geändert, aber leider kommt immer die Nachricht:
<pre>Possible file upload attack! Here's some debugging info:
tausch/
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Sa 11.11.06 13:32 
Schau dir mal die php.ini an. Welcher Pfad ist für die Uploads eingetragen? hat der Benutzer darauf Rechte?

_________________
Markus Kinzler.
blo Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Sa 11.11.06 13:47 
Es handelt sich um einen lokalen Web-Server (xampplite), da sollte es doch keine Rechtprobleme geben, oder? Eingetragen ist in Php.Ini: upload_tmp_dir = "\xampplite\tmp"
Liegt nicht vielmehr das Problem in der Parameterübergabe? Selbst wenn der Befehl move_uploaded_file fehlschlägt, so sollte doch im else-Bereich der Name der Datei zurückgegeben werden?
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Sa 11.11.06 13:50 
Versuche mal upload_tmp_dir = "<LW>:\xampplite\tmp"

_________________
Markus Kinzler.
blo Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Sa 11.11.06 14:02 
Hab ich gemacht - leider keine Veränderung
blo Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mo 13.11.06 23:00 
Habe zwischenzeitlich den Fehler gefunden: Nachdem ich Indy auf 9.0.18 umgestellt habe und das neueste Xampp installiert habe, klappte alles.
Danke für die Unterstützung.