php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 14.12.2009, 19:31  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 4.651
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Der Code, so wie du ihn gepostet hast, funktioniert mit nur einem Upload genausowenig. Nochmal: Schau ins Beispiel und schau, wie das Array $_FILES aufgebaut ist.

Und Nein, du kannst nicht einfach so das komplette Array übergeben.
__________________
Entwickler aus Leidenschaft und ein Zahnrad in einem der größten Java-Projekte der Welt.
mepeisen ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.12.2009, 22:46  
Erfahrener Benutzer
 
Registriert seit: 06.03.2009
Beiträge: 162
strgg ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Der Code, so wie du ihn gepostet hast, funktioniert mit nur einem Upload genausowenig.
Der erstgepostete Code funktioniert einwandfrei, dieser geht aber noch nicht über curl.

Zu deinen Links-> Put ist erst ab PHP5.2 möglich (nutze momentan 5.19)
Zum zweiten Link: Ich hab bereits alle möglichen Varianten ausprobiert, z.B. $post_data als $_FILES ["filecontent"]["name"], $_FILES ["filecontent"]["temp_name"] definiert, erfolglos. Da das Beispiel (habs 1:1 übernommen) ein internes Verzeichnis nimmt, hingegen ich die $_FILES array als source habe, dachte ich mit dem Name oder Temp_name dienen zu können, leider vergeblich. temp_name sollte ja eigentlich gehen da das File ja nicht auf meinem Server oben ist, oder?
Ich nutze bisher zur Pfadangabe folgendes
PHP-Code:
$post_data$_FILES["filecontent"]["tmp_name"];
$post_data = array("dateiname" => "@".getcwd()."/".$post_data); 
Das Feld beim Formular heisst "dateiname".

Curl geht sonst auf meinem Host, doch bin erstmalig damit mit Upload File konfrontiert. Ich könnt mich echt schlagen weil das einfach nicht hinhaut


Hier das ganze Skript:
form.html
PHP-Code:
<form name="ul" method="POST" action="uppp3.php" enctype="multipart/form-data">

<
input type="file" size="64" name="filecontent"
<
input type="submit" name="u" value="Upload!">

</
form
uppp3.php
PHP-Code:
$post_data$_FILES["filecontent"]["tmp_name"];
$url "http://urlausactionvonform.de/dafadsfsdf";

$post_data = array("dateiname" => "@".getcwd()."/".$post_data); 
                
$ch curl_init($url); 
/* Follow redirects (optional) */
curl_setopt($chCURLOPT_FOLLOWLOCATION,1); 
curl_setopt($chCURLOPT_RETURNTRANSFER1); 
/* Use the "POST" method (possibly redundant)  */
curl_setopt($chCURLOPT_POST1); 
curl_setopt($chCURLOPT_POSTFIELDS$post_data);

/* Upload the file now */
$results curl_exec($ch);
curl_close ($ch);
echo 
$results

Geändert von strgg (16.12.2009 um 23:31 Uhr).
strgg ist offline  
Alt 17.12.2009, 09:45  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 4.651
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von strgg Beitrag anzeigen
Der erstgepostete Code funktioniert einwandfrei, dieser geht aber noch nicht über curl.
Für das nächste mal: Gewöhn dir die Besserwisserei ab, denn sowas ist ungesund
Der Code, so wie du ihn gepostet hattest (und du hast nur Code mit Curl gepostet) wird definitifv auch bei einer URL nie funktionieren. Punkt aus. Dass dein anderer Code völlig anders ausschaut kann hier niemand wissen.

Zu deinem letzten Code-Schnipsel eine Frage:
1. Wieso übergibst du das als dateiname aber im Formular steht "filecontent" als Name des Feldes? Du musst es an den Ziel-Server auch so übergeben, wie es dieser im Formular erwartet.
2. Ist der Code so vollständig? Wenn ja, gibt es die Datei im aktuellen Arbeitsverzeichnis (getcwd) gar nicht. Du musst den Dateinamen übergeben, wo die Datei sich befindet. Wenn du noch nichts mit der Datei angestellt hast, gibt es sie nur im Temp-Verzeichnis.
__________________
Entwickler aus Leidenschaft und ein Zahnrad in einem der größten Java-Projekte der Welt.
mepeisen ist offline  
Alt 17.12.2009, 16:53  
Erfahrener Benutzer
 
