Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Bild Upload mehrer Bilder [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Bild Upload mehrer Bilder


 
themonk
25-02-2006, 18:08 
 
Hallo,
ich weiß das es diese thema hier schon mehr als genug gibt aber ich habe auf den über 17 Seiten nichts passendes Gefunden was mir bei meinem Problem helfen kann.
Ich wollte mit einem Script mehrer Bilder aufeinmal Uploaden.
Hier ist nun mein Script:
Formular<form action="<? echo($PHP_SELF) ?>" method="post" enctype="multipart/form-data">

<?
echo "<input type='hidden' name='MAX_FILE_SIZE' value='512000'>
<input type='hidden' name='maxbilder' value='".$_POST["maxbilder"]."'>";
$i = 1;
while ($i <= $_POST["maxbilder"]) {





echo "<input type='file' name='userfile[]'>";
$i++;
}$_POST["maxbilder"] wurde vorher angegeben


DAs 2te Script:

$i = 1;
$zahl = $i -1;
while ($i <= $_POST["maxbilder"]) {


if($userfile[$zahl]!=""){
$grosse = $userfile_size[$zahl];
if ($grosse >= '512001')
{
echo "Ihre Datei ist zu groß. Das Bild darf maximal 500kB(~0.48MB) betragen.";
}else {
$type = $userfile_type[$zahl];

if (eregi('image', $type)) {
if (eregi('jpg', $type) or eregi('jpeg', $type) ) {
$dateiname = $userfile_name[$zahl];
if(!is_uploaded_file($userfile[$zahl])){
echo "FEHLER".$i; #Die Fehler Ausgabe
exit;
}

$uploadname="gallery/$dateiname".$i;
move_uploaded_file($userfile[$zahl], $uploadname);
printf("Die Datei <b>%s</b> wurde auf den Servere hochgeladen!<br>\n",
$userfile_name[$zahl]);

Bei mir wird nun immer der Fehler ausgegeben. Siehe Makierung im Script.
Hatte auch schon andere Methoden ausprobiert aber nicht half mir.

 
penizillin
25-02-2006, 18:16 
 
zeig mal print_r() von $userfile.
und benutze kein PHP_SELF.

 
wahsaga
25-02-2006, 18:17 
 
Und wo sollen die Werte für $userfile herkommen?
(register_globals etwa auf on?)

Nutze $_FILES. Und schaue dir dessen Struktur mittels print_r an.

 
themonk
25-02-2006, 18:46 
 
Ja register_globals ist auf on
Hab jetzt alle mit $_FILES gemacht und print_r($_FILES); gibt folgendes aus:

Array ( [userfile] => Array ( [name] => Array ( [0] => bild.jpg ) [type] => Array ( [0] => image/pjpeg ) [tmp_name] => Array ( [0] => /srv/www/htdocs/web/phptmp/phpHcXUNv ) [error] => Array ( [0] => 0 ) [size] => Array ( [0] => 12969 ) ) )

 
penizillin
25-02-2006, 18:52 
 
und was gibt in diesem fall deine "fehler ausgabe" aus?

 
themonk
25-02-2006, 18:54 
 
Immer noch das selbe: FEHLER
Habe das da mit eingebaut:
if(!is_uploaded_file($_FILES['userfile'])){
echo "FEHLER".$i;
print_r($_FILES);
exit;
}

 
penizillin
25-02-2006, 18:58 
 
und was ist mit $i?

 
themonk
25-02-2006, 19:40 
 
$i ist die Zahl aus der while Schleife

 
penizillin
25-02-2006, 19:44 
 
ich weiß was $i ist - du sollst nur sagen, was in der variable gespeichert wird, wenn es zum "fehler" kommt.

 
themonk
25-02-2006, 20:43 
 
Du meinst also: FEHLER1Array ? Oder
Also es bricht gleich beim erstenmal ab. 1

 
haSta
26-02-2006, 05:02 
 
Is doch klar warum der Fehler kommt. Weil dein $userfile[$zahl] keine hochgeladene datei ist. Und warum ist deine Ausgabe von $i ein Array?

Probier folgendes:


<!-- //Dein Formular: !-->
<input type="hidden"name='MAX_FILE_SIZE" value="512000">
<input type="hidden" name="maxbilder" value="<?=$_POST["maxbilder"];?>">
<?
//Ich geh davon aus, das "maxbilder" von einer vorher gehenden Seite kommt,
//die dem script sagt wie viele Bilder hochgeladen werden sollen.

for ($i = 1; $i <= $_POST["maxbilder"]; $i++) { ?>
<input type="file" name="bild<?=$i;?>"><br>
}


Und dann schickst du dein Formular an folgendes script
<?
for ($i=0; $i < $_POST["maxbilder"]; $i++) {

/*
Blödsinn, wenn die Datei größer ist als MAXFILESIZE, wird sie ja gar nicht erst hochgeladen.
if($userfile[$zahl]!=""){
$grosse = $userfile_size[$zahl];
if ($grosse >= '512001')
{
echo "Ihre Datei ist zu groß. Das Bild darf maximal 500kB(~0.48MB) betragen.";
} */

$name = 'bild' . $i;

if(is_uploaded_file($_FILES[$name])) {

$uploadname= 'gallery/' . $_FILES[$name]['name'];
if(!move_uploaded_file($_FILES[$name]['tmp_name'], $uploadname)) {
echo 'Fehler bei Bild Nr. ' . $i . '(' . $_FILES[$name]['name'] . ')';
exit;
}
}

echo 'Alle Bilder wurden wunderbar hochgeladen und gespeichert:<br>'
for ($i=0 < $_POST["maxbilder"]; $i++) {?>
<img src="gallery/<?=$_FILES[$name]['name'];?>"><br>
<? } ?>


Ohne es getestet zu haben, sollte aber so ähnlich funktionieren. (Esist schon spät. bzw. früh! ;))

Den rest kannst du dir hoffentlich denken und dementsprechend anpassen. *gähn*

Gute Nacht!

 
themonk
26-02-2006, 11:04 
 
Habe mir dein Script angeschaut und auch ausprobiert und abgeändert, dennoch kommt der selbe Fehler.

Wenn ich jetzt if(!is_uploaded_file($_FILES[$name])){
echo "FEHLER";
exit;
}
Rausnehme dann funktioniert das ganze. Aber brauche ich das nicht?
is_uploaded_file (http://de.php.net/manual/de/function.is-uploaded-file.php)


Blödsinn, wenn die Datei größer ist als MAXFILESIZE, wird sie ja gar nicht erst hochgeladen.
Habe irgendwo gelesen das man dieses umgehen kann und somit größere Datei hochladen kann

 
haSta
26-02-2006, 16:52 
 
Sicher kann man die Formular Begrenzung umgehen, dann bietet das doch schon etwas mehr Sicherheit, auch die Überprüfung auf den richtigen file type ist da schon wichtig, da hast du definitiv recht.

Bist du sicher das die Datei nicht größer war als 512 KB?
Wo hostest du das ganze? Kann man sich das ansehen?

probier mal die prüfung auf:
if(!is_uploaded_file($_FILES[$name]['tmp_name'])){
echo "FEHLER";
exit;
}

 
themonk
26-02-2006, 17:17 
 
Jetzt geht es. Das tmp_name fehlte.

Wo hostest du das ganze? Kann man sich das ansehen?
Was meinst du damit?

 
haSta
26-02-2006, 17:30 
 
Ja, ich war heute morgen doch etwas verpennt. Ich meinte bei welchem Webspace provider du bist und ob man sich das ergebnis mal ansehen kann, aber da es ja funktioniert... Viel spass damit! ;)

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:12 Uhr.