| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

07-07-2009, 21:12
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Zitat:
Zitat von piratos
Bleiben wir mal bei dem vorhandenen:
Direktausgabe (bekannt)
PHP-Code:
<?php
$img = imagecreatefromjpeg($imgname);
header('Content-Type: image/jpg');
imagejpeg($img);
?>
|
Was'n Unfug. Wieso lässt du die Bilddaten über die GD-Lib-Funktionen laufen? Das verbrät nur unnötig Speicher und Rechenzeit, und falls die Abmessungen zu groß sind, um per GD-Lib in den Hauptspeicher geladen zu werden, bekommst du noch die "Out-of-Memory"-Meldung inklusive Scriptabbruch. Schau dir mal readfile() an. Das leidet unter keiner dieser Limitierungen.
Zitat:
Beim Einsatz von Templateengine weist man die Inhalte zu und gibt Sie dann an der gewünschten Stelle aus.
PHP-Code:
$img = imagecreatefromjpeg($imgname);
imagejpeg($img);
$out = ob_get_contents();
ob_end_clean();
$tpl->assign('bild1',$sout);
Im Inhalt sprich Template setzte man dann z.B.
PHP-Code:
header('Content-Type: image/jpg');
echo $tpl->VARS['bild1'];
|
Schau mal, das geht auch in 3 Zeilen und ganz ohne unnötiges Output-Buffering:
PHP-Code:
$tpl->assign('bild1', file_get_contents($imgname));
header('Content-Type: image/jpg');
echo $pl->VARS['bild1'];
Ich würde aber die Variante mit readfile() vorziehen, weil die nicht den Umweg über eine PHP-String-Variable geht und somit auch nicht vom Memory-Limit abhängig ist.
Zitat:
Damit ist der Code von der Ausgabe getrennt.
Was auch immer man im Code anstellt ist für die Ausgabe und deren Gestaltung unineteressant.
Das war das simple Prinzip einer Templateengine.
|
Das glaubst du.
Google doch einmal nach "presentation logic" und "business logic" und vergiss "Code" und "Gestaltung" lieber wieder.
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
|

07-07-2009, 21:49
|
|
|
Also ich muss mich schon sehr wundern.
Das ist ein Minibeispiel um das zu verdeutlichen und nichts konkretes im Einsatz.
Und was Templateengine betrifft musst du mir rein nichts erzählen, nicht nur das ich Jahre an Erfahrungen mit diversen habe sondern zudem auch noch eine eigene.
Und wie man so etwas perfomant gestaltet das muss mir auch keiner erzählen das ist im brutalen Altagseinsatz und das nicht bei Pippifax - Websites.
Und das eine Templateengine höchst performant eingesetzt werden kann, das wissen alle meine User.
|

07-07-2009, 22:02
|
|
PHP-Desaster
PHP Expert
|
|
Registriert seit: Mar 2006
Beiträge: 3.104
|
|
Es geht hier ja nicht um das Für und Wider von Templateengines generell, sondern um die Tatsache, dass der Einsatz einer solchen für das Ausliefern eines Bildes einfach überflüssig ist, sondern sogar zu umständlich wäre. Separation von Präsentation und Business ist die eine Sache, aber bei der Auslieferung einfachster Ressourcen kann wohl kaum von Business gesprochen werden. Nebenbei führt der Einsatz einer Templateengine nicht direkt zu der Trennung zuvor genannter.
|

07-07-2009, 22:12
|
unset
 Moderator
|
|
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.778
|
|
Verstehe ich immer noch nicht. Das Template besteht also aus nichts als aus einem Header und den Bilddaten?
Ich würde im Leben ja nicht auf die Idee kommen, im View (respektive Template) nochmal einen Header zu schicken?!
|

08-07-2009, 00:52
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Zitat:
Zitat von piratos
... musst du mir rein nichts erzählen ... Jahre an Erfahrungen ... eine eigene ... im brutalen Altagseinsatz ... nicht bei Pippifax - Websites
|
Ich habe mir dein Zeug* mal angesehen. Die Applikation sind 500 Zeilen Spaghetticode. Die Template Engine besteht im Wesentlichen aus zwei kruden eval()-s. Die Performance kommt duch exzessives Caching.
Da steckt kein bißchen Erfahrung drin. *no offense*
*) Link in deinem Profil. Ich will es nicht namentlich nennen, denn Google liest mit.
|

08-07-2009, 00:59
|
unset
 Moderator
