php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 29.08.2010, 03:29  
Benutzer
 
Registriert seit: 18.02.2010
Beiträge: 54
PHP-Kenntnisse:
Fortgeschritten
Codercrush ist zur Zeit noch ein unbeschriebenes Blatt
Standard [Erledigt] gzip "problem"

Hi alle zusammen,

ich bin momentan dabei mich mit der komprimierung von css und js Dateien auseinanderzusetzen. Ich habe bereits ein Skript geschrieben das mir die geforderten Css/Js Dateien lädt, komprimiert und als komprimierte .gz Datei abspeichert. Eingebunden wird das ganze z.B. bei Css als php-datei mit dem skript.

Hier also die einbindung des skripts:
PHP-Code:
<LINK rel="stylesheet" type="text/css" href="Css/include.css.php"
und hier das skript (nich vollständig!):
PHP-Code:
/**
------------------------------------------------------------------------
Header senden:
------------------------------------------------------------------------
*/
header('content-type: text/css; charset: UTF-8');
header('Accept-Encoding: gzip');
header('Vary: Accept-Encoding');
header('Content-Encoding: gzip');
header('Last-Modified: 'gmdate('D, d M Y H:i:s') .' GMT');
header('cache-control: must-revalidate');

/**
------------------------------------------------------------------------
Dateien durchlaufen:
------------------------------------------------------------------------
*/
for ($i 0$i count($aFiles); $i++)
{
    
$sFile $aFiles[$i];
    
    
$sCssFile $sFile .'.css';
    
$sGzFile  'gz/'$sFile .'.css.gz';
    
$sContent '';

    
// Pruefen ob Css-Datei existiert
    
if (file_exists($sCssFile))
    {
        
// Browserspezifisch einbinden?
        
if (empty($sBrowser) OR $sBrowser == getBrowser())
        {
            
// Komprimierte Datei vorhanden und noch aktuell?
            
if (file_exists($sGzFile) AND
                (
filemtime($sGzFile) >= filemtime($sCssFile)))
            {
                
// Komprimierte Datei laden
                
$sContent file_get_contents($sGzFile);
            }
            else
            {
                
// Css Datei laden
                
$sContent file_get_contents($sCssFile);
                
                
// Manuelle komprimierung
                
$sContent clean_css_code($sContent);
                
                
// Gzip komprimierung
                
$sContent gzencode($sContent6);
                
                
// In Datei schreiben
                
file_put_contents($sGzFile$sContent);
                
                
$bNew false;
            }
        }
    }

    
// Inhalt ausgeben
    
echo $sContent;

Funktionen: getBrowser(liefert einfach den aktuellen Browsernamen) und clean_css_code(entfernt kommentare usw.)

Das Problem ist nun das bei dem Codec mit gzip anscheinend nur einmal eine ausgabe erzeugt werden kann. Ich habe es auch schon mit ob_start() versucht, dies klappte aber nicht. Ich möchte vorerst versuchen alle Css-Dateien in einer Datei einzubinden, d.h. also ohne weitere http-Requests. Nicht wundern wegen der for-schleife anstatt einer foreach schleife, ist zu testzwecken. er läuft definitiv die schleife 2 mal!

Ich hoffe ich habe es einigermaßen verständlich erklärt.

Schonmal danke
__________________
Ich würde so gern die Welt verändern doch Gott gibt mir den Quellcode nicht.
Compiler sind wie Franzosen.. schnauzen einen immer nur an, wenn man ihre Sprache nich perfekt spricht.
Codercrush ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 29.08.2010, 10:28  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.071
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Morgen,
Zitat:
Das Problem ist nun das bei dem Codec mit gzip anscheinend nur einmal eine ausgabe erzeugt werden kann.
mir wird das Problem dabei leider nicht ganz klar. Wieso sollte nur eine Ausgabe möglich sein? Bekommst du eine Fehlermeldung oder ist der Inhalt der Datei dann nicht vollständig? Geht es um diese Ausgabe
Code:
// Inhalt ausgeben
echo $sContent;
?

Dann mach die Ausgabe doch nach der Schleife!

Gruß
__________________
HalloPHP
Asipak ist offline   Mit Zitat antworten
Alt 29.08.2010, 10:31  
Erfahrener Benutzer
 
Registriert seit: 23.08.2010
Beiträge: 492
PHP-Kenntnisse:
Fortgeschritten
mimomamu sorgt für eine eindrucksvolle Atmosphäremimomamu sorgt für eine eindrucksvolle Atmosphäre
Standard

Accept-Encoding ist ein Request-Header. Er ist nur für Anfragen gedacht (also für die Nachrichten, die der Client an den Server sendet), nicht für Antworten (die der Server an den Client sendet).

Zitat:
Zitat von Codercrush Beitrag anzeigen
Das Problem ist nun das bei dem Codec mit gzip anscheinend nur einmal eine ausgabe erzeugt werden kann.
Nö, es kann beliebig oft eine Ausgabe erzeugt werden. Es bleibt aber nur die letzte CSS-Datei in der komprimierten Datei übrig. Die anderen überschreibst du mit file_put_contents.

Zitat:
Zitat von Asipak Beitrag anzeigen
Dann mach die Ausgabe doch nach der Schleife!
Das hätte auch den Vorteil, das du ein
PHP-Code:
header('Content-Length: ' strlen($sContent)); 
senden kannst.
__________________
Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

Geändert von mimomamu (29.08.2010 um 10:51 Uhr).
mimomamu ist offline   Mit Zitat antworten
Alt 29.08.2010, 11:01  
Benutzer
 
Registriert seit: 18.02.2010
Beiträge: 54
PHP-Kenntnisse:
Fortgeschritten
Codercrush ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@Asipak:

also ich bekomm immer nur den inhalt der ersten Datei. er läuft aber definitv 2 mal durch, denn er erstellt mir ja die .gz dateien in einem rutsch, ich bekomm aber nur den inhalt der ersten datei!

@mimomamu:

was überschreibe ich mit file_put_contents? ... wenn die dateien schon erzeugt wurden, dann werden sie doch nur noch geladen.

Ich habe es grad versucht den inhalt in einer Variable zu speichern, jedoch bekomm ich weiterhin nur den Inhalt der ersten Datei und wie gesagt er läuft aber 2 mal durch, deshalb bin ich grad ziemlich verwirrt warum es nicht funktioniert.
Mit dem Header
PHP-Code:
header('Content-Length: ' strlen($sContent)); 
hat es leider auch nicht funktionert.
__________________
Ich würde so gern die Welt verändern doch Gott gibt mir den Quellcode nicht.
Compiler sind wie Franzosen.. schnauzen einen immer nur an, wenn man ihre Sprache nich perfekt spricht.
Codercrush ist offline   Mit Zitat antworten
Alt 29.08.2010, 11:12  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.201
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist ein sehr geschätzer MenschDark Guardian ist ein sehr geschätzer MenschDark Guardian ist ein sehr geschätzer MenschDark Guardian ist ein sehr geschätzer Mensch
Standard

Zitat:
Zitat von mimomamu Beitrag anzeigen
Accept-Encoding ist ein Request-Header. Er ist nur für Anfragen gedacht (also für die Nachrichten, die der Client an den Server sendet), nicht für Antworten (die der Server an den Client sendet).
Dann wäre für die Response ein

Content-Encoding: gzip

Header angebracht wnéen er es unbedingt komprimiert senden will.

Natürlich nur wnen im Request Header gzip unter Accept-Encoding geliustet ist.
__________________
Möglicherweise kommt zu "Menschen lügen" auch "Menschen bauen Mist".
Dark Guardian ist offline   Mit Zitat antworten
Alt 29.08.2010, 11:17  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.425
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Was hindert dich eigentlich daran, das einfach per .htaccess zu machen?
Code:
AddOutputFilterByType DEFLATE text/css
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems
Manko10 ist offline   Mit Zitat antworten
Alt 29.08.2010, 11:32  
Erfahrener Benutzer
 
Registriert seit: 23.08.2010
Beiträge: 492
PHP-Kenntnisse:
Fortgeschritten
mimomamu sorgt für eine eindrucksvolle Atmosphäremimomamu sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von Codercrush Beitrag anzeigen
was überschreibe ich mit file_put_contents?
Ich habe mal die unwichtigen Teile aus deinem Code gelöscht. Dann sieht dein Code ungefähr so aus:
PHP-Code:
for ($i 0$i count($aFiles); $i++)
{
  
$sFile $aFiles[$i];
  
$sCssFile $sFile .'.css'
  
$sGzFile  'gz/'$sFile .'.css.gz';

  
// ...

  
$sContent file_get_contents($sCssFile); 

  
// ...

  
$sContent gzencode($sContent6); 

  
// Folgende Anweisung überschreibt die komprimierte Variante
  // von $aFiles[$i-1] mit der komprimierten Variante von $aFiles[$i].
  
file_put_contents($sGzFile$sContent);


  
// ...

__________________
Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

Geändert von mimomamu (29.08.2010 um 11:39 Uhr).
mimomamu ist offline   Mit Zitat antworten
Alt 29.08.2010, 11:49  
Benutzer
 
Registriert seit: 18.02.2010
Beiträge: 54
PHP-Kenntnisse:
Fortgeschritten
Codercrush ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@mimomamu:

Ich versteh noch nich so richtig was zu meinst.
PHP-Code:
// Komprimierte Datei vorhanden und noch aktuell?
            
if (file_exists($sGzFile) AND
                (
filemtime($sGzFile) >= filemtime($sCssFile)))
            {
                
// Komprimierte Datei laden
                
$sContent file_get_contents($sGzFile);
            }
            else
            {
                
// weitere Code ...
                
                // In Datei schreiben
                //file_put_contents($sGzFile, $sContent);
                
                
$bNew false;
            } 
Ich prüfe doch ob die datei existiert und ob sie noch aktuelle ist. Deshalb springt er da ja nicht mehr rein, denn die komprimierten Dateien existieren ja schon und werden dann nur noch eingebunden.

Oder versteh ich dich jetzt irgendwie komplett falsch?^^
__________________
Ich würde so gern die Welt verändern doch Gott gibt mir den Quellcode nicht.
Compiler sind wie Franzosen.. schnauzen einen immer nur an, wenn man ihre Sprache nich perfekt spricht.
Codercrush ist offline   Mit Zitat antworten
Alt 29.08.2010, 12:18  
Erfahrener Benutzer
 
Registriert seit: 23.08.2010
Beiträge: 492
PHP-Kenntnisse:
Fortgeschritten
mimomamu sorgt für eine eindrucksvolle Atmosphäremimomamu sorgt für eine eindrucksvolle Atmosphäre
Standard

Hast recht, war falsch was ich erzählt habe. Ich weiß halt nicht so ganz, was ich mit dem Satz
Zitat:
Das Problem ist nun das bei dem Codec mit gzip anscheinend nur einmal eine ausgabe erzeugt werden kann.
anfangen soll. Vielleicht wäre eine chronologische Auflistung der Schritte, die notwendig sind um aus Benutzeresicht den Fehler zu reproduzieren hilfreich.
__________________
Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden
mimomamu ist offline   Mit Zitat antworten
Alt 29.08.2010, 12:40  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.425
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

@Codercrush hast du meinen Kommentar überhaupt gelesen? Warum machst du das nicht per .htaccess? Das ist unkomplizierter und performanter.
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems
Manko10 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Partial Content und content-encoding: gzip McSodbrenner PHP-Fortgeschrittene 6 18.06.2010 10:50
GZip doppelt gemoppelt oder okay so smilla PHP Tipps 2010 2 29.05.2010 15:36
[Erledigt] GZIP server response &quot;entpacken&quot; skandler PHP Tipps 2010 3 09.04.2010 17:30
Gzip CSS Browsercache marc77 PHP Tipps 2010 6 07.04.2010 16:34
Fragen zu GZIP slaughter PHP-Fortgeschrittene 4 09.02.2010 23:48
gzip und mod rewrite auf Bilder? BlackScorp Server, Hosting und Workstations 8 19.01.2010 14:39
Javascript als GZip einbinden stayInside JavaScript, Ajax und mehr 0 28.02.2009 01:18
browser compressions, nur gzip ausgabe brian johnson PHP Tipps 2008 10 26.01.2008 23:02
gzip klasse verwenden oder nicht? danysahne333 PHP Tipps 2006 3 02.04.2006 13:58
ACCEPT-ENCODING: gzip, regex ermittlung Andreas PHP-Fortgeschrittene 7 04.02.2006 16:52
Dateien entpacken (GZIP) PHP Tipps 2006 2 26.01.2006 13:46
probleme mit Gzip chiliGREEN PHP Tipps 2005-2 10 09.10.2005 16:38
was ist gzip chiliGREEN PHP Tipps 2005-2 1 09.09.2005 22:05
rar, zip, gzip etc. > Sicherheitsrisiko? PHP Tipps 2005 5 10.05.2005 13:07
gzip problem PHP-Fortgeschrittene 3 15.07.2004 17:19

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php gzip, vary accept-encoding einbinden, accept-encoding gzip entpacken, gzip funktioniert nicht, http://www.php.de/php-fortgeschrittene/71252-erledigt-gzip-problem.html, stylsheet gzip einbinden php, gzip problem charset, gz css php, gzip funktioniert nicht html, filemtime() bei gzip dateien, gzip js einbinden, mit php gz komprimierte datei entpacken, \.gz.css\ doppelt, gzip -t ausgabe in datei schreiben, php gzip ausgeben, css gz ausgeben, accept-encoding header css gzip, php request header \accept-encoding\, php gzip funktioniert nicht, php gz header

Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum