Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Dateiupload mit php

Empfohlene Antworten

Veröffentlicht

Hallo zusammen,

habe Probleme beim Upload von Dateien.

Quelltext wie folgt:

<form enctype="multipart/form-data" method="post" action="upload.php">

<table align=center width=90% border=0>

<tr><td id=headline colspan="3" align=center width=100%>

<b>Bitte die entsprechende Datei uploaden</b></td>

</tr>

<tr><td width=65%>File to Upload:</td>

<td><input type="file" name="file" size="30"></td>

<td><input type="submit" name="submit" value="Datei senden"></td>

</tr>

</table>

</form>

und in der upload.php wie folgt:

<?

$path = "/root/home/upload/$file_name";

if (!move_uploaded_file($file,$path.$file_name);)

{

echo "Hier steht dieser Text, falls etwas nicht geklappt hat.";

} else {

echo "Die Datei $file_name wurde erfolgreich hochgeladen.";

}

?>

Wenn ich nun eine Datei uploaden will, dann wird mir nix angezeigt, weder positive noch negative Rückmeldung, was ja eigentlich sein sollte.

Habe schon viel probiert, komme aber nihct auf den Fehler.

Kann mir jemand helfen??

MfG

Big B

Ich möchte dich mal auf diesen Thread[1] hinweisen. Da ist unter anderem diese Seite[2] verlinkt. Da steht wie du einen Upload hinbekommst. Ich denke mal das es daran liegt das die nicht mit der temporären Datei Arbeitest die php für dich anlegt. Weil die Datei ja nicht direk in dein Endverzeichnis kopiert wird sondern erstmal in ein Temporäres. Aus diesem musst du dann via move_uploded_file die Datei in dein Verzeichnis auf dem Server kopieren.

[1] http://forum.fachinformatiker.de/skript-webserverprogrammierung/92126-jpgs-hochladen.html

[2] http://www.php-faq.de/q/q-formular-upload-php4.html

Also habe leider trotzdem noch Fragen:

"./newfile.txt" ..... für was steht dies?? muss ich mir eine Textdatei anlegen, in der der Pfad hinterlegt ist?

Habe jetzt einfach mal dort meine Pfadangabe reingesteckt und dann ausprobiert, auch weider das selber weißer Bildschirm.

