Zum Inhalt springen

Dateiupload mit php


Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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??

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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:

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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. ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

<?

$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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...