Ankündigung

Einklappen
Keine Ankündigung bisher.

Wie Grafik aus GDLib Persistieren ¿

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Gast-Avatar
    Ein Gast erstellte das Thema Wie Grafik aus GDLib Persistieren ¿.

    Wie Grafik aus GDLib Persistieren ¿

    Yo,

    Ich wüsste gerne wie man in PHP ne Grafik so persistiert dass man das Ergebnis in eine Variable bekommt und nicht über Umwege gehen muss um das Ergebnis zu bekommen.

  • Gast-Avatar
    Ein Gast antwortete
    ^^^ man kann sicher aus einer Mücke einen Elefanten machen ...

    - Als erstes braucht man sowiso nen Dateisystem
    Wo legst du denn deine PHP-Scripte ab ?
    Und wo ist dort das Problem ein bildchen abzulegen, und bei bedarf zu laden ?

    - Berechtigungen auf Verzeichnis müssen gesetzt werden
    Keine Ahnung was du veranstalten willst.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Zitat von robo47
    1) Datensicherung und wiederherstellung führt oftmals zu problemen, weil die Dumps extrem groß werden
    Ich habe kein Problem mit großen Dumps.

    Zitat von robo47
    2) Starke Limitierung der Dateigröße da bei den meisten hostern ein query maximal zwischen 512 kb und 2 MB haben darf
    Also mein Hoster bietet MySQL an und da sind die Anfragen nicht auf 2 MB beschränkt.

    Zitat von robo47
    3) will ich informationen wie typ, größe (auflösung) etc, muss ich erst die komplette Daten aus der DB holen -> viel unnötiger overhead stichwort www.php.net/getimagesize und exif-informationen etc ..
    Yo, sollte ich das wirklich brauchen dann kommt das als Spalte in die Tabelle.

    Zitat von robo47
    4) Viele Programme kommen nicht mit Datenbankdumps klar die binäre Daten enthalten, können sie nicht richtig speichern etc

    Man kann auch einfach Programme verwenden die Funktionieren.

    Zitat von robo47
    5) Querys in der Größe die dafür nötig sind, gehen auch gut zu lasten des mysql-servers, und auch hier kommt der speed wieder ins spiel, weil unter umständen der mysql-server eben nicht lokal auf dem webserver läuft, sondern der ganze anfragenkram auch noch übers netzwerk muss und somit doppelter traffik entsteht
    -> vom mysql-server zum webserver, und bei Ausgabe etc dann vom webserver zum User/Browser
    Ja genau, hier kommt wieder die Performanz ins Spiel.
    Wie gesagt die ist nachrangig.

    Zitat von robo47
    Was mich mal interessieren würde, was du hier mit Inkonsitenz und höherer Komplexität meinst.
    Die Chance dass bei nem query hin und her irgendwo mal ein fehler auftritt halte ich für höher wie wenn die Datei nur aus dem Dateisystem kommt

    Komplexität ?
    Steht auch im Artikel auf den Bruchpilot verwiesen hat :
    Die Datei wird im Dateisystem umbenannt, daraufhin sind die Daten inkonsistent. Das kann man dann zwar durch das prüfen aller Verweise (ins Dateisystem) feststellen, aber nicht mehr in einen konsistenten Zustand überführen ohne die Grafik neu einzulesen/zu erstellen.

    Komplexität : Dadurch das man sich noch mit Dateien beschäftigen muss wird dass Programm komplexer.

    Wieso sollte bei "nem query hin und her irgendwo mal ein Fehler" auftreten ¿
    Meinst du durch einen Fehler im Programm, im WWW Server, im DB Server oder warum ¿

    Zitat von robo47
    - Als erstes braucht man sowiso nen Dateisystem
    - Berechtigungen auf Verzeichnis müssen gesetzt werden
    - Wenn das Dateisystem mal den Zugriff verweigert weil nen anderes Programm die Datei exklusiv geöffnet hat geht sowiso nix mehr
    - Öhm blub ? Dateisystem ? ich speiche die Dateien einfach alle mit der ID die sie haben sollten in nem Ordner, ohne Endung oder was und leg ne .htaccess mit "DENY FROM ALL" rein, damit von aussen so keiner rankommt.
    - Also Zugriffsrechte für nen Ordner ausreichend zu setzen, dass ein Script drauf zugreifen kann, sollte jeder programmierer beherschen ... Imho erledigt sowas im Normalfall (Überprüfung und setzen) die Installationsroutine.
    - Stellt sich doch die Frage, was DU auf deinem Webspace/Server laufen lässt, was das bewerkstelligt, ich mein natürlich könnte auch irgendein Script den zugriff auf die Dateien die deine Tabelle in der MYSQL-Datenbank darstellen unterbinden, kommt sich hier gleich.
    Für den konkurierenden Zugriff bei Dateien brauchts nicht immer nen anderes Programm, da reicht schon eine andere Instanz des selben Skripts/Programms.
    Und ich selber brauche keine Datensätze zu sperren.
    Wenn ich zum Beispiel auf meinem Server ein paar Dateien durchsuchen lassen will kann mir das mit der von dir empfolenen Lösung zum Verhängnis werden. Wenn ich gleiches mit einer Datenbank mache muss ich dagegen die Datensätze nicht dafür sperren.

    Zitat von robo47
    Ich hab 1 Jahr an einem CMS weitergearbeitet, dass von den Programmierern so gebaut worden war, dass SÄMTLICHE binärDaten in der DB standen, das hat von vorne bis hinten Probleme gemacht, seien es die Backups, Umzüge zu anderen Providern, die maximale Dateigrößen, besonders wenn mehrere Bilder auf einer Seite waren und ne Seite wirklich mal zugriffe hatte, ging die Auslastung der Mysql-Datenbank sehr schnell, sehr hoch.
    Und grade dann war Performance nicht mehr da. Und jenachdem für was das Script gedacht ist und was im Endeffekt das produktive Umfeld ist kann es oftmals ein Problem werden.
    Während es deinem Hoster schön egal ist, wenn du deinen Eigenen Server hast, störst du mit solcher unnötiger Auslastung bei nem Shared-Host anbieter unter umständen das komplette Gleichgewicht, bringst den Mysql-Server an seine Grenzen und dann sagt dir dein Hoster, Ne du, is ned, deine Applikation ist zu hungrig, mach was oder such dir nen anderen hoster. (In eigentlich fast jeder AGB von Providern gibts Klauseln um User die Scripte laufen lassen die zu viel Performance fressen los zu werden).

    mfg
    robo47
    Hier gehts ja wieder um Performanz und anscheinend auch ein paar spezifische Probleme die du mit einer bestimmten Anwendung hattest. Da kann ich dir natürlich nix dazu sagen weil diese Probleme (vieleicht noch ) nicht hab.

    Aber ich schätze dein Bemühen mich zu warnen.

    Einen Kommentar schreiben:


  • robo47
    antwortet
    Weitere Punkte die gegen ein Speichern in der Datenbank sprechen: (nicht alles auf Bilder bezogen sondern zum Teil allgemein auf binäre Daten)

    1) Datensicherung und wiederherstellung führt oftmals zu problemen, weil die Dumps extrem groß werden
    2) Starke Limitierung der Dateigröße da bei den meisten hostern ein query maximal zwischen 512 kb und 2 MB haben darf
    3) will ich informationen wie typ, größe (auflösung) etc, muss ich erst die komplette Daten aus der DB holen -> viel unnötiger overhead stichwort www.php.net/getimagesize und exif-informationen etc ..
    4) Viele Programme kommen nicht mit Datenbankdumps klar die binäre Daten enthalten, können sie nicht richtig speichern etc
    5) Querys in der Größe die dafür nötig sind, gehen auch gut zu lasten des mysql-servers, und auch hier kommt der speed wieder ins spiel, weil unter umständen der mysql-server eben nicht lokal auf dem webserver läuft, sondern der ganze anfragenkram auch noch übers netzwerk muss und somit doppelter traffik entsteht
    -> vom mysql-server zum webserver, und bei Ausgabe etc dann vom webserver zum User/Browser


    Was mich mal interessieren würde, was du hier mit Inkonsitenz und höherer Komplexität meinst.
    Die Chance dass bei nem query hin und her irgendwo mal ein fehler auftritt halte ich für höher wie wenn die Datei nur aus dem Dateisystem kommt

    Komplexität ?


    - Als erstes braucht man sowiso nen Dateisystem
    - Berechtigungen auf Verzeichnis müssen gesetzt werden
    - Wenn das Dateisystem mal den Zugriff verweigert weil nen anderes Programm die Datei exklusiv geöffnet hat geht sowiso nix mehr
    - Öhm blub ? Dateisystem ? ich speiche die Dateien einfach alle mit der ID die sie haben sollten in nem Ordner, ohne Endung oder was und leg ne .htaccess mit "DENY FROM ALL" rein, damit von aussen so keiner rankommt.
    - Also Zugriffsrechte für nen Ordner ausreichend zu setzen, dass ein Script drauf zugreifen kann, sollte jeder programmierer beherschen ... Imho erledigt sowas im Normalfall (Überprüfung und setzen) die Installationsroutine.
    - Stellt sich doch die Frage, was DU auf deinem Webspace/Server laufen lässt, was das bewerkstelligt, ich mein natürlich könnte auch irgendein Script den zugriff auf die Dateien die deine Tabelle in der MYSQL-Datenbank darstellen unterbinden, kommt sich hier gleich.

    Ich hab 1 Jahr an einem CMS weitergearbeitet, dass von den Programmierern so gebaut worden war, dass SÄMTLICHE binärDaten in der DB standen, das hat von vorne bis hinten Probleme gemacht, seien es die Backups, Umzüge zu anderen Providern, die maximale Dateigrößen, besonders wenn mehrere Bilder auf einer Seite waren und ne Seite wirklich mal zugriffe hatte, ging die Auslastung der Mysql-Datenbank sehr schnell, sehr hoch.
    Und grade dann war Performance nicht mehr da. Und jenachdem für was das Script gedacht ist und was im Endeffekt das produktive Umfeld ist kann es oftmals ein Problem werden.
    Während es deinem Hoster schön egal ist, wenn du deinen Eigenen Server hast, störst du mit solcher unnötiger Auslastung bei nem Shared-Host anbieter unter umständen das komplette Gleichgewicht, bringst den Mysql-Server an seine Grenzen und dann sagt dir dein Hoster, Ne du, is ned, deine Applikation ist zu hungrig, mach was oder such dir nen anderen hoster. (In eigentlich fast jeder AGB von Providern gibts Klauseln um User die Scripte laufen lassen die zu viel Performance fressen los zu werden).

    mfg
    robo47

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Zitat von Bruchpilot
    - Als erstes braucht man sowiso nen Dateisystem
    Stimmt, schon für die php Skriptdateien. Oder wo liegen die rum?
    Ich weiß nicht ob das immer so sein muss, da kenn ich mich nicht so aus.

    Das hätte ich vieleicht etwas ausführlicher schreiben sollen. Ich meine man brauch ja dann auch bestimmte Rechte im Dateisystem die man unter umständen vom Hoster gar nicht hat.

    Zitat von Bruchpilot
    - Berechtigungen auf Verzeichnis müssen gesetzt werden
    s.o.
    Bei Datenbanken müssen idR auch Benutzerrechte beachtet werden.
    Die Rechteverwaltung in der DB ist für mich einfacher als die im Dateisystem. Wenn ich mir ne neue DB anlege dann hab ich auch alle Rechte drauf. Mit den Berechtigungen die man im FTP setzen kann ken ich mich nicht so aus. Vieleicht is das der Grund warum ichs in der DB einfacher hab.

    Zitat von Bruchpilot
    - Wenn das Dateisystem mal den Zugriff verweigert weil nen anderes Programm die Datei exklusiv geöffnet hat geht sowiso nix mehr
    Das gilt auch für Datenbanken, Tabellen und bei einigen Systeme sogar für einzelne Datensätze.
    Klar kann ich auch Datensätze sperren.
    Um eine Datei zu ändern muss ich diese sperren. Einen Datensatz kann ich aber verändern ohne ihn vorher zu sperren.
    Daraus folgt -> Das sperren von Datensätzen kommt seltener vor und lässt sich bei manchen Anwendungen sogar vermeiden.

    Zitat von Bruchpilot
    ich sehe da im Skript nur einen unnötigen Zwischenschritt, der Zeit und Speicher kostet (die Zeichenkettenrepräsentation) und eine Belastung für die DB (die ihre Daten dann vermutlich auch nur irgendwie im Dateisystem ablegt).
    Von mir aus pack die Daten in die Datenbank. Den link auf http://www.php-faq.de/q/q-db-blob.html will ich Dir trotzdem nicht ersparen.
    Man könnte Grafiken natürlich auch im Dateisystem speichern.

    Interessanter Artikel, interessante Seite.

    Der Artikel nennt ja schon einen Grund warum man die Grafiken nicht im Dateisystem ablegen sollte.
    Für das ablegen im Dateisystem nennt der Artikel folgende Vorteile :
    0. Es müssen weniger Skripte gestartet werden. -> bessere Performanz auf dem WWW Server. Die behauptung das es "um ca. den Faktor 10 effizienter" ist kann man glauben, einen Beweis dafür habe ich nicht gesehen.
    1. Die Grafik kann in Teilen verändert werden. -> Für mich nicht relevant, ich wüsste gar nicht was ich mit einem Teil der Datei anfange sollte.
    2. Das Dateisystem kann schneller sein. -> Bessere Performanz

    Als Vorteil der Variante mit Dateisystem bleibt für mich somit nur eine bessere Performanz.
    Die Nachteile der Variante mit Dateisystem sind die mögliche Inkonsistenz und die Höhere Komplexität der Anwendung.

    Die Performanz spielt in diesem Fall eine untergeordnete Rolle, deshalb bleibe ich bei der Datenbank.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    - Als erstes braucht man sowiso nen Dateisystem
    Stimmt, schon für die php Skriptdateien. Oder wo liegen die rum?

    - Berechtigungen auf Verzeichnis müssen gesetzt werden
    s.o.
    Bei Datenbanken müssen idR auch Benutzerrechte beachtet werden.

    - Wenn das Dateisystem mal den Zugriff verweigert weil nen anderes Programm die Datei exklusiv geöffnet hat geht sowiso nix mehr
    Das gilt auch für Datenbanken, Tabellen und bei einigen Systeme sogar für einzelne Datensätze.

    ich sehe da im Skript nur einen unnötigen Zwischenschritt, der Zeit und Speicher kostet (die Zeichenkettenrepräsentation) und eine Belastung für die DB (die ihre Daten dann vermutlich auch nur irgendwie im Dateisystem ablegt).
    Von mir aus pack die Daten in die Datenbank. Den link auf http://www.php-faq.de/q/q-db-blob.html will ich Dir trotzdem nicht ersparen.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Zitat von CIX88
    Ist das nicht Speicherverschwendung ?
    Also ich sehe nicht wo da Speicher verschwendet wird.

    Zitat von CIX88
    Was spricht dagegen temporär ein Bild zu speichern, und bei Bedarf einfach zu laden ?
    Dann kann es überall eingesetzt werden.

    bin ich aber doch neugierig
    Jo ich auch.
    Ich denke mal mit Temporär speichern meinst du das speichern im Dateisystem.
    Der Grund warum ich diesen Umweg vermeiden ist ganz einfach das da ne Menge Probleme mit kommen können.

    - Als erstes braucht man sowiso nen Dateisystem
    - Berechtigungen auf Verzeichnis müssen gesetzt werden
    - Wenn das Dateisystem mal den Zugriff verweigert weil nen anderes Programm die Datei exklusiv geöffnet hat geht sowiso nix mehr

    Der Umweg übers Dateisystem zieht also ein Problem mit sich das ich mir natürlich ersparen will.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Zitat von Bruchpilot
    So, wo das jetzt gelöst ist, bin ich aber doch neugierig, für was diese Form benötigt wird
    Im moment verwende ich das nur um die Grafik in ner Datenbank zu speichern.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Ist das nicht Speicherverschwendung ?
    Was spricht dagegen temporär ein Bild zu speichern, und bei Bedarf einfach zu laden ?
    Dann kann es überall eingesetzt werden.

    bin ich aber doch neugierig
    Jo ich auch.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    So, wo das jetzt gelöst ist, bin ich aber doch neugierig, für was diese Form benötigt wird

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Zitat von Chr!s
    Mhm.. Keine Ahnung ob das geht, aber versuch mal vielleicht soetwas:
    PHP-Code:
    <?php
    $img 
    ImageCreate(..);

    // Dann wird dein Bild aufgebaut
    ob_start();

    ImagePNG($img);
    $imgData ob_get_contents();

    ImageDestroy($img);
    ?>

    Danke das funktioniert.

    Ich glaub das ist die wichtigste Funktion von PHP weil viele Funktionen ihre Ausgabe zum Klient oder in eine Datei umleiten. Die machen das viel zu umständlich.

    Einen Kommentar schreiben:


  • Chr!s
    antwortet
    Mhm.. Keine Ahnung ob das geht, aber versuch mal vielleicht soetwas:
    PHP-Code:
    <?php
    $img 
    ImageCreate(..);

    // Dann wird dein Bild aufgebaut
    ob_start();

    ImagePNG($img);
    $imgData ob_get_contents();

    ImageDestroy($img);
    ?>

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Zitat von Bruchpilot
    Persistent über mehr als einen Skriptdurchlauf?
    Dann speicher die Grafik einfach als Datei per http://de3.php.net/manual/de/function.imagegd2.php ab und lade sie bei Bedarf wieder mit http://de3.php.net/manual/de/functio...atefromgd2.php
    Erstmal danke für die Mühe.

    Die Funktion die du nennst kann ich nicht benutzen weil :

    Zitat von php.net
    imagegd2
    (PHP 4 >= 4.1.0, PHP 5)

    imagegd2 -- Output GD2 image to browser or file
    Laut Doku wird die Ausgabe zum Klient umgeleitet oder ins Dateisystem umgeleitet.
    Diesen Umweg würde ich gerne vermeiden, daher hab ich geschrieben das ich die Grafik in eine Variable speichern lassen will.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Persistent über mehr als einen Skriptdurchlauf?
    Dann speicher die Grafik einfach als Datei per http://de3.php.net/manual/de/function.imagegd2.php ab und lade sie bei Bedarf wieder mit http://de3.php.net/manual/de/functio...atefromgd2.php

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Hmm.

    Also ich hab eine Grafik.
    Und die möchte ich speichern und später wieder laden können.
    Ich möchte die Grafik in eine Variable speichern und aus einer Variable laden.
    Das Laden kann ja vieleicht mit imagecreatefromstring erledigt werden - falls die Grafik nen bestimmtes format hat.

    Aber ich hab keine Ahnung wie ich die Grafik speichern soll.

    Einen Kommentar schreiben:

Lädt...
X