Blicke irgendwie nicht durch :(

MfG

Big B

P.S. Im selben Zug noch die Frage, kann ich die Uploadfunktion, sollte ich sie irgendwie mit euerer Hilfe ans Laufen kriegen, in ein JavaScript Popup auslagern??

Hast du dir mal die Parameter der Funktion move_uploaded_file angesehen? Da gibst du ja zuerst den temporären Ordner an und dann das Verzeichnis mit dem Dateinamen. Das Beispiel mit der ./newfile.txt soll nur andeuten das er jetzt eine neue Datei anlegt. Dem Server ist es erstmal egal welche Endung die Datei hat und der Inhalt auch. Du musst nun wissen was für eine Datei der User hochladen hat. Dafür gibst du am besten mal das $_FILES Array aus und schaust es dir an. Mit Hilfe des php Manuals kannst du die einzelnen Daten sicherlich interpretieren.

Gib doch mal bitte den die jetzt veränderten Codezeilen kurz mit an also das Formular und auch den dazugehöreigen php Teil.

Ob das in einem zusätzlichen popup Fenster geht kann ich dir jetzt nicht genau sagen mir fällt aber spontan nichts ein weshalb es nicht gehen sollte. Ist eben von deinen Scripten abhängig.

Also momentaner STand ist:

<form enctype="multipart/form-data" method="post" action="upload.php">

<table align=center width=90% border=0>

<tr><td id=headline colspan="3" align=center width=100%><b>Bitte die entsprechende Datei uploaden</b></td></tr>

<tr><td width=65%>File to Upload:</td><td><input type="file" name="probe" size="30"></td>

<td><input type="submit" name="submit" value="Datei senden"></td></tr>

</table>

</form>

also quasi gleichgeblieben bis auf den Namen.

<?

$path = "/root/home/upload/$file_name";

if (isset($_FILES['probe']) and ! $_FILES['probe']['error']) {

// Alternativ: and $_FILES['probe']['size']

move_uploaded_file($_FILES['probe']['tmp_name'], $path.$$_FILES['probe']['name']);

printf("Die Datei %s steht jetzt als " .

"newfile.txt zur Verfügung.<br />\n",

$_FILES['probe']['name']);

printf("Sie ist %u Bytes groß und vom Typ %s.<br />\n",

$_FILES['probe']['size'], $_FILES['probe']['type']);

}

?>

Wenn ich nun das Upload versuche, dann kommt folgende Meldung:

Die Datei test.doc steht jetzt als newfile.txt zur Verf?

Sie ist 10752 Bytes groߠund vom Typ application/msword.

Problem an der Sache ist nur, die Datei ist nihct in dem Verzeichniss, wo sie sein sollte :confused: :( :confused:

arbeitest du lokal oder läuft das auf einem webspace?

ich hatte mal das problem, dass move_uploaded_file nicht klappte da ich keine rechte hatte im temporären verzeichnis zu "cutten"

probiers mal mit dem copy() befehl

ansonsten sehe ich noch evtl. einen fehler bei

..$path.$$_FILES['probe']['name']);

da sind $$ eines zuviel meiner meinung nach

Also das mit dem doppelten $ war en Scheribfehler, danke für den Hinweis, aber auch mit nach Verbesserung funzt es nicht.

Habe auch mal die Alternative mit copy probiert:

copy($_FILES['probe']['tmp_name'], $path.$_FILES['probe']['name']);

funzt aber natürlich auch nicht.

Habe echt keine AHnung an was es liegen kann.

MfG

Big B

dann sollte es am pfad liegen. lass dir den mal auf der seite ausgeben!!

du hast hier definiert:

$path = "/root/home/upload/$file_name";

dann machst du

move_uploaded_file($_FILES['probe']['tmp_name'], $path.$$_FILES['probe']

das ist doppelt gemoppelt und du solltest $file_name aus der $path variablen rausnehmen da du ja nach $path.$_FILES['probe'] kopierst

Also habe den Code wie folgt geändert:

<?

$path = "/root/home/upload/";

echo $path;

if (isset($_FILES['probe']) and ! $_FILES['probe']['error']) {

move_uploaded_file($_FILES['probe']['tmp_name'], $path.$_FILES['probe']['name']);

if (!move_uploaded_file($_FILES['probe']['tmp_name'], $path.$_FILES['probe']['name']))

{

printf("Die Datei %s steht jetzt " . " zur Verfügung.<br />\n", $_FILES['probe']['name']);

printf("Sie ist %u Bytes groß und vom Typ %s.<br />\n", $_FILES['probe']['size'], $_FILES['probe']['type']);

}

else

{

echo "der ****** funzt nicht";

}

}

?>

Funktioniert immer noch nicht...

MfG

Big B

wie isses denn mit den rechten des ordner "upload"...hast du da schreibrechte?

Ja, ist mit 777 eingerichtet, sprich Vollzugriff für jeden.

Also habe den Code wie folgt geändert:


move_uploaded_file($_FILES['probe']['tmp_name'], $path.$_FILES['probe']['name']);
if (!move_uploaded_file($_FILES['probe']['tmp_name'], $path.$_FILES['probe']['name']))[/php]

Kann so auch nicht funktionieren ;)

move_uploaded_file verschiebt die hochgeladene Datei an den angegebenen Ort. Direkt nach dem Verschieben versuchst du nochmal die Datei zu verschieben und prüfst es dabei dann auch ab. Und beim zweiten mal kann es ja nicht mehr gehen. ;)

Also wenn ich das richtig verstanden habe sollte der Code jetzt so richtig sein:

<?

$path = "home/upload/";

