![]() |
Datei Upload via Http.Post
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:
Code:
Das zugeörige PHP-Script lautet:
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;
Code:
Wenn ich das Delphiprog. starte gibt das Php-Script zurück:
<?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']['tmp_name']; print "<pre>"; if (move_uploaded_file($_FILES['archive']['tmp_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); } ?>
Code:
Mit anderen Worten, die Datei wurde nicht auf den Server gespeichert.
<pre>Possible file upload attack! Here's some debugging info:
tausch/ Kann mir jemand helfen? |
Re: Datei Upload via Http.Post
Hi,
das erste Argument der Funktion move_uploaded_file() sollte besser $_FILES['archive']['tmp_name'] sein. Grüße vom marabu |
Re: Datei Upload via Http.Post
Danke für den Tip! Hab ich geändert - keine Veränderung.
|
Re: Datei Upload via Http.Post
Schau dir noch deine Variable uploadfile an - dort ist der gleiche Fehler: Muss ['name'] sein statt ['tmp_name'].
|
Re: Datei Upload via Http.Post
Habe ich geändert - keine Veränderung!
|
Re: Datei Upload via Http.Post
Keine Veränderung?
Wird immer noch ein leerer Namensteil in der Meldung ausgegeben? |
Re: Datei Upload via Http.Post
Ja, es wird immer noch
Zitat:
|
Re: Datei Upload via Http.Post
Ich habe dein Problem mit meinen Änderungen auf meinem Rechner nachgestellt - und es funktioniert. Allerdings gebe ich einen absoluten Verzeichnisnamen an und nicht "tausch/". Vielleicht ist ja das dein Fehler.
Grüße |
Re: Datei Upload via Http.Post
Habe einen absoluten Pfad gesetzt:
Delphi-Quellcode:
Jetzt kommt ein Parser-Error:
<?php
$uploaddir = 'c:\xampplite\htdocs\tausch\'; $uploadfile = $uploaddir. $_FILES['archive']['tmp_name']; print "<pre>"; if (move_uploaded_file($_FILES['archive']['tmp_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); } ?>
Delphi-Quellcode:
:wall: [b]Parse error[/b]: parse error, unexpected T_STRING in [b]C:\xampplite\htdocs\upload.php[/b] on line [b]3[/b] Würdest Du bitte dein PHP-Script und die Delphi-Routine einmal posten? Danke für die Mühe! |
Re: Datei Upload via Http.Post
Kipp mal die Schrägstriche in uploaddir in die entgegengesetzte Richtung und achte endlich auf die richtigen Namen - dann sehen wir weiter.
Code:
Grüße
$uploaddir = 'c:/xampplite/htdocs/tausch/';
$uploadfile = $uploaddir. $_FILES['archive']['name']; print "<pre>"; if (move_uploaded_file($_FILES['archive']['tmp_name'], $uploadfile)) { ... |
Re: Datei Upload via Http.Post
Habe ich geändert - Ergebnis:
Code:
<pre>Possible file upload attack! Here's some debugging info:
c:/xampplite/htdocs/tausch/ |
Re: Datei Upload via Http.Post
Poste mal deine php.ini
|
Re: Datei Upload via Http.Post
Nur mal nebenbei du könntest auch Prüfen ob die Datei eine PHP Datei oder sonst eine Ausführbare Datei ist denn es kann dann auf deinen Server ausgeführt werden, falls du verstehst was ich meine ;).
|
Re: Datei Upload via Http.Post
Du hast anscheinend keine Datei hochgeladen. Die Meldung kommt ja weil move_uploaded_file() scheitert und das kann bei fehlendem Dateinamen daran liegen, dass die von deinem Programm per AddFile() hinzugefügte Datei nicht gefunden wird. Bau mal eine Prüfung in dein Delphi-Programm ein:
Delphi-Quellcode:
Grüße
procedure TForm1.Button1Click(Sender: TObject);
var fn: TFileName; Data: TIDMultiPartFormDataStream; begin Data := TIdMultiPartFormDataStream.Create; try fn := 'c:\temp\abc.zip'; if FileExists(fn) then begin Data.AddFile('archive', fn, 'application/zip') IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded'; end else ShowMessage(Format('file "%s" not found', [fn])); //... |
Re: Datei Upload via Http.Post
Habe ich eingebaut: Datei existiert, Programm verzweigt also in den "then"-Teil und in Memo1.Lines steht wieder was ich zuletzt gepostet habe. Offensichtlich steht doch nichts in $_FILES, oder sehe ich das falsch?
|
Re: Datei Upload via Http.Post
Wie gesagt, zeige mal deine ini.
|
Re: Datei Upload via Http.Post
Liste der Anhänge anzeigen (Anzahl: 1)
Jemand hat nach meiner php.ini gefragt. Hier ist sie. Übrigens ist der zend-optimizer aktiviert.
|
Re: Datei Upload via Http.Post
füge mal
Code:
ein.
echo $_FILES['archive']['tmp_name'];
|
Re: Datei Upload via Http.Post
Ich würde sie an deiner stelle lieber Anhängen, 1288 Zeilen sind schon ne menge.
|
Re: Datei Upload via Http.Post
Habe ich gemacht:
Code:
Ich sehe keine Auswirkung des echo-Befehls. Aber der print_r($uploadfile) zeigt ja, dass $uploadfile nur den Inhalt aus $uploaddir besteht.
<?php
$uploaddir = 'c:/xampplite/htdocs/tausch/'; $uploadfile = $uploaddir. $_FILES['archive']['name']; echo $_FILES['archive']['tmp_name']; print "<pre>"; if (move_uploaded_file($_FILES['archive']['tmp_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); } ?> |
Re: Datei Upload via Http.Post
Zitat:
laß dir mal dessen Inhalt anzeigen
Code:
echo implode(",", $_FILES);
|
Re: Datei Upload via Http.Post
Wie muss ich das in upload.htm einbauen?
So?
Code:
<?php
print_r (implode(",", $_FILES)); ?> |
Re: Datei Upload via Http.Post
Am Besten gleich an den Anfang.
|
Re: Datei Upload via Http.Post
Hab ich an den Anfang gesetzt: Es wird nichts angezeigt!
|
Re: Datei Upload via Http.Post
Dann ist es gewiss. Die variable ist leer. Aktiviere mal zum Test die Globals und lasse dir dann $archive_file anzeigen.
|
Re: Datei Upload via Http.Post
Kenn mich mit Php nicht so gut aus:
Zitat:
Code:
und in upload.php folgendes eingetragen:
register_globals = On
Code:
Es wird nichts ausgegeben!
<?php
print_r ($archive_file); ?> |
Re: Datei Upload via Http.Post
Versuch mal
$archive |
Re: Datei Upload via Http.Post
Tut sich nichts!
|
Re: Datei Upload via Http.Post
Teste das PHP-Skript mal mit einem HTML-Formular.
|
Re: Datei Upload via Http.Post
Habe ich gemacht - im Ergebnis kein Unterschied.
Danach auf einen anderen Webserver ausprobiert: Ebenso kein Erfolg. So langsam bin ich es leid - macht einfach keinen Spass! :gruebel: |
Re: Datei Upload via Http.Post
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Schönes Wochenende für alle |
Re: Datei Upload via Http.Post
Möchte Bericht erstatten:
Nachdem ich deine Demo heruntergeladen habe klappte der Download immer noch nicht. Habe daraufhin Indy 9.0.14 deinstalliert und die letzte Version aus der 9er Serie installiert: 9.0.18 Ebenso Xampplite deinstalliert und die neueste Xampp-Version installliert. Und siehe da: Alles klappt! :spin2: Also: Dickes Lob für die Unterstützung! Der Update klappt jetzt also. Wenn ich jetzt eine Datei per Http downloaden will, muss diese Anfrage dann auch an ein Php-Script gerichtet werden? Wenn ja, durch welchen Befehl muss "move_uploaded_file" ersetzt werden? Wie war das mit den kleinen Finger ?! Gruss |
Re: Datei Upload via Http.Post
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz