Problem: Dateiverwaltung/GD-Bibliothek - Workaround

Gesperrt
Carsten
Beiträge: 20
Registriert: Fr 28. Mär 2003, 10:00
Wohnort: Bayern
Kontaktdaten:

Problem: Dateiverwaltung/GD-Bibliothek - Workaround

Beitrag von Carsten » Do 15. Jul 2004, 00:58

Auch bei mir gabs Probleme mit Dateien ab einer bestimmten Größe in der Dateiverwaltung. Das rechte Inhaltsfenster mit der Dateiliste blieb einfach leer. Die Rezepte in den anderen Threads zu diesem Thema waren leider nicht hilfreich (es gibt wohl irgendwo noch ein Limit für die Dateigröße, die GD verarbeiten kann).

Meine GD-Konfiguration:
GD Support enabled
GD Version bundled (2.0.23 compatible)
FreeType Support enabled
FreeType Linkage with freetype
GIF Read Support enabled
GIF Create Support enabled
JPG Support enabled
PNG Support enabled
WBMP Support enabled
XBM Support enabled
Quick & Dirty - Workaround:
In der Datei contenido/includes/include.upl_files_overview.php Zeile 171 auskommentieren, also:

Code: Alles auswählen

// $htmlfileurl = capiImgScale($cfgClient[$client]['upl']['path'].$path.$file, $width, $height);
Dann werden keine Thumbnails mehr erzeugt und GD hat keine Probleme mehr. Für eine schönere Lösung sollte die aufgerufene Funktion überarbeitet werden um die Fehler abzufangen.

cu
Carsten
Contenido 4.6.8 auf Linux, Apache 1.3.26, PHP 4.4.2, MySQL 4.1.20

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Do 15. Jul 2004, 09:21

Die Frage ist jetzt, ab welcher Dateigröße es "Probleme" gab und woher diese Probleme kommen, denn ich hatte bisher nie Probleme, ganz gleich, wie groß die Bilder waren.

Carsten
Beiträge: 20
Registriert: Fr 28. Mär 2003, 10:00
Wohnort: Bayern
Kontaktdaten:

Beitrag von Carsten » Do 15. Jul 2004, 10:24

Hallo Timo, folgendes kleine Testskript (gdtest.php) auf meinem Server:

Code: Alles auswählen

<?php
	$im = imagecreatefromjpeg("bild.jpg");
	imagejpeg($im);
?>
liefert mir bei Dateien ("bild.jpg") ab einer bestimmten Größe folgende Fehlermeldung:

Code: Alles auswählen

Fatal error: Allowed memory size of 26214400 bytes exhausted (tried to allocate 2792 bytes) in gdtest.php on line 2
Die kritische Größe ist bei mir wohl 262144 Byte. Diesen Eindruck hatte ich jedenfalls bei Tests mit verschieden großen Dateien. Aus den anderen Threads zu diesem Thema entnehme ich aber, dass diese kritische Größe bei verschiedenen Umgebungen wohl unterschiedlich ist.

Kannst Du damit was anfangen?!

cu
Carsten
Contenido 4.6.8 auf Linux, Apache 1.3.26, PHP 4.4.2, MySQL 4.1.20

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Do 15. Jul 2004, 11:18

Eigentlich eher nichts, da müssten die PHP-Jungs was mit anfangen können. Sehe ich daher nicht als Contenido-Bug ;)

Carsten
Beiträge: 20
Registriert: Fr 28. Mär 2003, 10:00
Wohnort: Bayern
Kontaktdaten:

Beitrag von Carsten » Do 15. Jul 2004, 11:50

Nun gut, Timo.
Aber anscheinend taucht dieses Problem bei vielen Contenido-Installationen auf. Ist also sicher nicht verkehrt einen Blick drauf zu werfen.

Ein wichtiger Kernbereich von Contenido - die Dateiverwaltung - arbeitet mit der GD-Library bzw. mit der PHP/GD-Schnittstelle, da sollte man doch sicherstellen, dass die Schnittstelle auch funktioniert. Wenn ohne jede Fehlermeldung zentrale Contenido-Funktionen ausfallen, fördert das nicht gerade die Tauglichkeit und Akzeptanz der Software, auch wenn die eigentliche Fehlerquelle außerhalb von Contenido liegt.

Und mit Verlaub: Das Nichtabfangen von Fehlern halte ich schon für ein Bug.
Contenido ist ein super CMS. Ich möchte es weiterhin einsetzen und auch gerne dazu beitragen, dass es weiter verbessert wird.
Nebenbei: Welche GD Version verwendest Du?

Carsten
Contenido 4.6.8 auf Linux, Apache 1.3.26, PHP 4.4.2, MySQL 4.1.20

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Do 15. Jul 2004, 12:09

Das mag ja sein, aber wenn die GD-Library im Zusammenspiel mit PHP nicht oder nicht richtig funktioniert, dann kann da Contenido nichts daran ändern!

Weiterhin wirst du, wenn du ein wenig recherschierst, feststellen, daß du diesen Fehler, der von PHP erzeugt wird, nicht abfangen kannst. Ein hartes Limit für Dateigrößen einzubauen ist sicherlich der falsche Weg.

Wenn du eine Straße mit Nägeln hast, hast du auch das Phänomän, daß fast alle Autos danach platte Reifen haben, aber der Lösungsansatz, jedes Auto mit Betonreifen zu versehen, nicht gerade der beste ist.

Was ganz einfach heißt: Wir können nicht für sämtliche PHP-Bugs, die eventuell mit irgendwelchen PHP/GD/sonstwas-Versionen auftreten könnten, Workarounds einbauen. Das macht keiner, der ernsthaft Software entwickelt.

Zu deiner letzten Frage: Wir verwenden ganz verschiedene Versionen von GD und PHP, und so etwas ist uns bisher nie aufgefallen. Wenn so etwas bei uns passieren würde, würden wir PHP und/oder GD upgraden.

Carsten
Beiträge: 20
Registriert: Fr 28. Mär 2003, 10:00
Wohnort: Bayern
Kontaktdaten:

Beitrag von Carsten » Do 15. Jul 2004, 14:16

Verstehe ich. Dennoch könnte man die Autofahrer auf eine Umleitung hinweisen.
Wie auch immer, ich will nicht Deine Zeit stehlen.

Aber eine interessante Sache habe ich klären können: Die Ursache!
Sie liegt in der PHP-Konfiguration bei der Option memory_limit. Damit wird der für ein Skript verfügbare Speicher begrenzt. Wenn hier wenig eingestellt ist und große Dateien (d.h. mehrere hundert kByte) hochgeladen werden, verschluckt sich das scheinbar speicherhungrige GD. Standardwert ist 8M. Man kann diesen Wert in PHP mit ini_get prüfen und ggf. warnen, oder für die Laufzeit des Skriptes mit ini_set verändern oder irgendwie anders reagieren.

Aber vielleicht hilft ja auch schon dieser Hinweis, damit jeder Betroffene seine PHP-Konfiguration entsprechend anpassen kann. Ich habe dreist einfach mal 50M eingestellt (habe ja auch viel RAM...).

cu
Carsten
Contenido 4.6.8 auf Linux, Apache 1.3.26, PHP 4.4.2, MySQL 4.1.20

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Do 15. Jul 2004, 14:56

8 MB sind für die meisten Umgebungen genügend. Warum deine GD-Library mehr als 20MB (laut deinem Errorlog 26214400 Bytes) verbraucht, ist mir nicht ganz klar und deshalb vermute ich nach wie vor, daß deine GD-Library ein Problem hat.

Was noch nicht geklärt wurde: Entspricht diese Größe (in etwa) der Größe des hochgeladenen Bildes?

Carsten
Beiträge: 20
Registriert: Fr 28. Mär 2003, 10:00
Wohnort: Bayern
Kontaktdaten:

Beitrag von Carsten » Do 15. Jul 2004, 15:29

Nein, die Probleme traten ab einer Bildgröße von ca. 300 kB auf.
Contenido 4.6.8 auf Linux, Apache 1.3.26, PHP 4.4.2, MySQL 4.1.20

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Do 15. Jul 2004, 15:54

Ist also doch eher ein Bug in der GD-Library...

Gesperrt