echo $_FILES['probe']['tmp_name'];

echo $path.$_FILES['probe']['name'];

if (isset($_FILES['probe']) and ! $_FILES['probe']['error']) {

if (!move_uploaded_file($_FILES['probe']['tmp_name'], $path.$_FILES['probe']['name']))

{

printf("Die Datei %s steht jetzt " . " zur Verfügung.<br />\n", $_FILES['probe']['name']);

printf("Sie ist %u Bytes groß und vom Typ %s.<br />\n", $_FILES['probe']['size'], $_FILES['probe']['type']);

}

else

{

echo "der ****** funzt nicht";

}

}

?>

aber noch immer das selbe Problem, die Datei kommt nicht auf dem Server an.

Ist es von Bedeutung, das es sich um einen Linux-Server handelt??

Kann es vielleicht an der Pfad angabe liegen?? Ab wo muss ich diese beginnen??

MfG

Big B

<?

$path = "home/upload/";

?>

Ist es von Bedeutung, das es sich um einen Linux-Server handelt??

Ja, denn diesen Pfad gibt es wohl nicht (kam mir vorhin schon komisch vor, aber ich dachte, du wüsstest, was du tust ;)

Ich schätze mal, du meinst $path = "/home/upload/";

Das oberste Verzeichnis wird auch root genannt (Wurzel (im Verzeichnisbaum)). /root/home... kann es auch geben, aber das ist eher selten, nur wenn du es explizit so angelegt hast.

Mehr zu Verzeichnissen unter Linux findest du z.B. hier:

http://www.selflinux.org/selflinux/html/verzeichnisse_unter_linux01.html

Ach ja, AFAIK reicht ein move_uploaded_file um zu prüfen, ob der Upload angekommen und ok ist. Die Prüfung vorher könntest du dir dann sparen.

Hallo,

sry das ich erst jetzt wieder poste, aber mir wurde was mit einer wichtigeren prio reingeschoben...

Aber das Problem besteht immer noch, auch wenn ich $path anpasse...

$path = "/home/db/upload/";

solangsam krieg ich en Hals,...

Bin auch der festen Überzeugung das es an LINUX liegt, weil bei Windows hatt ich nie Probleme :D

Kann mir jemand noch mit Ideen oder Wissen helfen??

MfG

Big B

Hallo,

sry das ich erst jetzt wieder poste, aber mir wurde was mit einer wichtigeren prio reingeschoben...

Aber das Problem besteht immer noch, auch wenn ich $path anpasse...

$path = "/home/db/upload/";

Also der geasmte Upload Code sieht jetzt wie folgt aus:

<?

$path = "/home/db/upload/";

echo $_FILES['probe']['tmp_name'];

echo $path.$_FILES['probe']['name'];

if (isset($_FILES['probe']) and ! $_FILES['probe']['error']) {

//copy($_FILES['probe'], "uploads/".$_FILES['probe']);

if (!move_uploaded_file($_FILES['probe']['tmp_name'], $path.$_FILES['probe']['name']))

{

printf("Die Datei %s steht jetzt " . " zur Verfügung.<br />\n", $_FILES['probe']['name']);

printf("Sie ist %u Bytes groß und vom Typ %s.<br />\n", $_FILES['probe']['size'], $_FILES['probe']['type']);

}

else

{

echo "der ****** funzt nicht";

}

}

?>

solangsam krieg ich en Hals,...

Bin auch der festen Überzeugung das es an LINUX liegt, weil bei Windows hatt ich nie Probleme :D

Kann mir jemand noch mit Ideen oder Wissen helfen??

MfG

Big B

aaalso mal ganz langsam und von vorn ;)

an linux leigts bestimmt nicht.

poste doch mal den gesamten pfad der anwendung

und dann poste wohin genau du die datei haben willst.

so wie das jetzt ist glaube ich nicht daran dass es funktionieren kann, denn wenn deine anwendung z.b. hier liegt:

http://localhost/ordner/upload.php