Registriert seit: 06.03.2009
Beiträge: 162
strgg ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Für das nächste mal: Gewöhn dir die Besserwisserei ab, denn sowas ist ungesund
Der Code, so wie du ihn gepostet hattest (und du hast nur Code mit Curl gepostet) wird definitifv auch bei einer URL nie funktionieren. Punkt aus.
Sorry, war nicht meine Absicht . Wollte nur damit sagen, dass folgender Code funktioniert
PHP-Code:
<form name="ul" method="post" action="http://myseite.com/archive" 
enctype="multipart/form-data" onsubmit="document.ul.u.value='Bitte warten ...';document.ul.u.disabled=true">
<
div id="files"><input type="file" size="64" name="filecontent"> <input type="submit" name="u" 
value="Upload!"></div>
</
form
Zitat:
Wieso übergibst du das als dateiname aber im Formular steht "filecontent" als Name des Feldes? Du musst es an den Ziel-Server auch so übergeben, wie es dieser im Formular erwartet
Ich habe gedacht durch die nachfolgende Umdefinition sei dies unerheblich $post_data = array("dateiname" => "@".getcwd()."/".$post_data);
Dann hab ich wohl falsch gedacht. Habs nun geändert
Zitat:
Ist der Code so vollständig? Wenn ja, gibt es die Datei im aktuellen Arbeitsverzeichnis (getcwd) gar nicht. Du musst den Dateinamen übergeben, wo die Datei sich befindet. Wenn du noch nichts mit der Datei angestellt hast, gibt es sie nur im Temp-Verzeichnis.
var_dump=
PHP-Code:
array(1) { ["dateiname"]=>  string(38"@/home/myfiles/website/tmp/phpCkkoZC" 
Ja der Code ist so vollständig Meinst also da fehlt ein wichtiges Stück? Die Sache ist die dass ich auf meinem Host eigentlich nur das Formular machen wollte, und der Upload geschieht auf einem anderen Server. Geht es nicht, die Datei nur "weiterzugeben" im Temp? Ich möchte ja nicht, dass der Dateiupload doppelt solange geht. Die Datei auf dem Server mit dem Formular bleibt danach nicht bestehend und wäre nicht notwendig wenn nicht unumgänglich.

Wie müsste ich denn vorgehen um die Datei richtig formatiert zu übergeben und ist ein temp_name nicht in der Lage den Upload and das Zielformular zu übergeben?

Sorry für die Fragen aber Danke für die Antworten

Geändert von strgg (17.12.2009 um 17:22 Uhr).
strgg ist offline  
Alt 17.12.2009, 23:27  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 4.651
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Also nochmal langsam.
1. Welches Formular nutzt du im Browser.
2. Welches Formular nutzt du für den ersten Datei-Upload
3. Welches Formular nutzt du für den zweiten Datei-Upload

Der Pfad ist falsch, wenn du die Datei nicht mittels move_uploaded_file da hin geschoben hast. Das ist wohl der Pfad deiner Webseite und da befindet sich eine hochgeladene Datei erst einmal überhaupt nicht. Hochgeladene Dateien befinden sich in der Regel irgendwo in /tmp unter Linux. Schau dir das$_FILES Array an, da gibt es den absoluten Dateinamen irgendwo. Alternativ wie gesagt erst move_uploaded_file nuten um die Datei in ein bestimmtes Verzeichnis zu schieben und danach dann den Upload via Curl.

Die Datei einfach nur "weiterzugeben" geht nicht. Du brauchst irgendein Protokoll. Entweder also auf dem Zielserver jeweils ein Formular, was du mittels curl aufrufst oder beispielsweise FTP. Wie soll der Zielserver sonst verstehen, was du von ihm willst?
__________________
Entwickler aus Leidenschaft und ein Zahnrad in einem der größten Java-Projekte der Welt.
mepeisen ist offline  
Alt 18.12.2009, 00:14  
Erfahrener Benutzer
 
Registriert seit: 06.03.2009
Beiträge: 162
strgg ist zur Zeit noch ein unbeschriebenes Blatt
Standard

1. Welches Formular nutzt du im Browser.
PHP-Code:
<form name="ul" method="POST" action="uppp3.php" enctype="multipart/form-data">
<
input type="file" size="64" name="dateiname"
<
input type="submit" name="u" value="Upload!">
</
form
2. Welches Formular nutzt du für den ersten Datei-Upload
Ziel ist mal einen Upload zustande zu kriegen um danach den Prozess zu duplizieren.
Dies ist die Datei uppp3.php welche das Formular weiterverarbeitet.
PHP-Code:
$post_data$_FILES["dateiname"]["tmp_name"];
$url "http://urlausactionvonform.de/dafadsfsdf";

$post_data = array("dateiname" => "@".$post_data); 
                
$ch curl_init($url); 
/* Follow redirects (optional) */
curl_setopt($chCURLOPT_FOLLOWLOCATION,1); 
curl_setopt($chCURLOPT_RETURNTRANSFER1); 
/* Use the "POST" method (possibly redundant)  */
curl_setopt($chCURLOPT_POST1); 
curl_setopt($chCURLOPT_POSTFIELDS$post_data);

/* Upload the file now */
$results curl_exec($ch);
curl_close ($ch);
echo 
$results
Zitat:
Der Pfad ist falsch, wenn du die Datei nicht mittels move_uploaded_file da hin geschoben hast. Das ist wohl der Pfad deiner Webseite und da befindet sich eine hochgeladene Datei erst einmal überhaupt nicht. Hochgeladene Dateien befinden sich in der Regel irgendwo in /tmp unter Linux.
Danke, hab ich nicht gewusst. dann war getcwd() völlig daneben.

Zitat:
Die Datei einfach nur "weiterzugeben" geht nicht. Du brauchst irgendein Protokoll. Entweder also auf dem Zielserver jeweils ein Formular, was du mittels curl aufrufst oder beispielsweise FTP. Wie soll der Zielserver sonst verstehen, was du von ihm willst?
Was fehlt denn bei der Übergabe an den Zielserver, Danke?
die url ist von form action, in curl hab ich ebenfalls das array mit dem formularuploadnamen (welcher "dateiname" ist) und dem Array
PHP-Code:
$post_data = array("dateiname" => "@".$post_data); 
..weitergegeben.

Ich bin echt am verzweifeln, auch trial&error bringt mich nicht weiter. Irgendwie hab ich das Ganze nicht kapiert. Muss ich die Datei denn auf dem Server mit dem Formular zwischenspeichern?Beim ersten Beispiel ohne Curl funktionierts doch auch ohne:
PHP-Code:
<form name="ul" method="post" action="http://myseite.com/archive" 
enctype="multipart/form-data" onsubmit="document.ul.u.value='Bitte warten ...';document.ul.u.disabled=true">
<
div id="files"><input type="file" size="64" name="filecontent"> <input type="submit" name="u" 
value="Upload!"></div>
</
form
Danke für jeden noch so kleinen Hieb in die richtige Richtung
strgg ist offline  
Alt 18.12.2009, 13:03  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 4.651
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Also. Ich versuchs mal anders (In Prosa).

1. Besucher öffnet über den Browser das Formular http://www.foo.com/upload.php
2. Besucher wählt eine Datei aus und klickt auf Abschicken
3. upload.php auf Server http://www.foo.com nimmt das Formular entgegen, die Datei befindet sich irgendwo in /tmp oder sonstwo.
4. upload.php macht einen Upload auf Server http://www.bar.com/somepath/any.php und nutzt dabei das Formularfeld "Datei"
5. any.php nimmt die Datei über das Formularfeld "Datei" entgegen und speichert sie mittels move_uploaded_file dahin, wo sie hin soll
6. upload.php macht einen Upload auf Server http://www.bar.com/otherpath/some.php und nutzt dabei das Formularfeld "File".
7. some.php nimmt die Datei über das Formularfeld "File" entgegen und speichert sie mittels move_uploaded_file dahin, wo sie hin soll.

Nun schau, bei welchem Schritt du einen Denkfehler hast. Ich denke du hast ein Verständnisproblem, wie ein Dateiupload via HTTP funktionieren soll. Du brauchst dazu immer ein Script am Ende, was die Datei über ein Formularfeld entgegennimmt. Wenn der Browser den Upload macht, musst du ein Formular ausgeben und nach Submit entgegennehmen. Wenn du jedoch vom Script aus einen Upload auf einen anderen Server machst, muss der andere Server das Formular zwar nicht mehr ausgeben, dennoch muss er es irgendwie entgegennehmen.
Einfach so hochladen ohne dass ein Script die Datei entgegennimmt ist per HTTP schlichtweg unmöglich (zumindest via POST). Es wäre über die HTTP-Action PUT möglich, was jedoch in den meisten Fällen an der Konfiguration des Webservers scheitert.

Ich hoffe nun, etwas zur Aufklärung beigetragen zu haben.
__________________
Entwickler aus Leidenschaft und ein Zahnrad in einem der größten Java-Projekte der Welt.
mepeisen ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] file upload - MAX_FILE_SIZE notwendig? taurus PHP Tipps 2009 5 04.12.2009 01:28
Bild / File Upload zu einem Beitrag besser abwickeln? litterauspirna PHP Tipps 2009 9 13.02.2009 19:34
HTML: File Upload: Maske moeglich? SvenLittkowski HTML, Usability und Barrierefreiheit 4 28.08.2007 23:41
Problem mit File Upload b++ PHP Tipps 2006 2 26.04.2006 20:35
File Upload tomtaz PHP Tipps 2006 1 19.04.2006 14:58
file upload & bilder resize PHP Tipps 2006 3 15.02.2006 18:56
File Upload für dateien größer als 1GB b++ PHP Tipps 2006 14 08.02.2006 21:59
[Erledigt] File Upload mit mehreren Files PHP-Fortgeschrittene 16 16.01.2006 12:07
File Upload Server, Hosting und Workstations 2 24.05.2005 17:07
update auf php 5.0.4 robo47 Server, Hosting und Workstations 6 10.04.2005 19:00
file upload + und pic gleichzeitig verkleinern PHP Tipps 2004-2 3 16.12.2004 08:09
Problem mit File Upload PHP Tipps 2004-2 2 19.11.2004 13:41
[Erledigt] file upload PHP-Fortgeschrittene 4 29.10.2004 13:07
File upload PHP-Fortgeschrittene 3 23.08.2004 17:16
[Erledigt] File Upload: PRoblem mit Upload directory PHP Tipps 2004 3 26.06.2004 13:20

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
getcwd mit protokoll, http://www.php.de/php-einsteiger/62252-file-upload-mehrere-verzeichnisse-2.html, php dateiupload in spezielles verzeichnis, php upload mehrere verzeichnisse, fileupload auf anderen server, 2 uploader auf einer php seite?, verzeichnis upload php, php per script dateien in ein bestimmtes verzeichnis hochladen, php ftp upload in ein bestimmtes verzeichnis script, move_uploaded_file in mehreren verzeichnisse, php _files datei duplizieren, curl hochladen unterverzeichnisse, file upload mit zielordner php, upload von dateien in bestimmtes verzeichnis, move_uploaded_file mehrere verzeichnisse, _files array weiterverarbeiten, php datei upload in mehrere verzeichnisse, dateien in bestimmtes verzeichnis hochladen mit php, \verzeichnis upload\ script mit resizer, php bilder upload in bestimmtes verzeichnis

Alle Zeitangaben in WEZ +1. Es ist jetzt 15:10 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum