multiple fileupload php - extensions unterscheiden
janosch
- php
0 Sven Rautenberg0 janosch0 Sven Rautenberg
0 Wolfram Hüttermann0 Tom
habe vor ein paar wochen schon mal geschieben und konnte etwas auf die beine stellen. leider läuft mein multiple file upload noch nicht sauber. hier der code soweit:
for ($i=0;$i<4;$i++) //4 files sollen hoch {
if (is_uploaded_file($HTTP_POST_FILES['PIC']['tmp_name'][$i])) { //extension herausfinden $extention = substr(strrchr($files[$i], "."), 1);
switch($extention) { case NULL : { $message = "extension nicht erkannt"; break; }
case "jpg": { if (file_exists($uploadpath."images/".$files[$i])) { $files[$i]=$zeit."_".$HTTP_POST_FILES['PIC']['name'][$i]; move_uploaded_file($HTTP_POST_FILES['PIC']['tmp_name'][$i], $uploadpath."images/".$files[$i]);
$message="erfolgreich geupped"; } break;}
case "mov": { if (file_exists($uploadpath."images/".$files[$i])) {
$files[$i]=$zeit."_".$HTTP_POST_FILES['PIC']['name'][$i]; $files[$i] = strtolower($files[$i]); move_uploaded_file($HTTP_POST_FILES['PIC']['tmp_name'][$i], $uploadpath."images/".$files[$i]); break;} } }
mein problem: die extension wird ausgelesen ist aber immer die extension vom upload-vorgang davor.
kann das an meinem sessions liegen?
//-----------------Session Management-------------------------- session_start(); // Wenn der Datei eine Session ID übergeben wurde, dann diese reaktivieren if (isset ($HTTP_GET_VARS[session_name()])) session_id( ${session_name()} );
freue mich über hilfe. schönen tag wünscht janosch
Moin!
Fileupload start
for ($i=0;$i<4;$i++) //4 files sollen hoch
{if (is_uploaded_file($HTTP_POST_FILES['PIC']['tmp_name'][$i]))
Hast du ein so altes PHP, dass du noch diese Altlast benutzen mußt? $_FILES ist schöner.
{
//extension herausfinden
$extention = substr(strrchr($files[$i], "."), 1);
Es gibt eine schöne PHP-Funktion namens pathinfo(), die dir auch die Extension einer Datei liefert.
Aber spannende Frage: Woher kommt $files? Was steht da drin?
switch($extention) {
case NULL :
{
$message = "extension nicht erkannt";
break;
}
Warum sind um den Block (und alle folgenden) geschweifte Klammern rum?
case "jpg":
{ if (file_exists($uploadpath."images/".$files[$i]))
{
$files[$i]=$zeit."_".$HTTP_POST_FILES['PIC']['name'][$i];
move_uploaded_file($HTTP_POST_FILES['PIC']['tmp_name'][$i], $uploadpath."images/".$files[$i]);$message="erfolgreich geupped";
}
break;}case "mov":
{
if (file_exists($uploadpath."images/".$files[$i]))
{$files[$i]=$zeit."_".$HTTP_POST_FILES['PIC']['name'][$i];
$files[$i] = strtolower($files[$i]);
move_uploaded_file($HTTP_POST_FILES['PIC']['tmp_name'][$i], $uploadpath."images/".$files[$i]);
break;}
}
}Fileupload ende
kann das an meinem sessions liegen?
//-----------------Session Management--------------------------
session_start();
// Wenn der Datei eine Session ID übergeben wurde, dann diese reaktivieren
if (isset ($HTTP_GET_VARS[session_name()])) session_id( ${session_name()} );
Was soll der Scheiß denn? session_start() liest ganz automatisch GET-Parameter, Formulare und Cookies aus, um eine eventuell vorhandene Session-ID weiterzuverwenden.
Das Setzen der Session-ID _nach_ dem Start der Session ist sinnlos, da ist schon eine Session-ID vergeben.
Und was zum Teufel soll "session_id( ${session_name()} )" machen? Sieht eklig aus? Meint wahrscheinlich "session_id($_GET[session_name()])" - ist aber, wie erwähnt, überflüssig.
- Sven Rautenberg
Fileupload start
for ($i=0;$i<4;$i++) //4 files sollen hoch
{if (is_uploaded_file($HTTP_POST_FILES['PIC']['tmp_name'][$i]))
Hast du ein so altes PHP, dass du noch diese Altlast benutzen mußt? $_FILES ist schöner.
Stimmt schon. ich werde das mal ändern.
{
//extension herausfinden
$extention = substr(strrchr($files[$i], "."), 1);
Es gibt eine schöne PHP-Funktion namens pathinfo(), die dir auch die Extension einer Datei liefert.Aber spannende Frage: Woher kommt $files? Was steht da drin?
das ist mein $files: $files=array($db->f("thumb"),$db->f("bild"));
switch($extention) {
case NULL :
{
$message = "extension nicht erkannt";
break;
}
Warum sind um den Block (und alle folgenden) geschweifte Klammern rum?
oh! danke
case "jpg":
{ if (file_exists($uploadpath."images/".$files[$i]))
{
$files[$i]=$zeit."_".$HTTP_POST_FILES['PIC']['name'][$i];
move_uploaded_file($HTTP_POST_FILES['PIC']['tmp_name'][$i], $uploadpath."images/".$files[$i]);$message="erfolgreich geupped";
}
break;}case "mov":
{
if (file_exists($uploadpath."images/".$files[$i]))
{$files[$i]=$zeit."_".$HTTP_POST_FILES['PIC']['name'][$i];
$files[$i] = strtolower($files[$i]);
move_uploaded_file($HTTP_POST_FILES['PIC']['tmp_name'][$i], $uploadpath."images/".$files[$i]);
break;}
}
}Fileupload ende
kann das an meinem sessions liegen?
//-----------------Session Management--------------------------
session_start();
// Wenn der Datei eine Session ID übergeben wurde, dann diese reaktivieren
if (isset ($HTTP_GET_VARS[session_name()])) session_id( ${session_name()} );Was soll der Scheiß denn? session_start() liest ganz automatisch GET-Parameter, Formulare und Cookies aus, um eine eventuell vorhandene Session-ID weiterzuverwenden.
Das Setzen der Session-ID _nach_ dem Start der Session ist sinnlos, da ist schon eine Session-ID vergeben.
Und was zum Teufel soll "session_id( ${session_name()} )" machen? Sieht eklig aus? Meint wahrscheinlich "session_id($_GET[session_name()])" - ist aber, wie erwähnt, überflüssig.
- Sven Rautenberg
danke sven ich werde dran arbeiten.
Moin!
if (is_uploaded_file($HTTP_POST_FILES['PIC']['tmp_name'][$i]))
{
//extension herausfinden
$extention = substr(strrchr($files[$i], "."), 1);
das ist mein $files: $files=array($db->f("thumb"),$db->f("bild"));
Ok, subsummiert zu einer dummen Frage:
Wenn du Dateien hochladen läßt und deren Extension zu einer unterschiedlichen Behandlung führen soll - warum fragst du dann die Extension aus einem (offenbar) Datenbankergebnis ab, und nicht den vom Client gelieferten Originalnamen?
Wenn die Datenbank nach dem Upload (und nach dem von dir geposteten Code) die Information des jeweiligen Uploads gespeichert kriegt, ist die Verzögerung der Reaktion um eine Seite irgendwie klar.
- Sven Rautenberg
habe folgende funktion geschrieben:
function getextension($filename)
{
$extension = pathinfo($filename);
return $extension['extension'];
}
so kann ich die extension holen. klappt noch nicht.
leider funktioniert die unterscheidung noch nicht.
die unterscheidung mit der extension funktioniert jetzt. leider ist es wie sven schon sagte die extension vom vorherigem upload.
++++++++++++++++++++++++++++++++++++++++++++++
$files=array($db->f("thumb"),$db->f("bild")); //kommt vom formular
for ($i=0;$i<4;$i++)
{
if (is_uploaded_file($HTTP_POST_FILES['PIC']['tmp_name'][$i]))
{
$extention = pathinfo($files[$i]);
$extention = $extention[extension];
switch($extention) {
case NULL :
{ // bla bla ...
case "jpg:
{ // bla bla ...
++++++++++++++++++++++++++++++++++++++++++++++
Moin!
die unterscheidung mit der extension funktioniert jetzt. leider ist es wie sven schon sagte die extension vom vorherigem upload.
Nochmal: Wenn du prüfst, ob $HTTP_POST_FILES['PIC']['tmp_name'][$i] ein hochgeladenes File ist, wieso prüfst du dann die Extension dieses Dateinamens nicht, indem du $HTTP_POST_FILES['PIC']['name'][$i] checkst? Denn genau da steht die aktuelle Extension des hochgeladenen Files drin. Und nur die ist relevant!
Alternativ zeigst du mir bitte, was die Methode $db->f macht. Wenn die NICHT die Extension aus $HTTP_POST_FILES['PIC']['name'][$i] holt, sondern vorher verarbeitete Werte aus der Datenbank holt, ist die Fehlerquelle eindeutig gefunden.
$files=array($db->f("thumb"),$db->f("bild")); //kommt vom formular
if (is_uploaded_file($HTTP_POST_FILES['PIC']['tmp_name'][$i]))
{
$extention = pathinfo($files[$i]);
$extention = $extention[extension];
switch($extention) {
- Sven Rautenberg
sven es läuft. danke!!! ich poste den code noch schnell, will mich bedanken für die nette hilfe. tHX janosch.
code (uploaded files unterscheiden):
++++++++++++++++++++++++++++++++++++++++++++++++
for ($i=0;$i<4;$i++)
{
if (is_uploaded_file($HTTP_POST_FILES['PIC']['tmp_name'][$i]))
{
// Check Entension
$extention = pathinfo($HTTP_POST_FILES['PIC']['name'][$i]);
$extention = $extention[extension];
// Weiche - was tun bei welchem file
switch($extention) {
case NULL :
{
// bla bla
break;
}
// Bildupload
case "jpg":
{
// bla bla
++++++++++++++++++++++++++++++++++++++++++++++++
einige globale funktionen:
function f($Name) {
return $this->strDatensatz[$Name];
}
habe vor ein paar wochen schon mal geschieben und konnte etwas auf die beine stellen. leider läuft mein multiple file upload noch nicht sauber. hier der code soweit:
Fileupload start
for ($i=0;$i<4;$i++) //4 files sollen hoch
{if (is_uploaded_file($HTTP_POST_FILES['PIC']['tmp_name'][$i]))
{
//extension herausfinden
$extention = substr(strrchr($files[$i], "."), 1);switch($extention) {
case NULL :
{
$message = "extension nicht erkannt";
break;
}case "jpg":
{ if (file_exists($uploadpath."images/".$files[$i]))
{
$files[$i]=$zeit."_".$HTTP_POST_FILES['PIC']['name'][$i];
move_uploaded_file($HTTP_POST_FILES['PIC']['tmp_name'][$i], $uploadpath."images/".$files[$i]);$message="erfolgreich geupped";
}
break;}case "mov":
{
if (file_exists($uploadpath."images/".$files[$i]))
{$files[$i]=$zeit."_".$HTTP_POST_FILES['PIC']['name'][$i];
$files[$i] = strtolower($files[$i]);
move_uploaded_file($HTTP_POST_FILES['PIC']['tmp_name'][$i], $uploadpath."images/".$files[$i]);
break;}
}
}Fileupload ende
mein problem: die extension wird ausgelesen ist aber immer die extension vom upload-vorgang davor.
kann das an meinem sessions liegen?
//-----------------Session Management--------------------------
session_start();
// Wenn der Datei eine Session ID übergeben wurde, dann diese reaktivieren
if (isset ($HTTP_GET_VARS[session_name()])) session_id( ${session_name()} );freue mich über hilfe. schönen tag wünscht janosch
Hallo janosch,
Das ist so nicht richtig.
Angenommen du hättest ein Formular der folgenden Art.
<form enctype="multishit"> <!-- Nicht gerade sehr
höflich, aber ich hasse Tipparbeit -->
<input type="file" name="pic1" />
<br>
<input type="file" name="pic2" />
<input type="file" name="pic3" />
<input type="file" name="pic4" />
</form>
Wenn du diese Dateien hochladen möchtest, dann musst du folgendes Skript schreiben.
foreach (array("pic1", "pic2", "pic3", "pic4") as $name)
{
$dateiname=irgendeineProzedur($name);
move_uploaded_file($_FILES[$name]["tmp_name"],
$dateiname) or
die("Das File konnte nicht aufgeladen werden! Fehler!");
}
Hello,
if (is_uploaded_file($HTTP_POST_FILES['PIC']['tmp_name'][$i]))
Und hier nochmal meine Anmerkung, dass die Verzweigung im Knotenelement "userfilename" steckt und nicht mit [$i] durchgezählt werden kann.
lass Dir mal nach einem multiple Upload
echo "<pre>";
print_r($_FILES);
echo "/<pre>";
ausgeben. Dann sollte es klar werden.
Grüße
Tom
Hello,
echo "<pre>";
print_r($_FILES);
echo "</pre>";
Grüße
Tom
das wird ausgegeben:
Array
(
[PIC] => Array
(
[name] => Array
(
[0] => ad_gr.jpg
[1] => test.mov
[2] =>
[3] =>
)
[type] => Array
(
[0] => image/pjpeg
[1] => text/plain
[2] =>
[3] =>
)
[tmp_name] => Array
(
[0] => /home/www/web797/phptmp/phpvsa3Ok
[1] => /home/www/web797/phptmp/phpNJmGSf
[2] =>
[3] =>
)
[error] => Array
(
[0] => 0
[1] => 0
[2] => 4
[3] => 4
)
[size] => Array
(
[0] => 15840
[1] => 319
[2] => 0
[3] => 0
)
)
)
Hello und hoppla,
das ist ja schon mal ein Stück näher zum Ziel.
Gib doch bite nochmal das Formular <form> durch. Wie hast Du Deine inputs benannt?
Grüße
Tom