und dein pfad dann /home/db/upload/ ist, würdest du ja deine datei nach

http://localhost/ordner/home/db/upload/ kopieren wollen und das ist es sicher nicht oder?

poste mal beide, also anwendungs und dateispeicher ordner. meinetwegen in pseudo form, muss ja nich jeder deine "echte" ordnerstruktur und server sehn

Hi,

also ich will definitiv in den Ordner /home/da/uploads die Datei uploaden.

meine uploadscript befinden sich in /a/b/c/d/upload.php

Also liegt es wohl daran, wenn cih dich richtig verstanden habe, aber wie kann ich das denn ändern?

MfG

Big B

Hi,

also ich will definitiv in den Ordner /home/da/uploads die Datei uploaden.

meine uploadscript befinden sich in /a/b/c/d/upload.php

Also liegt es wohl daran, wenn cih dich richtig verstanden habe, aber wie kann ich das denn ändern?

MfG

Big B

hmm schwieriger fall ;)

du musst aus deinem ordner /a/b/c/d/upload.php einfach so weit zurückgehen bis du im übergeordneten ordner von /home/ bist

z.b. deine ordnerstruktur


www

    home

        da

            uploads

        a

            b

                c

                   d/upload.php

dann is der pfad in deinen upload ordner

../../../../da/uploads

naja und für andere fälle einfach anpassen

HI,

also sieht jetzt wie folgt aus:

<?

$path = "/../../../../home/da/upload/";

echo $_FILES['probe']['tmp_name'];

echo $path.$_FILES['probe']['name'];

if (isset($_FILES['probe']) and ! $_FILES['probe']['error']) {

if (!move_uploaded_file($_FILES['probe']['tmp_name'], $path.$_FILES['probe']['name']))

{

printf("Die Datei %s steht jetzt " . " zur Verfügung.<br />\n", $_FILES['probe']['name']);

printf("Sie ist %u Bytes groß und vom Typ %s.<br />\n", $_FILES['probe']['size'], $_FILES['probe']['type']);

}

else

{

echo "Funzt nicht";

}

}

?>

ich bin mit der upload.php in /var/www/html/PList/upload.php

will aber in die /home/da/upload/xx.doc

es kommt jedoch aus ausgabe das es nciht funzt....

woran kann das denn jetzt nmoch liegen?

MfG

Big B

HI,

also sieht jetzt wie folgt aus:

<?

$path = "/../../../../home/da/upload/";

echo $_FILES['probe']['tmp_name'];

echo $path.$_FILES['probe']['name'];

if (isset($_FILES['probe']) and ! $_FILES['probe']['error']) {

if (!move_uploaded_file($_FILES['probe']['tmp_name'], $path.$_FILES['probe']['name']))

{

printf("Die Datei %s steht jetzt " . " zur Verfügung.<br />\n", $_FILES['probe']['name']);

printf("Sie ist %u Bytes groß und vom Typ %s.<br />\n", $_FILES['probe']['size'], $_FILES['probe']['type']);

}

else

{

echo "Funzt nicht";

}

}

?>

ich bin mit der upload.php in /var/www/html/PList/upload.php

will aber in die /home/da/upload/xx.doc

es kommt jedoch aus ausgabe das es nciht funzt....

woran kann das denn jetzt nmoch liegen?

MfG

Big B

du müsstest echtmal deine gesamte ordnerstruktur posten.

die uplaod liegt in

/var/www/html/PList/upload.php

aber wo ist denn dazu gesehen das verzeichnis "home" ??

ist es noch eine etage höher? also

home/var/www/html/PList/upload.php

oder liegt es ganz wo anders?

home liegt auf der selben höhe wie var

home liegt auf der selben höhe wie var

also dann

../../../home/da/uploads

Jetzt sagt er wieder das er verschoben hätte, aber keine datei vorhanden...

hab auch mal en / nach dem upload versucht, aber vergebens :(

noch ideen?

MfG

Big B

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.