Antworten auf deine Fragen:
Neues Thema erstellen

PHP: Bilderupload mit großen Datein

KATERchen

Aktives Mitglied

Hallo,
ich habe mir nach einiger Zeit mal wieder ein altes Script vorgenommen. Es hat nie richtig funktioniert und jetzt merke ich, das es schon gleich zu Anfang Schwierigkeiten gibt.
Ich will per Webseite Fotos hochladen. Im Script jetzt bis zu fünf Fotos, das soll aber auch noch erweitert werden. Wenn ich jetzt "normal-große" Fotos nehme, klappt es auch bis hierhin, aber wenn die Fotos 3-4MB groß sind darf ich maximal vier Fotos angeben, ab fünf macht er dann gar nix mehr. Wo liegt der Fehler?
PHP:
if(isset($_FILES['datei']))
{
for ($i = 1; $i <= count($_FILES['datei']['name']); $i++ ) {
move_uploaded_file($_FILES['datei']['tmp_name'][$i] , $PicPathOut . $_FILES['datei']['name'][$i]); 
}

<form method="post" enctype="multipart/form-data" action="<? $_SERVER["PHP_SELF"];?>">
<input type="hidden" name="upload" value="" >
<input type="file" name="datei[1]" id="Datei1" /><br />
<input type="file" name="datei[2]" id="Datei2" /><br />
<input type="file" name="datei[3]" id="Datei3" /><br />
<input type="file" name="datei[4]" id="Datei4" /><br />
<input type="file" name="datei[5]" id="Datei5" /><br />
<input type="submit" name="submit" value="Upload!" />
</form>
 

AW: PHP: Bilderupload mit großen Datein

der fehler liegt wahrscheinlich darin, dass das script nach 30 sekunden aus sicherheit abgebrochen wird.

am besten ist, die bilder vorher mit einen bildbearbeitungsprogramm zu verkleinern und erst dann per formular hochladen.

wenn du unbedingt größere bilder (mehrere) hochladen willst, wirst du es mit einem ftp-programm machen müssen.
 
AW: PHP: Bilderupload mit großen Datein

oder du läst die Angegebenen Bilder direkt von php auf eine bestimmte pixel zahl runter rechnen das mache ich z.b. so brauchst du dir späöter auch keien gedanken machen wenn du sie wieder abrufst denn dann sind sie ja alle gleich groß.
 
AW: PHP: Bilderupload mit großen Datein

Du kannst auch array in eine session legen und und das Script nach jedem erfolgtem upload (eines Bildes) mit dem nächsten eintrag neustarten. wenn das einzelne Bild nicht länger als die max laufzeit braucht kannst du das so über stunden strecken*g*
 
AW: PHP: Bilderupload mit großen Datein

Problem dabei ist nur wenn du 6 Bilder hochladen willst und das zweite das script abbricht sind die letzten vier verloren. Oder habe ich da nen denk fehler?
 
AW: PHP: Bilderupload mit großen Datein

@sling
muss das bild nicht trotzdem zuerst auf dem server liegen, also hochgeladen werden?
 
AW: PHP: Bilderupload mit großen Datein

das ist wohl so. wenn das script aber zB in einem iframe läuft könnte man aber mit den in der session verbleibenden fortfahren.
 
AW: PHP: Bilderupload mit großen Datein

Hab ich vergessen. Laut meiner PHP.ini läuft ein Script 60 Sekunden, außerdem probiere ich im Moment auch eh nur lokal - ich denke also, an der Zeit sollte das nicht wirklich liegen. Für vier Bilder brauche ich gerade mal 2 bis 3 Sekunden - oder verstehe ich da was falsch?
Das mit dem vorher verkleinern hört sich gut an, aber wie soll das gehen? Letztlich brauche ich die Fotos eh nur in 800x600 und noch mal als 160xweißichnicht.Da das nicht für mich ist, wollte ich es so einfach wie möglich machen und die Bilder sollten direkt von der Kamera hochgeladen werden können.
Bin also für Ideen offen...
Das mit der Session habe ich nicht so ganz verstanden. Wenn es mit einer Fehlermeldung abbricht (bild soundso konnte nicht geladen werden) währe das okay.
 
AW: PHP: Bilderupload mit großen Datein

Schon erledigt?
Falls nicht...
Eventuell liegts am RAM? Vermute jetzt einfach mal blind das Du auf XAMPP oder ähnlichem testest? Was ist als maximaler RAM verbrauch / Script eingestellt?
Eventuell auch mal in die .log s guggn, bei XAMPP unter xampp/apache/logs/error.log

Grüße
 
AW: PHP: Bilderupload mit großen Datein

Nicht ganz erledigt. Das Problem gibts noch, aber das Script ist fertig :)
Mit dem RAM hatte ich echte Probleme - er ließ sich nicht erhöhen. Er was auf 32M eingestellt und weder per Script noch manuell konnte ich das ändern - heißt, ich habs eingetragen, hat aber nichts geändert, es war immer noch 32M
Nach ein paar System-Neustarts hatte er es dann doch noch gerafft. Merkwürdig ist aber immer noch, daß es lokal (xampp) immer noch Fehlermeldungen gibt, während es auf einem Online-Server läuft - beide haben 65M.
 
AW: PHP: Bilderupload mit großen Datein

vielleicht unterscheidet sich einfach die Einstellungen für das Error reporting?
Laufen die Server vielleicht unter verschiedenen Betirebsystemen?
 
AW: PHP: Bilderupload mit großen Datein

Code:
[B]Fatal error[/B]:  Allowed memory size of 67108864 bytes exhausted (tried to allocate 13056 bytes) ...
Komsicher Weise läuft es auf einem Webserver mit 32MB super...
Habe jetzt aber auch nicht so ganz die Zeit, mich darum zu kümmern, woran es nun liegt.
 
AW: PHP: Bilderupload mit großen Datein

Das kommt aber nicht vom blanken Upload oder?
Solche Fehlermeldungen kommen eigentlich erst, wenn man Bilder mit Übergrößen mit der GDlib bearbeiten will. Dein Script hat hier über 65MB verbraucht.
 
AW: PHP: Bilderupload mit großen Datein

Dann arbeitet dein Script nicht richtig bzw. du hast die Funktionen zum verkleinern unsauber programmiert. Hier spielt auch der jeweiligen RAM eine wichtige Rolle, wenn Bilder zu große Breiten und Höhen haben.
Kleiner Hinweis:
 
AW: PHP: Bilderupload mit großen Datein

Das mit dem schlecht programmiert ist durchaus möglich. Genaugenommen habe ich ein Script aus dem Internet genommen und angepasst.
PHP:
$neueBreite=intval($breite*$tb_groesse/$hoehe);
$altesBild=ImageCreateFromJPEG("$tmp_path"."$file");
$neuesBild=imagecreate($neueBreite,$tb_groesse);
ImageCopyResized($neuesBild,$altesBild,0,0,0,0,$neueBreite,$tb_groesse,$breite,$hoehe);
ImageJPEG($neuesBild,"$path"."tn_"."$file");
ImageDestroy($neuesBild) ; 
}
if($hoehe > $norm_groesse){
//Normalgröße in Temp-Ordner - Orginale werden überschrieben

$neueBreite=intval($breite*$norm_groesse/$hoehe);
$altesBild=ImageCreateFromJPEG("$tmp_path"."$file");
$neuesBild=imagecreate($neueBreite,$norm_groesse);
ImageCopyResized($neuesBild,$altesBild,0,0,0,0,$neueBreite,$norm_groesse,$breite,$hoehe);
ImageJPEG($neuesBild,"$tmp_path"."$file"); 
ImageDestroy($neuesBild) ;
}
//Wasserzeichen
$Grafik = ImageCreateFromJPEG("$tmp_path"."$file");
$Wasserzeichen = ImageCreateFromPNG("$wasserzeichen");
ImageCopy($Grafik, $Wasserzeichen, 
imagesx($Grafik)-imagesx($Wasserzeichen), 
imagesy($Grafik)-imagesy($Wasserzeichen), 0, 0, 
imagesx($Wasserzeichen), 
imagesy($Wasserzeichen));
imagejpeg($Grafik,"$path"."$file");
ImageDestroy($Grafik);
ImageDestroy war vorher nicht drin, macht aber auch keinen unterschied. Die Fehlermeldung bekomme ich noch immer. Auch das ImageCreateTruecolor habe ich auf ImageCreate geändert - bringt auch nix.
Ich muß aber auch ehrlich gestehen, ich habe Deinen Link nur überflogen, weil ich im Augenblick zu viel zu tun habe, da ist dieses Script nicht soooo wichtig. Habe ich was wichtiges übersehen?
 
AW: PHP: Bilderupload mit großen Datein

ImageDestroy macht schon Sinn:


Bei ImageDestroy() muss nicht nur das alte Bild gelöscht werden, sondern auch das neu erstellte Bild. Ich vermute jetzt einfach mal, dass deine Bilder in der Breite und Höhe zu groß sind. Sowohl das Bild im Original als auch vielleicht das neu erstellte Bild. Wie groß ist denn das Bild im Original (Pixel)?

Was ich bei dir auf Anhieb sehe ist das ImageDestroy() nur mangelhaft zum Einsatz kommt. Die Ressourcen $altesBild und $Wasserzeichen bleiben im Speicher. Wenn bei $altesBild schon 30MB verbraucht werden, und bei $Wasserzeichen auch soviel, dann ist schnell Schluss :)

Wenn du praktisch das Wasserzeichen erstellt, dann sind in diesem Moment insgesamt 3 Bilder im RAM!!! Zum einen $altesBild, $Grafik und $Wasserzeichen. Ich vermute das dies der Grund deiner Fehlermeldung ist.
 
AW: PHP: Bilderupload mit großen Datein

Du hast mich gerade zum glücklichsten Menschen auf er Erde gemacht :):) - Das Scipt funktioniert jetzt endlich. Und das sogar bei extrem großen Fotos - direkt von der Kamera (3264x2448 - okay, ist ne alte Kamera :)
Leider läuft es nur lokal, da der Anbieter für die Webseite ein 32MB-Limit hat, aber früher oder später ist eh ein Wechsel geplant.
Danke Dir :)
Eine Frage habe ich aber noch zur Schreibweise, da habe ich nichts gefunden. Muß ich zwei Einträge machen:
PHP:
ImageDestroy($Bild_1)
ImageDestroy($Bild_2)
oder geht es so:
PHP:
ImageDestroy($Bild_1 , $bild_2)
 
AW: PHP: Bilderupload mit großen Datein

Nein, ImageDestroy() bezieht sich immer nur auf eine Image-Ressource.
Im Klartext, du musst jede Ressource extra aus dem Speicher entfernen.

Ja mit deinen 3264 x 2448 Pixel Bild wirst du auf deinen Webserver einige Probeme haben, da allein das laden dieses Bildes schon über 38MB baucht, und da ist noch nicht mal dein Bild mit dem Wasserzeichen erstellt :)
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
119.001
Beiträge
1.540.310
Mitglieder
68.231
Neuestes Mitglied
fosaxed
Oben