23587
16.05.2007, aktualisiert am 27.05.2007
5271
11
0
Bildupload ins falsche Verzeichnis
Ich probiere gleichzeitig eine andere Version eines Bild-Uploades aus...
Bei diesem hier ist das problem, dass er das Bild in das falsche verzeichniss hochläd...
Aber wieso? Der Ordner wird richtig erstellt.
Schaut euch das bitte mal an.
gruß Aleks
Bei diesem hier ist das problem, dass er das Bild in das falsche verzeichniss hochläd...
Aber wieso? Der Ordner wird richtig erstellt.
Schaut euch das bitte mal an.
gruß Aleks
$pfad1 = "./admin/einsatz_bilder/";
$pfad2 = $_REQUEST['nummer'];
$pfad3 = "/";
$pfad = "$pfad1$pfad2$pfad3";
mkdir($pfad, 0777);
#Bildupload-Script
// Maximale Dateigrösse in Byte
$max_size = 20480;
// Maximale Breite in Pixel
$max_width = 800;
// Maximale Höhe in Pixel
$max_height = 800;
//
// Main Script
//
IF ($_POST["gesendet"]) { // Nur ausführen wenn das Upload Formular gesendet wurde
IF ($_FILES['upload']['type'] == "image/gif" || $_FILES['upload']['type'] == "image/jpeg" || $_FILES['upload']['type'] == "image/pjepg") { // Prüfen ob der MIME Typ korrekt ist
IF ($_FILES['upload']['size'] <= $max_size) { // Dateigrösse prüfen
$size = getimagesize($_FILES['upload']['tmp_name']);
IF ($size <= $max_width AND $size[1] <= $max_height) { // Höhe und Breite checken
$time = time();
IF ($_FILES['upload']['type'] == "image/gif") $name = $time.".gif";
IF ($_FILES['upload']['type'] == "image/jpeg") $name = $time.".jpg";
copy($_FILES['upload']['tmp_name'],"$pfad$name"); // Datei Uploaden
$ausgabe .= "Bild erfolgreich auf dem Server gespeichert!<br>";
} ELSE {
$ausgabe .= "Bild ist zu breit oder zu hoch!<br>";
}
} ELSE {
$ausgabe .= "Bild ist zu gross!<br>";
}
} ELSE {
$ausgabe .= "Ungültiger Dateityp!<br>";
}
}
// HTML Formular
?>
<html>
<head>
<title>Bild upload</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
td { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; color: #330000}
a { color:#330000; font-weight: normal }
a:active { color:#996633; text-decoration:underline }
a:hover { text-decoration:underline; color: #996633}
a:link { text-decoration:underline }
input {FONT-SIZE: 10px; COLOR: #330000; FONT-FAMILY: verdana, arial, helvetica, sans-serif; BACKGROUND-COLOR: #FFFFFF; BORDER-RIGHT: #330000 1px solid; BORDER-TOP: #330000 1px solid; FONT-SIZE: 10px; BORDER-LEFT: #330000 1px solid; COLOR: #330000; BORDER-BOTTOM: #330000 1px solid; FONT-FAMILY: verdana, arial, helvetica, sans-serif; BACKGROUND-COLOR: #FFFFFF }
-->
</style>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<form name="bildupload" enctype="multipart/form-data" method="post" action="index.php?section=admin§ion=upload">
<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#996633" width="400" align="center">
<TR>
<TD>
<table border="0" cellspacing=1 cellpadding=4 bgcolor="#996633" width="100%">
<TR>
<TD bgcolor="#F6E8D9" colspan="2"> <b>Bild upload</b></TD>
</TR>
<TR>
<TD bgcolor="#FFFFFF" background="">Dateigrösse:</TD>
<TD bgcolor="#FFFFFF" background=""> Maximal
<b><? echo $max_size; ?></b>
Bytes<br>
</TD>
</TR>
<TR>
<TD bgcolor="#FFFFFF" background="">Breite:</TD>
<TD bgcolor="#FFFFFF" background="">Maximal
<b><? echo $max_width; ?></b>
Pixel</TD>
</TR>
<TR>
<TD bgcolor="#FFFFFF" background="">Höhe:</TD>
<TD bgcolor="#FFFFFF" background="">Maximal
<b><? echo $max_height; ?></b>
Pixel</TD>
</TR>
<TR>
<TD bgcolor="#FFFFFF" background="" valign="top">Datei auswählen:<br>
<br>
</TD>
<TD bgcolor="#FFFFFF" background="">
<input type="file" name="upload" size="30">
<br>
<b><? echo $ausgabe; ?></b>
</TD>
</TR>
<TR align="center">
<TD bgcolor="#FFFFFF" background="" colspan="2">
<input type="hidden" name="gesendet" value="1">
<input type="submit" name="Upload" value="Upload">
</TD>
</TR>
<TR>
<TD bgcolor="#FFFFFF" background="" align="center" colspan="2"></TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
</form>
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 59206
Url: https://administrator.de/contentid/59206
Ausgedruckt am: 26.11.2024 um 06:11 Uhr
11 Kommentare
Neuester Kommentar
G' Abend,
du hast es wohl eilig, wa??
Also ich habe dein PHP-Teil ein bisschen überarbeitet:
Müsste so gehen. Allerdings, ob du im copy gleich umbenennen kannst weiß ich gerade aus dem ff heraus auch nicht.
Gruß
Dani
du hast es wohl eilig, wa??
Also ich habe dein PHP-Teil ein bisschen überarbeitet:
<?php
$pfad = "admin/einsatz_bilder";
$einsatznr = $_REQUEST['nummer'];
mkdir($pfad."/".$einsatznr, 0777);
// Maximale Dateigrösse in Byte
$max_size = 20480;
// Maximale Breite in Pixel
$max_width = 800;
// Maximale Höhe in Pixel
$max_height = 800;
// Main Script
IF ($_POST["gesendet"]) { // Nur ausführen wenn das Upload Formular gesendet wurde
IF (($_FILES['upload']['type'] == "image/gif") || ($_FILES['upload']['type'] == "image/jpeg") || ($_FILES['upload']['type'] == "image/pjepg")) { // Prüfen ob der MIME Typ korrekt ist
IF ($_FILES['upload']['size'] <= $max_size) { // Dateigrösse prüfen
$size = getimagesize($_FILES['upload']['tmp_name']);
IF (($size <= $max_width) AND ($size[1] <= $max_height)) { // Höhe und Breite checken
IF ($_FILES['upload']['type'] == "image/gif") $bildname = time().".gif";
IF ($_FILES['upload']['type'] == "image/jpeg") $bildname = time().".jpg";
copy($_FILES['upload']['tmp_name'], $pfad."/".$einsatznr."/"$bildname); // Datei Uploaden
$ausgabe .= "Bild erfolgreich auf dem Server gespeichert!<br>";
} ELSE {
$ausgabe .= "Bild ist zu breit oder zu hoch!<br>";
}
} ELSE {
$ausgabe .= "Bild ist zu gross!<br>";
}
} ELSE {
$ausgabe .= "Ungültiger Dateityp!<br>";
}
}
?>....
Gruß
Dani
Moin Alex,
naja....Fehlermeldungen hast du wohl bei dir abgestellt. Also erstmal, du kannst keine JPG - Bilder hochladen - wird einfach nicht erkannt bzw. nicht zugelassen.
So funktioniert es bei auf dem XAMPP - System:
Du solltest noch vor dem mkdir ... überprüfen, ob das Verzeichnis schon existiert. Sonst siehsts du immer eine schöne Fehlermeldung. Woher solltest du eigentlich die Einsatznummer?? Ich habe sie zum Testen gefixt (siehe oben). => Funktioniert ansonsten ohne Problme.
Gruß
Dani
naja....Fehlermeldungen hast du wohl bei dir abgestellt. Also erstmal, du kannst keine JPG - Bilder hochladen - wird einfach nicht erkannt bzw. nicht zugelassen.
So funktioniert es bei auf dem XAMPP - System:
<?php
$pfad = "admin/einsatz_bilder";
//$einsatznr = $_REQUEST['nummer'];
$einsatznr = "3";
mkdir($pfad."/".$einsatznr, 0777);
// Maximale Dateigrösse in Byte
$max_size = 20480;
// Maximale Breite in Pixel
$max_width = 800;
// Maximale Höhe in Pixel
$max_height = 800;
// Main Script
IF ($_POST["gesendet"]) { // Nur ausführen wenn das Upload Formular gesendet wurde
IF (($_FILES['upload']['type'] == "image/gif") || ($_FILES['upload']['type'] == "image/jpeg") || ($_FILES['upload']['type'] == "image/pjpeg")) { // Prüfen ob der MIME Typ korrekt ist
IF ($_FILES['upload']['size'] <= $max_size) { // Dateigrösse prüfen
$size = getimagesize($_FILES['upload']['tmp_name']);
IF (($size <= $max_width) AND ($size[1] <= $max_height)) { // Höhe und Breite checken
IF ($_FILES['upload']['type'] == "image/gif") $bildname = time().".gif";
ELSE IF ($_FILES['upload']['type'] == "image/jpeg") $bildname = time().".jpg";
ELSE IF ($_FILES['upload']['type'] == "image/jpg") $bildname = time().".jpg";
copy($_FILES['upload']['tmp_name'], $pfad."/".$einsatznr."/".$bildname); // Datei Uploaden
$ausgabe = "Bild erfolgreich auf dem Server gespeichert!<br>";
} ELSE {
$ausgabe = "Bild ist zu breit oder zu hoch!<br>";
}
} ELSE {
$ausgabe = "Bild ist zu gross!<br>";
}
} ELSE {
$ausgabe .= "Ungültiger Dateityp!<br>";
}
}
?>
<html>
<head>
<title>Bild upload</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
td { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; color: #330000}
a { color:#330000; font-weight: normal }
a:active { color:#996633; text-decoration:underline }
a:hover { text-decoration:underline; color: #996633}
a:link { text-decoration:underline }
input {FONT-SIZE: 10px; COLOR: #330000; FONT-FAMILY: verdana, arial, helvetica, sans-serif; BACKGROUND-COLOR: #FFFFFF; BORDER-RIGHT: #330000 1px solid; BORDER-TOP: #330000 1px solid; FONT-SIZE: 10px; BORDER-LEFT: #330000 1px solid; COLOR: #330000; BORDER-BOTTOM: #330000 1px solid; FONT-FAMILY: verdana, arial, helvetica, sans-serif; BACKGROUND-COLOR: #FFFFFF }
-->
</style>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<form name="bildupload" enctype="multipart/form-data" method="post" action="index.php?section=admin§ion=upload">
<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0" BGCOLOR="#996633" width="400" align="center">
<TR>
<TD>
<table border="0" cellspacing=1 cellpadding=4 bgcolor="#996633" width="100%">
<TR>
<TD bgcolor="#F6E8D9" colspan="2"> Bild upload</TD>
</TR>
<TR>
<TD bgcolor="#FFFFFF" background="">Dateigrösse:</TD>
<TD bgcolor="#FFFFFF" background=""> Maximal
<? echo $max_size; ?>
Bytes<br>
</TD>
</TR>
<TR>
<TD bgcolor="#FFFFFF" background="">Breite:</TD>
<TD bgcolor="#FFFFFF" background="">Maximal
<? echo $max_width; ?>
Pixel</TD>
</TR>
<TR>
<TD bgcolor="#FFFFFF" background="">Höhe:</TD>
<TD bgcolor="#FFFFFF" background="">Maximal
<? echo $max_height; ?>
Pixel</TD>
</TR>
<TR>
<TD bgcolor="#FFFFFF" background="" valign="top">Datei auswählen:<br>
<br>
</TD>
<TD bgcolor="#FFFFFF" background="">
<input type="file" name="upload" size="30">
<br>
<? echo $ausgabe; ?>
</TD>
</TR>
<TR align="center">
<TD bgcolor="#FFFFFF" background="" colspan="2">
<input type="hidden" name="gesendet" value="1">
<input type="submit" name="Upload" value="Upload">
</TD>
</TR>
<TR>
<TD bgcolor="#FFFFFF" background="" align="center" colspan="2"></TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
</form>
Gruß
Dani
@uploader
Hi,
@Aleks
In welchem Verzeichnis landet das Bild denn?
Diesen Appell find' eigentlich fast schon unverschämt.
Bei allen Diskussionsverläufen "rund um deine Feuerwehrseite" hat man
eigentlich nie den Eindruck, dass von deiner Seite mal was kommt, außer
dass gepostete Skripte nicht funktionieren oder dass du schon etliche
Sachen im Internet gefunden hast, die aber nicht ganz genau das enthalten,
was du dir vorstellst.
Oder es herrscht Funkstille. Dass diese Diskussionsverläufe dann
ergebnislos im Sande verlaufen, braucht ja dann niemand zu verwundern.
Du wirst in den seltensten Fällen Skripte finden, die du nicht deinen
Bedürfnissen anpassen musst. Also dazu solltest du schon in der
Lage sein.
Desweiteren wäre es sehr hilfreich, wenn du dich auf wesentliches
beschränken würdest, und nicht jedesmal 2 DIN-A4 seitenlange
bzw. 2 DIN-A4 seitenbreite Formulare postest.
Die RunterRaufLinksRechts-Scrollerei bei deinen Postings macht
nämlich keinen Spass!
@Dani
… war ja nicht die Fragestellung. Seine Antwort war ja, dass es gar nicht funktioniert, oder
was auch immer.
Deshalb war deine Erweiterung der Überprüfung auf
Beide Skripte von dir hab' ich ausprobiert, Bilder werden nicht gespeichert.
Ist ja auch nicht schlimm, vielleicht hab' ich ja 'nen Fehler bei Pfadanpassung
oder sonst wo gemacht. Es kommt aber auch keine Fehlermeldung, was ja entweder
auf fehlerhafte Programmlogik schließen läßt, oder dass ein entsprechender
Fehler nicht berücksichtigt wird.
Frage ist vielmehr: Wie geht man das Problem an?
In dem ich mich auf das Wesentliche konzentriere.
Was will ich? Eine Datei "hochladen".
Ob es Bilder, Zip's oder sonst was sind, ob die Datei X-Byte groß ist,
ist das Bild größer als 800x600, ist ja erstmal egal.
Erst wenn das funktioniert, kann ich mich an die Arbeit machen,
entsprechende Filter zu setzen oder aufwändige Formulare zu kreieren.
Und auf das Wesentliche beschränkt sich jetzt mal mein Skript.
Im Rootverzeichnis des Webservers existiert ein Unterverzeichnis
names pub.
Eigentümer/Gruppe dieses Verzeichnisses sind Apache-User/Apache-Group.
In meinem Fall sind das:
www-data – User
www-data – Group
Nachzulesen in der Konfigurationsdatei des Webservers.
Beide haben Schreib- und Leserecht auf diesem Verzeichnis.
Das Formular enthält eine Textbox zur Eingabe eines Zielverzeichnisses
unterhalb pub.
Es findet keine Filterung bezüglich Typ, Größe etc. statt. Dateien
sollen jetzt erstmal "hochgeladen" werden können. Werden Verzeichnisse
erstellt und die Datei(en) korrekt kopiert, mache ich mich mal an die Arbeit
filtere Kriterien.
Skript wurde korrigiert. Neue Version mit REGISTER_GLOBALS=OFF
<!DOCTYPE HTML PUBLIC "-W3CDTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Datei-Upload</title>
</head>
<body>
<p>Bilder-Upload</p>
<form enctype="multipart/form-data" method="post" action="upload.php">
Einsatz-Nr: <input type="text" name="einsatznr">
Bild: <input type="file" name="myfile"><input type="submit" name="cmd" value="Hochladen">
</form>
</body>
</html>
Grüße
Günni
Hi,
@Aleks
Bei diesem hier ist das problem, dass er das Bild in das falsche verzeichniss hochläd...
In welchem Verzeichnis landet das Bild denn?
Leider funktioniert das immer noch nicht... komisch...
Könnt ihr es bitte noch weiter probieren?
Könnt ihr es bitte noch weiter probieren?
Diesen Appell find' eigentlich fast schon unverschämt.
Bei allen Diskussionsverläufen "rund um deine Feuerwehrseite" hat man
eigentlich nie den Eindruck, dass von deiner Seite mal was kommt, außer
dass gepostete Skripte nicht funktionieren oder dass du schon etliche
Sachen im Internet gefunden hast, die aber nicht ganz genau das enthalten,
was du dir vorstellst.
Oder es herrscht Funkstille. Dass diese Diskussionsverläufe dann
ergebnislos im Sande verlaufen, braucht ja dann niemand zu verwundern.
Du wirst in den seltensten Fällen Skripte finden, die du nicht deinen
Bedürfnissen anpassen musst. Also dazu solltest du schon in der
Lage sein.
Desweiteren wäre es sehr hilfreich, wenn du dich auf wesentliches
beschränken würdest, und nicht jedesmal 2 DIN-A4 seitenlange
bzw. 2 DIN-A4 seitenbreite Formulare postest.
Die RunterRaufLinksRechts-Scrollerei bei deinen Postings macht
nämlich keinen Spass!
@Dani
du kannst keine JPG - Bilder hochladen - wird einfach nicht erkannt bzw. nicht zugelassen.
… war ja nicht die Fragestellung. Seine Antwort war ja, dass es gar nicht funktioniert, oder
was auch immer.
Deshalb war deine Erweiterung der Überprüfung auf
ELSE IF ($_FILES['upload']['type'] == "image/jpg") …
eigentlich unnütz.Beide Skripte von dir hab' ich ausprobiert, Bilder werden nicht gespeichert.
Ist ja auch nicht schlimm, vielleicht hab' ich ja 'nen Fehler bei Pfadanpassung
oder sonst wo gemacht. Es kommt aber auch keine Fehlermeldung, was ja entweder
auf fehlerhafte Programmlogik schließen läßt, oder dass ein entsprechender
Fehler nicht berücksichtigt wird.
Frage ist vielmehr: Wie geht man das Problem an?
In dem ich mich auf das Wesentliche konzentriere.
Was will ich? Eine Datei "hochladen".
Ob es Bilder, Zip's oder sonst was sind, ob die Datei X-Byte groß ist,
ist das Bild größer als 800x600, ist ja erstmal egal.
Erst wenn das funktioniert, kann ich mich an die Arbeit machen,
entsprechende Filter zu setzen oder aufwändige Formulare zu kreieren.
Und auf das Wesentliche beschränkt sich jetzt mal mein Skript.
Im Rootverzeichnis des Webservers existiert ein Unterverzeichnis
names pub.
Eigentümer/Gruppe dieses Verzeichnisses sind Apache-User/Apache-Group.
In meinem Fall sind das:
www-data – User
www-data – Group
Nachzulesen in der Konfigurationsdatei des Webservers.
Beide haben Schreib- und Leserecht auf diesem Verzeichnis.
Das Formular enthält eine Textbox zur Eingabe eines Zielverzeichnisses
unterhalb pub.
Es findet keine Filterung bezüglich Typ, Größe etc. statt. Dateien
sollen jetzt erstmal "hochgeladen" werden können. Werden Verzeichnisse
erstellt und die Datei(en) korrekt kopiert, mache ich mich mal an die Arbeit
filtere Kriterien.
Skript wurde korrigiert. Neue Version mit REGISTER_GLOBALS=OFF
/*
Mit $HTTP_SERVER_VARS['DOCUMENT_ROOT'] wird das Rootverzeichnis des Servers ermittelt,
pub ist ein Unterverzeichnis.
Lese- und Schreibrecht auf pub haben Apache-User und Apache-Group,
nachzulesen in Konfigurationsdatei des Webservers.
*/
$pfad=$HTTP_SERVER_VARS['DOCUMENT_ROOT']."/pub/";
$cmd=$_POST['cmd'];
if($cmd=="Hochladen"){
/*
EinsatzNr wird mit dem Formular gesendet und bestimmt den Ordner,
in dem das Bild gespeichert wird
*/
$einsatznr=$_POST['einsatznr'];
/*
Es wird überprüft, ob EinsatzNr ein Verzeichnis ist. Wenn nicht, wird
es erstellt und dem Pfad angehangen.
Falls es existiert, wird es dem Pfad angehangen.
*/
if(!is_dir($pfad.$einsatznr)){
mkdir($pfad.$einsatznr,0777);
$pfad.=$einsatznr."/";
}else{
$pfad.=$einsatznr."/";
}
/*
Im folgenden werden die Variablen für die copy-Funktion
deklariert und belegt.
*/
$quelle=$_FILES['myfile']['tmp_name'];
$quellenname=$_FILES['myfile']['name'];
$ziel=$pfad.$quellenname;
if(copy($quelle,$ziel)){
echo "Datei $quellenname wurde hochgeladen.<br>";
echo "-------------------------------------<br>";
echo "Quelle: ".$quelle."<br>";
echo "Quellenname: ".$quellenname."<br>";
echo "Ziel: ".$ziel."<br>";
}else{
echo "Fehler beim Hochladen der Datei ".$quellenname."<br>";
}
}
<html>
<head>
<title>Datei-Upload</title>
</head>
<body>
<p>Bilder-Upload</p>
<form enctype="multipart/form-data" method="post" action="upload.php">
Einsatz-Nr: <input type="text" name="einsatznr">
Bild: <input type="file" name="myfile"><input type="submit" name="cmd" value="Hochladen">
</form>
</body>
</html>
Grüße
Günni
Hi Günni!
Gruß
Dani
… war ja nicht die Fragestellung. Seine Antwort war ja, dass es gar nicht funktioniert, oder
was auch immer.
Ich finde, sowas gehört einfach dazu. Ich wollte zuerst ein jpg - Bild hochladen. Jedoch kam dann die entsprechende Meldung. Somit dachte ich mir, sagsts ihm einfach.was auch immer.
Beide Skripte von dir hab' ich ausprobiert, Bilder werden nicht gespeichert.
Ist ja auch nicht schlimm
Das wundert mich jetzt grad völlig. Ich habe bei meinem letzten Kommentar noch mein Testsystem angeben. Vielleicht liegt es an den unterschiedlichen OS's.Ist ja auch nicht schlimm
Gruß
Dani
@Dani
Hi,
... ist ja auch richtig. Aber wenn ich generell z.B. das Problem
habe, Bilder hochzuladen, sollte ich doch primär dieses Problem
lösen.
Alles andere ist doch nur Beiwerk, was Fehler produzieren könnte,
die ich zusätzlich abfangen muß. Also lass ich das doch erstmal weg.
Und wenn ich dieses primäre Problem gelöst habe, kann ich mich
um weiterführende Sachen kümmern, wie Filterung von Datei-Typen,
ausschmücken von Formularen etc..
Dass die Erweiterung auf Dateitypen unnütz war, ging eigentlich
somit mehr in Richtung Aleksander.
Wenn er es schafft, Bilder ins richtige Verzeichnis hochzuladen,
dann kann er sein Skript posten, aber bitte Aleks: keine seitenlangen
Formulare, und dann kann sich Gedanken über Filtern machen.
Das mag sein. Ich hatte ja auch geschrieben, dass ich vielleicht selber
Fehler bei der Pfad-Anpassung gemacht habe.
Ich habe auch zuhause kein XAMPP – System, sondern einen Linux-Server
mit Apache incl. PHP, MySQL etc.. Vielleicht liegt's da wirklich an der
Konfiguration. Mein Skript funkt. jedenfalls klaglos bei mir, und bei dir...?
Grüße
Günni
Hi,
Ich finde, sowas gehört einfach dazu.
... ist ja auch richtig. Aber wenn ich generell z.B. das Problem
habe, Bilder hochzuladen, sollte ich doch primär dieses Problem
lösen.
Alles andere ist doch nur Beiwerk, was Fehler produzieren könnte,
die ich zusätzlich abfangen muß. Also lass ich das doch erstmal weg.
Und wenn ich dieses primäre Problem gelöst habe, kann ich mich
um weiterführende Sachen kümmern, wie Filterung von Datei-Typen,
ausschmücken von Formularen etc..
Dass die Erweiterung auf Dateitypen unnütz war, ging eigentlich
somit mehr in Richtung Aleksander.
Wenn er es schafft, Bilder ins richtige Verzeichnis hochzuladen,
dann kann er sein Skript posten, aber bitte Aleks: keine seitenlangen
Formulare, und dann kann sich Gedanken über Filtern machen.
Das wundert mich jetzt grad völlig. Ich habe bei meinem letzten Kommentar
noch mein Testsystem angeben. Vielleicht liegt es an den unterschiedlichen OS's.
noch mein Testsystem angeben. Vielleicht liegt es an den unterschiedlichen OS's.
Das mag sein. Ich hatte ja auch geschrieben, dass ich vielleicht selber
Fehler bei der Pfad-Anpassung gemacht habe.
Ich habe auch zuhause kein XAMPP – System, sondern einen Linux-Server
mit Apache incl. PHP, MySQL etc.. Vielleicht liegt's da wirklich an der
Konfiguration. Mein Skript funkt. jedenfalls klaglos bei mir, und bei dir...?
Grüße
Günni
@uploader
@Dani
Hi,
bei mir steht die Variable register_globals=on, die habe ich jetzt auf off gestellt,
jetzt funktioniert das Skript bei mir auch nicht, hätte ich natürlich berücksichtigen
müssen.
Habe das Skript korrigiert.
Grüße
Günni
@Aleks
Hi,
jetzt versuchen wir's mal Schritt für Schritt.
Leg' einfach mal 'ne Datei an, test.php, Inhalt:
Rufe die Datei auf. Dort werden dir die Servervariablen angezeigt.
Erste Variable müsste DOCUMENT_ROOT sein, der Wert dahinter
das Verzeichnis deines Webservers. O.K.??
Diese Variablen werden im Array HTTP_SERVER_VARS gespeichert, abrufbar mit:
$Var = $HTTP_SERVER_VARS['VARIABLEN_NAME'];
Öffne die Datei test.php.
1.)
Füge die Zeile echo $HTTP_SERVER_VARS['DOCUMENT_ROOT']." - Rootverzeichnis des Webservers.<br>";
hinzu, und vergleiche die Ausgabe mit der Ausgabe des o.g. Code's.
2.)
Wenn das O.K. ist, hänge an DOCUMENT_ROOT dein Bilderverzeichnis dran.
Das Verzeichnis einsatz_bilder MUSS Schreib/Lese/Öffnen-Recht für
alle haben!! <-- WICHTIG!!
Das Verzeichnis einsatz_bilder muss sich dementsprechend im Serververzeichnis befinden.
Also, wenn dir mit echo $HTTP_SERVER_VARS['DOCUMENT_ROOT'] so was
angezeigt wird wie: /var/www, dann erstelle das Verzeichnis auch in www.
Ändern kann man das später immer noch.
3.)
Lass dir wieder mit echo den Pfad ausgeben, und kontrolliere ihn auf Fehler.
Hier müsste dann(siehe Punkt 2) /var/www/einsatz_bilder/ rauskommen.
4.)
Wenn der Pfad O.K. ist, versuche in einsatz_bilder ein Verzeichnis zu
erstellen und an den Pfad anzuhängen. Den Pfad mit echo ausgeben
und auf Fehler überprüfen.
Hier müsste dann(siehe Punkt 3) /var/www/einsatz_bilder/bild/ rauskommen
bild wird dann natürlich gegen einsatznr ausgetauscht
Wenn du alle 4 Schritte abgearbeitet hast, müsste beim letzten echo $pfad:
/Verzeichnispfad_deines_Webservers/einsatz_bilder/bild/
stehen.
Wenn dem so sein sollte, können wir uns daran machen, die copy-Funktion aufzubauen.
Grüße
Günni
@Dani
Hi,
bei mir steht die Variable register_globals=on, die habe ich jetzt auf off gestellt,
jetzt funktioniert das Skript bei mir auch nicht, hätte ich natürlich berücksichtigen
müssen.
Habe das Skript korrigiert.
Grüße
Günni
@Aleks
Hi,
jetzt versuchen wir's mal Schritt für Schritt.
Leg' einfach mal 'ne Datei an, test.php, Inhalt:
printf("<h1>Alle SERVER-Parameter</h1>\n");
if ( isset($HTTP_SERVER_VARS))
{
reset($HTTP_SERVER_VARS);
while(list($k, $v) = each($HTTP_SERVER_VARS)) {
printf("Variable: %s -- Wert: %s<br>\n", $k, $v);
}
}
Rufe die Datei auf. Dort werden dir die Servervariablen angezeigt.
Erste Variable müsste DOCUMENT_ROOT sein, der Wert dahinter
das Verzeichnis deines Webservers. O.K.??
Diese Variablen werden im Array HTTP_SERVER_VARS gespeichert, abrufbar mit:
$Var = $HTTP_SERVER_VARS['VARIABLEN_NAME'];
Öffne die Datei test.php.
1.)
Füge die Zeile echo $HTTP_SERVER_VARS['DOCUMENT_ROOT']." - Rootverzeichnis des Webservers.<br>";
hinzu, und vergleiche die Ausgabe mit der Ausgabe des o.g. Code's.
2.)
Wenn das O.K. ist, hänge an DOCUMENT_ROOT dein Bilderverzeichnis dran.
Das Verzeichnis einsatz_bilder MUSS Schreib/Lese/Öffnen-Recht für
alle haben!! <-- WICHTIG!!
Das Verzeichnis einsatz_bilder muss sich dementsprechend im Serververzeichnis befinden.
Also, wenn dir mit echo $HTTP_SERVER_VARS['DOCUMENT_ROOT'] so was
angezeigt wird wie: /var/www, dann erstelle das Verzeichnis auch in www.
Ändern kann man das später immer noch.
3.)
Lass dir wieder mit echo den Pfad ausgeben, und kontrolliere ihn auf Fehler.
Hier müsste dann(siehe Punkt 2) /var/www/einsatz_bilder/ rauskommen.
4.)
Wenn der Pfad O.K. ist, versuche in einsatz_bilder ein Verzeichnis zu
erstellen und an den Pfad anzuhängen. Den Pfad mit echo ausgeben
und auf Fehler überprüfen.
Hier müsste dann(siehe Punkt 3) /var/www/einsatz_bilder/bild/ rauskommen
printf("<h1>Alle SERVER-Parameter</h1>\n");
if ( isset($HTTP_SERVER_VARS))
{
reset($HTTP_SERVER_VARS);
while(list($k, $v) = each($HTTP_SERVER_VARS)) {
printf("Variable: %s -- Wert: %s<br>\n", $k, $v);
}
}
/* ------------------------------------------------------------------------------------------------------ */
// 1.)
echo $HTTP_SERVER_VARS['DOCUMENT_ROOT']." - Rootverzeichnis des Webservers.<br>";
// 2.)
$pfad=$HTTP_SERVER_VARS['DOCUMENT_ROOT']."/einsatz_bilder/";
// 3.)
echo $pfad;
// 4.)
if(!is_dir($pfad."bild")){
mkdir($pfad."bild",0777);
$pfad.="bild/";
}else{
$pfad.="bild/";
}
echo $pfad;
bild wird dann natürlich gegen einsatznr ausgetauscht
Wenn du alle 4 Schritte abgearbeitet hast, müsste beim letzten echo $pfad:
/Verzeichnispfad_deines_Webservers/einsatz_bilder/bild/
stehen.
Wenn dem so sein sollte, können wir uns daran machen, die copy-Funktion aufzubauen.
Grüße
Günni
@all Interessierte,
warum kam kein Upload zustande, obwohl das Skript bei mir zuhause und
bei meinem Webhoster funktionierte?
Manche Webhoster betreiben PHP im safe_mode, welcher eine handvoll
Funktionen blockiert. Mehr darüber und eine Liste der betroffenen Funktionen unter:
http://www.php.net/manual/de/features.safe-mode.php
Wird ein Upload-Skript via FTP hochgeladen, so werden FTP-User/Group Eigentümer des
Skripts und erhalten entsprechende Rechte. Versucht man nun mit diesem SKript
eine Datei hochzuladen, so wird das Skript nicht etwa vom FTP-User ausgeführt!!
Wenn man eine Website aufruft, so wird ja auf dem Webserver ein Prozess gestartet.
Den Namen von Besitzer/Gruppe dieses Prozesses findet man in der Konfiguration
des Webservers unter User und Group.
Versucht man nun mit einem entsprechendem Skript eine Datei hochzuladen, so wird
das Skript eben von diesem User ausgeführt. Und das wird verhindert, wenn PHP
im safe_mode betrieben wird.
Abhilfe?
Abhilfe schafft das setuid-Bit, ein erweitertes Dateirecht, mit dem das Skript
ausgestattet sein muß.
Diese Bit hat den Wert 4000 und wird einfach auf die normalen Rechte aufaddiert, z.B.:
chmod 4777 Skriptname.
Heißt in diesem Fall:
Besitzer des Skripts ist FTP-User
Ausführer des Skripts ist der Besitzer des Prozesses, s.o..
Ausgeführt wird das Skript also vom Besitzer des Prozesses im Namen des Besitzers.
Tja, besser kann ich's nicht erklären.
Grüße, VVV
Günni
warum kam kein Upload zustande, obwohl das Skript bei mir zuhause und
bei meinem Webhoster funktionierte?
Manche Webhoster betreiben PHP im safe_mode, welcher eine handvoll
Funktionen blockiert. Mehr darüber und eine Liste der betroffenen Funktionen unter:
http://www.php.net/manual/de/features.safe-mode.php
Wird ein Upload-Skript via FTP hochgeladen, so werden FTP-User/Group Eigentümer des
Skripts und erhalten entsprechende Rechte. Versucht man nun mit diesem SKript
eine Datei hochzuladen, so wird das Skript nicht etwa vom FTP-User ausgeführt!!
Wenn man eine Website aufruft, so wird ja auf dem Webserver ein Prozess gestartet.
Den Namen von Besitzer/Gruppe dieses Prozesses findet man in der Konfiguration
des Webservers unter User und Group.
Versucht man nun mit einem entsprechendem Skript eine Datei hochzuladen, so wird
das Skript eben von diesem User ausgeführt. Und das wird verhindert, wenn PHP
im safe_mode betrieben wird.
Abhilfe?
Abhilfe schafft das setuid-Bit, ein erweitertes Dateirecht, mit dem das Skript
ausgestattet sein muß.
Diese Bit hat den Wert 4000 und wird einfach auf die normalen Rechte aufaddiert, z.B.:
chmod 4777 Skriptname.
Heißt in diesem Fall:
Besitzer des Skripts ist FTP-User
Ausführer des Skripts ist der Besitzer des Prozesses, s.o..
Ausgeführt wird das Skript also vom Besitzer des Prozesses im Namen des Besitzers.
Tja, besser kann ich's nicht erklären.
Grüße, VVV
Günni