|
|
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.778
|
|
Non-Pipifax-Seiten, bei denen ich hinter die Kulissen gucken konnte, haben durchweg gar kein Templatesystem/-Engine verwendet. Von PHP mal abgesehen  Und ich durfte schon ein bisschen sehen
|

08-07-2009, 14:06
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Zitat:
Zitat von piratos
Das ist ein Minibeispiel um das zu verdeutlichen und nichts konkretes im Einsatz.
|
Wir hatten hier aber ein konkretes Problem zu lösen -- und der hierfür unnötige Einsatz einer Template-Engine dürfte den Threaderöffner eher verwirren, denn erhellen. Er hatte ja so schon Schwierigkeiten, den gegebenen Ratschlägen zu folgen.
Zitat:
Und was Templateengine betrifft musst du mir rein nichts erzählen, nicht nur das ich Jahre an Erfahrungen mit diversen habe sondern zudem auch noch eine eigene.
Und wie man so etwas perfomant gestaltet das muss mir auch keiner erzählen das ist im brutalen Altagseinsatz und das nicht bei Pippifax - Websites.
|
Ich hatte keineswegs vor, dir auf die Füße zu treten.
Die "Performance-Betrachtungen" meinerseits waren hauptsächlich für den Threaderöffner gedacht. Allerdings redet er anscheinend nicht mehr mit uns ...
Zitat:
|
Und das eine Templateengine höchst performant eingesetzt werden kann, das wissen alle meine User.
|
Das mag sein, aber in dem Fall hier geht es um ein Script, das jedesmal dann gestartet wird, wenn eine kleine Grafik (so 'ne Art "webbug") angefordert wird. Das ist ansich schon Overkill, ein paar MByte Script-Engine anzuwerfen, nur um ein paar Bytes an Binärdaten auszuliefern. Da muss ich nicht auch noch eine Template-Engine includen.
Ich würde sogar soweit gehen, das Laden der (Grafik-)Datei ganz zu wegzulassen. Das hat neben der Einsparung von Dateioperationen den Vorteil, dass man keine Fehler mehr abfangen muss.
PHP-Code:
<?php
header('Content-Type: image/gif');
echo base64_decode(
'R0lGODlhCAAIAIAAAAAAAPACH5BAAAAAAA//'.
'LAAAAAAIAAgAAAIKjI9pcKwPE5guFgA7'
);
?>
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
Geändert von fireweasel (08-07-2009 um 18:51 Uhr)
|

08-07-2009, 14:25
|
unset
 Moderator
|
|
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.778
|
|
Zitat:
Zitat von fireweasel
PHP-Code:
<?php
header('Content-Type: image/gif');
echo base64_decode(
'R0lGODlhCAAIAIAAAAAAAPACH5BAAAAAAA//'.
'LAAAAAAIAAgAAAIKjI9pcKwPE5guFgA7'
);
?>
|
Aber auch nur, wenn es wirklich kleine Grafiken sind, wo der Request-Overhead die Dateigröße (in Summe) übersteigt. Ansonsten stehst du hier nämlich vor einem neuen Problem: Das Chaching des Browsers wird so ausgehebelt.
|

08-07-2009, 18:59
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Zitat:
Zitat von unset
Aber auch nur, wenn es wirklich kleine Grafiken sind, wo der Request-Overhead die Dateigröße (in Summe) übersteigt.
|
Klar.
Zitat:
Zitat von unset
Ansonsten stehst du hier nämlich vor einem neuen Problem: Das Chaching des Browsers wird so ausgehebelt.
|
Was hier möglicherweise sogar gewünscht ist?
Die Anwendung als "Trackingpixel" schließt diese Interpretation zumindest nicht aus ...
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
|

08-07-2009, 19:54
|
unset
 Moderator
|
|
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.778
|
|
Naja, aber bei einem Trackingpixel _will_ man ja einen weiteren Request, und keinen Inlinepixel. Wenn man nämlich in der Lage ist, eine Grafik inline einzubauen, braucht man keinen Trackingpixel mehr.
|

08-07-2009, 19:58
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
@unset: Wie kommst du auf inline?
|

08-07-2009, 20:01
|
unset
 Moderator
|
|
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.778
|
|
Oh, wie peinlich. Ich sollte die Posts besser lesen ;-)
Hab da irgendwie in dieser Art was gelesen:
PHP-Code:
<img src="data:image/gif;base64,..." />
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|