Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   PHP gzcompress(); Delphi ZDecompressStr ( ) Data error (https://www.delphipraxis.net/189302-php-gzcompress-%3B-delphi-zdecompressstr-data-error.html)

luisk 27. Mai 2016 20:56


PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Hallo,
ich will über php einen String komprimieren
Delphi-Quellcode:
$compressed = gzcompress($s, 9);
echo $compressed ;
und über delphi dekomprimieren:
Delphi-Quellcode:
ls := idhttp1.Put(
       'http://127.0.0.1/.....php?bef='+  in_s_SQL
                   , nil );
          ld :=  ZDecompressStr ( @ls );
Problem: Meldung 'data error' beim Aufruf ZDecompressStr ( );
Woran kann es liegen ?

Rollo62 27. Mai 2016 21:06

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Bist du sicher das Put etwas zurückliefert ?

http://www.indyproject.org/docsite/h...ile=index.html

Rollo

luisk 27. Mai 2016 21:09

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Zitat:

Zitat von Rollo62 (Beitrag 1339066)
Bist du sicher das Put etwas zurückliefert ?

http://www.indyproject.org/docsite/h...ile=index.html

Rollo

ja , das klappt einwandfrei. Ich kann den gezipten Code auch mit dem Debugger sehen.
Ohne Komprimierung läuft auch alles optimal.
Jetzt will ich halt noch die Übertragung optimieren.
Kann es sein, dass die Algorithmen von PHP und Delphi nicht zusammen passen ?

Rollo62 27. Mai 2016 21:13

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
http://www.indyproject.org/docsite/h...TIdStream.html

Sorr^, der Link lässt sich nicht gut kopieren.
Aber muss nicht der Stream als 2. Parameter da rein ?

Rollo

luisk 27. Mai 2016 21:24

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Zitat:

Zitat von Rollo62 (Beitrag 1339068)
http://www.indyproject.org/docsite/h...TIdStream.html

Sorr^, der Link lässt sich nicht gut kopieren.
Aber muss nicht der Stream als 2. Parameter da rein ?

Rollo

den Stream brauch ich nicht daher nil. (den verwende ich, wenn ich eine Datei auf den Server lade und mit php entzippe - das funktioniert)

Ich übergebe einen SQL-Befehl als HTML-Parameter.
Die Rückgabe klappt auch super, wenn ich nicht komprimiere.

Wenn ich komprimiere kommt auch eine Antwort, mit einem String der nur ca 1/10 lang ist.
Beim Dekomprimieren kommt dann das Problem.

hstreicher 28. Mai 2016 07:22

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Nur so eine Vermutung
Transliterationsprobleme
Da wir weder die Delphi Version kennen noch den Typ derLS Variable
Vermute ich das der Rückgabewerte durch die Übergabe an die Variable in einen andere Darstellung konvertiert wird. Ansi UTF8 Widestring und. Versuche es mit ein Memorystream

Möglichkeit 2 du verwendest Pascal Strings die haben vorne 1 bis 2 Byte Längen Information und dein @ls im decompress faengt mit den falschen Bytes an

https://www.delphi-treff.de/tipps-tr...ll-downloaden/


Mfg Hannes

mjustin 28. Mai 2016 08:33

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Die Indy TIdHTTP Komponente kann auch von Haus aus GZIP dekomprimieren, dazu muss einfach eiine TIdCompressorZLib Komponente erzeugt und der TIdHTTP.Compressor Property zugewiesen werden. Fundstelle: http://stackoverflow.com/a/8597492/80901

luisk 28. Mai 2016 13:39

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Zitat:

Zitat von hstreicher (Beitrag 1339082)
Da wir weder die Delphi Version kennen noch den Typ derLS Variable

Mfg Hannes

Delphi Version : 10 Seattle
ls : string;

Danke für die Tips, es haut immer noch nicht hin.
Vielleicht hat der eine oder andere das auch mal umgesetzt.

hstreicher 28. Mai 2016 13:52

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Was wird denn gesendet?

wenn ein Ansistring geliefert wird wird er wenn er in LS abgespeichert wird
in einen WIdestring (also 16 Bit/Char) umgebaut und die Binäre Codierung ist hinüber

mfg Hannes

luisk 28. Mai 2016 14:09

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
ls=idhttp1.Put( l_url , nil );
liefert System.string


Vielleicht kann das mal noch jemand testen.

luisk 28. Mai 2016 17:52

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
weitere Versuche:

bleibt in einer Endlosschleife hängen:
Delphi-Quellcode:
idhttp1.Get( l_url , l_in_Stream );
   ZDecompressStream(l_in_Stream, l_out_Stream );
bringt Data Error
Delphi-Quellcode:
idhttp1.Get( l_url , l_in_Stream );
   GZDecompressStream(l_in_Stream, l_out_Stream );
Diese Variante bleibt auch hängen :
https://www.experts-exchange.com/que...P-content.html
Delphi-Quellcode:
 idhttp1.Intercept:= self.IdCompressionIntercept1;
           ls := idhttp1.Put( l_url , nil );
hier kommt die Meldung "Dekomprimierungsfehler":
Delphi-Quellcode:
idhttp1.Intercept:= self.IdCompressionIntercept1;
       idhttp1.Get( l_url , l_in_Stream );
Anmerkung: wenn ich nicht zippe, kann ich auch über den Stream die Daten richtig empfangen
und darstellen.

Valle 28. Mai 2016 19:49

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
mjustin hat es schon angedeutet. Eine andere Möglichkeit wäre es, die in HTTP eingebaute Übertragungskompression zu verwenden.

Dazu musst du deinen Webserver entsprechend einrichten. Oft ist er das auch schon. Falls nicht kann ich dir dabei helfen.

Außerdem musst du im Client die Kompression aktivieren.

Technisch betrachtet sendet der Client einen HTTP Header mit (Accept-Encoding: gzip, deflate). Der Server antwortet dann, wenn er gzip unterstützt, mit einem weiteren Header (Content-Encoding: gzip). Der Content-Type Header bleibt unverändert.

Luckie 28. Mai 2016 20:13

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Wie viele MB hat denn der String, den du übertragen willst, dass man ihn komprimieren muss?

luisk 28. Mai 2016 21:10

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Zitat:

Zitat von Luckie (Beitrag 1339099)
Wie viele MB hat denn der String, den du übertragen willst, dass man ihn komprimieren muss?

ich sende an PHP meine SQL-Abfragen und erhalte dann die Abfrageergebnisse zurück.
Es läuft super. Mit Komprimierung könnte ich hat das Volumen über das Netz deutlich reduzieren.
Die Tabelle mit der ich getestet habe, hatte 0,3 MB. Es kommen natürlich auch noch größere.
Allerdings kann man dann ja die Menge über Limit x,y einteilen.
Mich interessiert es mal generell, wie man diese Kopplung PHP-Delphi über die Komprimierung hinbekommt.

luisk 28. Mai 2016 21:13

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Zitat:

Zitat von Valle (Beitrag 1339098)
mjustin hat es schon angedeutet. Eine andere Möglichkeit wäre es, die in HTTP eingebaute Übertragungskompression zu verwenden.

Dazu musst du deinen Webserver entsprechend einrichten. Oft ist er das auch schon. Falls nicht kann ich dir dabei helfen.

Außerdem musst du im Client die Kompression aktivieren.

Technisch betrachtet sendet der Client einen HTTP Header mit (Accept-Encoding: gzip, deflate). Der Server antwortet dann, wenn er gzip unterstützt, mit einem weiteren Header (Content-Encoding: gzip). Der Content-Type Header bleibt unverändert.

Ich hole die SQL-Abfragedaten Daten ja über Tidhttp. Daher muss ich ja in Verbindung mit dieser Klasse dekomprimieren, oder gleich nach der Übertragung.
Über
Delphi-Quellcode:
<?php ob_start("ob_gzhandler");?>
kann ich auch alle php-Ausgaben automatisch zippen.
Das Problem ist nun die Dekompression über Indy.

Valle 28. Mai 2016 21:28

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Zitat:

Zitat von luisk (Beitrag 1339101)
Ich hole die SQL-Abfragedaten Daten ja über Tidhttp. Daher muss ich ja in Verbindung mit dieser Klasse dekomprimieren, oder gleich nach der Übertragung.
Über [...] kann ich auch alle php-Ausgaben automatisch zippen.
Das Problem ist nun die Dekompression über Indy.

Ja, das habe ich schon verstanden!

Aber wenn das nicht funktioniert, kann ich dir empfehlen den dafür vorgesehenen Weg über den Webserver und -Browser zu verwenden. Dein Webserver kann das bereits. Und das aus gutem Grund. Benutz es doch, wenn er es kann. Dafür ist es da. Und ich vermute dass es damit einfacher funktioniert.

luisk 28. Mai 2016 21:37

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Zitat:

Zitat von Valle (Beitrag 1339102)
Zitat:

Zitat von luisk (Beitrag 1339101)
Ich hole die SQL-Abfragedaten Daten ja über Tidhttp. Daher muss ich ja in Verbindung mit dieser Klasse dekomprimieren, oder gleich nach der Übertragung.
Über [...] kann ich auch alle php-Ausgaben automatisch zippen.
Das Problem ist nun die Dekompression über Indy.

Ja, das habe ich schon verstanden!

Aber wenn das nicht funktioniert, kann ich dir empfehlen den dafür vorgesehenen Weg über den Webserver und -Browser zu verwenden. Dein Webserver kann das bereits. Und das aus gutem Grund. Benutz es doch, wenn er es kann. Dafür ist es da. Und ich vermute dass es damit einfacher funktioniert.

Ich brauche die Daten ja nicht im Webbrowser, sondern in meiner Delphi-Anwendung.
Und dazu muss ich ja die Daten über diese Indy-Komponente holen, was auch funktioniert.
Nur wie kann ich sie nun entpacken ?
Hätte nicht gedacht, dass es ein Problem ist.
Umgekehrt zippe ich meine Daten auch vor dem Upload mit Delphi, und PHP kann sie problemlos auspacken.

Valle 28. Mai 2016 21:51

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Uff.

Also, nochmal. Du kannst das deinen Webserver machen lassen. Der kann bereits gzip und macht genau das was du da vorhast. Nur dass du dir den Code sparst und die Probleme die du damit (offensichtlich!) hast auch. Schau dir mjustins Beitrag an, wie man das in der TIdHTTP Komponente einstellt. Die allermeisten Webserver haben Gzip in ihrer Standardkonfiguration bereits aktiviert. Falls das bei deinem nicht der Fall ist, kann man das aber einfach aktivieren.

(Und dabei ist es egal ob Browser oder Indy HTTP Client. Der Transportweg HTTP hat Gzip Komprimierung eingebaut und das kannst du nutzen, wenn es manuell über deine Anwendungsdaten nicht so einfach funktioniert.)

luisk 28. Mai 2016 21:56

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
das mit dem Zippen funktioniert doch auf der Serverseite
Das Problem liegt doch bei IdHTTP1: TIdHTTP; in meiner Delphi-FMX-Anwendung

luisk 28. Mai 2016 21:57

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Zitat:

Zitat von mjustin (Beitrag 1339083)
Die Indy TIdHTTP Komponente kann auch von Haus aus GZIP dekomprimieren, dazu muss einfach eiine TIdCompressorZLib Komponente erzeugt und der TIdHTTP.Compressor Property zugewiesen werden. Fundstelle: http://stackoverflow.com/a/8597492/80901

Das hab ich probiert - Funktioniert aber nicht !

Diese Variante bleibt auch hängen :
Quelle:
https://www.experts-exchange.com/que...P-content.html
Delphi-Quellcode:
 idhttp1.Intercept:= self.IdCompressionIntercept1;
           ls := idhttp1.Put( l_url , nil );
hier kommt die Meldung "Dekomprimierungsfehler":
Delphi-Quellcode:
idhttp1.Intercept:= self.IdCompressionIntercept1;
       idhttp1.Get( l_url , l_in_Stream );
Vielleicht klappt es bei Dir und Du kannst mir nen Tip geben.

Valle 28. Mai 2016 22:02

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Zitat:

Zitat von luisk (Beitrag 1339106)
Das hab ich probiert - Funktioniert aber nicht !

Wenn du das machst musst du das zippen auf der Serverseite weglassen. Gzip funktioniert dann völlig transparent. Um das zu überprüfen kannst du beispielsweise Wireshark benutzen und dir den Traffic anschauen. Dieser sollte dann Gzip sein.

Zitat:

Zitat von luisk (Beitrag 1339105)
das mit dem Zippen funktioniert doch auf der Serverseite
Das Problem liegt doch bei IdHTTP1: TIdHTTP; in meiner Delphi-FMX-Anwendung

Deswegen ja mein Vorschlag. Wenn das nicht funktioniert, bau die encode-Zeile aus dem Server aus und die decode Zeile aus dem Client. Sag deinem Webserver er soll Gzip machen (wahrscheinlich tut er das schon) und gib deinem HTTP-Client wie mjustin beschrieben hat die Decompressor Property.

Anschließend ist die Kompression völlig transparent und ohne eine einzige Zeile Code. Klingt das nicht erstrebenswert?

Und um das zu überprüfen (weils ja transparent ist) kann man sich noch Wireshark oder ähnliche Tools zu Hilfe nehmen.

luisk 28. Mai 2016 22:23

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
https://varvy.com/pagespeed/enable-compression.html
The code below should be added to your .htaccess file...
<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>
Das hab ich jetzt mal ausgeführt. Mal sehen, was passiert.

luisk 29. Mai 2016 09:54

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
@Valle
Danke erstmal für die Tips.
Ich teste mit einem xampp Apache server Version 2.4.10
Ich habe jetzt mal eine .htaccess Datei mit obigem im htdocs-Verzeichnis angelegt.
Wireshark scheint Probleme mit meiner Firwall zu haben.

Daher habe ich jetzt mal folgenden Test über curl.exe gemacht:

C:\Programme\curl>curl -I -H 'Accept-Encoding: gzip,deflate' http ://localhost
curl: (6) Could not resolve host: gzip,deflate'
HTTP/1.1 302 Found
Date: Sun, 29 May 2016 08:39:20 GMT
Server: Apache/2.4.10 (Win32) OpenSSL/1.0.1i PHP/5.6.3
X-Powered-By: PHP/5.6.3
Location: http://localhost/xampp/
Content-Type: text/html; charset=UTF-8

'Could not resolve host: gzip,deflate' bedeutet ja, dass die Komprimierung nicht aktiv ist.
Was muss ich noch berücksichtigen ?

Luckie 29. Mai 2016 09:57

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Ich würde eher sagen, dass er den Host nicht gefunden hat, bzw. dessen IP Adresse nicht auflösen konnte.

luisk 29. Mai 2016 10:02

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Zitat:

Zitat von Luckie (Beitrag 1339112)
Ich würde eher sagen, dass er den Host nicht gefunden hat, bzw. dessen IP Adresse nicht auflösen konnte.

Den Webserver hat curl doch gefunden
HTTP/1.1 302 Found
Date: Sun, 29 May 2016 08:39:20 GMT
Server: Apache/2.4.10 (Win32) OpenSSL/1.0.1i PHP/5.6.3
X-Powered-By: PHP/5.6.3
Location: http://localhost/xampp/
Content-Type: text/html; charset=UTF-8

nur nicht die Dekomprimierung
Die Frage ist, ob es reicht, wenn ich diese .htaccess-Datei in /htdocs speichere.

luisk 29. Mai 2016 10:25

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
weiterer Test: auch noch kein Erfolg
https://gtmetrix.com/enable-gzip-compression.html
.htaccess:
<IfModule mod_deflate.c>
# Compress HTML, CSS, JavaScript, Text, XML and fonts
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE application/x-font
AddOutputFilterByType DEFLATE application/x-font-opentype
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-truetype
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml

# Remove browser bugs (only needed for really old browsers)
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Header append Vary User-Agent
</IfModule>

Valle 29. Mai 2016 10:34

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Ich bin mir ziemlich sicher dass Xampp bereits Gzip aktiviert hat. Wenn am Ende alles funktioniert, dann entferne deine .htaccess nochmal und schau ob es immer noch geht, damit du nicht unnötiges Zeug mit dir rumträgst.

Was deine "Could not resolve host" Fehlermeldung angeht: Hinter der Fehlermeldung steht dein Header, er hat also versucht den HTTP Header als Host aufzulösen, was natürlich nicht funktioniert. Das beudetet, dass du ein Syntax Problem in deinem Befehl hast. Ich sehe da auch ein Leerzeichen wo keins hingehört, also schau nochmal genau hin.

Wenn du CURL erfolgreich ausgeführt hast, dann muss in der Ausgabe auch der Header "Content-Encoding: gzip" aufauchen.

Wichtig ist außerdem, dass du den richtigen Pfad aufrufst. Du hast jetzt nur auf "/" zugegriffen, was unter Xampp zu einer Weiterleitung führt. Gib doch bitte die richtige URL ein, damit auch der richtige Content geladen wird. Eine Weiterleitung hat oft keinen Content und wird daher auch nicht komprimiert.

Ansonsten kann ich dir nochmals empfehlen Wireshark oder ein ähnliches Programm dafür zu verwenden. Denn hier testest du zwar deinen Webserver, was schonmal gut ist, aber du testest nicht, ob es auch mit deinem Client funktioniert. Schalte die Firewall dafür eben ab (über die Notwendigkeit einer Personal Firewall kann man sowieso streiten...).

Falls Wireshark zu kompliziert ist, habe ich glaub ich mal was von einem HTTP Analyzer in diesem Forum gehört. Lässt sich leicht über Google finden. Ich bin mir aber nicht sicher ob es wirklich der war, daher keine Garantie auf Vertrauenswürdigkeit!

Update: So funktioniert das bei mir, unter Linux:

Code:
valentin@t460s ~ $ curl -I -H "Accept-Encoding: gzip,deflate" http://www.heise.de/
HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
X-Cobbler: octo01.heise.de
X-Clacks-Overhead: GNU Terry Pratchett
Last-Modified: Sun, 29 May 2016 09:35:17 GMT
Expires: Sun, 29 May 2016 09:35:49 GMT
Cache-Control: public, max-age=32
Content-Length: 47452
Accept-Ranges: bytes
Date: Sun, 29 May 2016 09:35:37 GMT
Age: 20
Connection: keep-alive
Vary: User-Agent,Accept-Encoding,X-Forwarded-Proto,X-Export-Format,X-Export-Agent

luisk 29. Mai 2016 10:42

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Hi,
hab jetzt das Leerzeichen nach dem : entfernt. Jetzt sieht es so aus: Die Meldung 'could not resolve Host' weg

C:\Programme\curl>curl -I -H 'Accept-Encoding:gzip,deflate' http://localhost
HTTP/1.1 302 Found
Date: Sun, 29 May 2016 09:40:54 GMT
Server: Apache/2.4.10 (Win32) OpenSSL/1.0.1i PHP/5.6.3
X-Powered-By: PHP/5.6.3
Location: http://localhost/xampp/
Content-Type: text/html; charset=UTF-8

Valle 29. Mai 2016 10:46

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Genau. Und jetzt lies noch den Rest meines Posts.

Du musst den richtigen Pfad aufrufen. Dort wo du Curl jetzt hinschickst, ist nix, was komprimiert werden könnte.

Update:
Code:
curl -X PUT -I -H "Accept-Encoding: gzip,deflate" "http://127.0.0.1/.....php?bef=SELECT..."

luisk 29. Mai 2016 10:57

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
wo sollte Deiner Meinung nach ein Blank zu viel sein ?
hier ist ein ähnliches Bsp:
http://www.cyberciti.biz/faq/linux-u...pression-test/

luisk 29. Mai 2016 11:02

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
ich hab das jetzt mal mit einer Standarddatei applications.html gemacht:
sie ist 1,40 KB (1.441 Bytes) lang. Es sieht demnach nicht nach Komprimierung aus:
Weder mit noch ohne der .htaccess-Datei

C:\Programme\curl>curl -I -H 'Accept-Encoding:gzip,deflate' http://localhost/applications.html
HTTP/1.1 200 OK
Date: Sun, 29 May 2016 09:59:03 GMT
Server: Apache/2.4.10 (Win32) OpenSSL/1.0.1i PHP/5.6.3
Last-Modified: Wed, 12 Nov 2014 15:49:59 GMT
ETag: "5a1-507ab591677c0"
Accept-Ranges: bytes
Content-Length: 1441
Content-Type: text/html

luisk 29. Mai 2016 11:13

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
ich hab jetzt mal Deine Seite bei heise.de getestet:
Man sieht: es wird gezippt und das Blank hinter Encodeing: stört auch nicht:

C:\Programme\curl> curl -I -H "Accept-Encoding: gzip,deflate" http://www.heise.de/
HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
X-Cobbler: octo02.heise.de
X-Clacks-Overhead: GNU Terry Pratchett
Last-Modified: Sun, 29 May 2016 10:09:20 GMT
Expires: Sun, 29 May 2016 10:09:52 GMT
Cache-Control: public, max-age=32
Content-Length: 47236
Accept-Ranges: bytes
Date: Sun, 29 May 2016 10:09:27 GMT
Age: 7
Connection: keep-alive
Vary: User-Agent,Accept-Encoding,X-Forwarded-Proto,X-Export-Format,X-Export-Agent

Bei meinem Xampp-Apache ist also kein Gzip aktiv - und warum die host-Fehlermeldung ?

Valle 29. Mai 2016 11:26

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Dann ist das Gzip-Modul wohl doch nicht geladen.

Schau mal hier: https://stackoverflow.com/questions/...n-xampp-server

Wenn du Änderung an der Apache Config machst, musst du den Apache hinterher neustarten.

Noch ein Tipp: Entferne das <IfModule> aus der .htaccess. Dann kriegst du einen 500 Internal Server Error, wenn das Modul nicht geladen ist. Ist vielleicht besser.

luisk 29. Mai 2016 12:08

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
so, hab jetzt die httpd.conf entsprechend angepasst
und nachdem ich noch die .htaccess wieder komplett entfernt habe, läuft es:

C:\Programme\curl> curl -I -H "Accept-Encoding: gzip,deflate" http://localhost/applications.html
HTTP/1.1 200 OK
Date: Sun, 29 May 2016 11:04:47 GMT
Server: Apache/2.4.10 (Win32) OpenSSL/1.0.1i PHP/5.6.3
Last-Modified: Wed, 12 Nov 2014 15:49:59 GMT
ETag: "5a1-507ab591677c0-gzip"
Accept-Ranges: bytes
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 770
Content-Type: text/html

Vielen Dank für die Hilfe, Valle.

luisk 29. Mai 2016 12:40

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Klappt doch noch nicht ganz.
Bei php wird wohl noch nicht gezippt

C:\Programme\curl> curl -I -H "Accept-Encoding: gzip,deflate" http://127.0.0.1/SQL_Gateway/SQL_Abf...php?bef=Select...
HTTP/1.1 200 OK
Date: Sun, 29 May 2016 11:33:45 GMT
Server: Apache/2.4.10 (Win32) OpenSSL/1.0.1i PHP/5.6.3
X-Powered-By: PHP/5.6.3
Content-Type: text/html; charset=UTF-8

obwohl ich mal versucht habe hier php zu ergänzen:
Delphi-Quellcode:
<Directory "C:/your-server-root/manual"> #any path to which you wish to apply gzip compression to!
    <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/html # or any file type you wish
      AddOutputFilterByType DEFLATE text/php
    </IfModule>
</Directory>

Delphi-Quellcode:
<Directory "C:/your-server-root/manual"> #any path to which you wish to apply gzip compression to!
    <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/html text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript
    </IfModule>
</Directory>

luisk 29. Mai 2016 13:17

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
weitere Erkenntnis:
wenn ich nun in mein php-Script folgende Zeile einfüge:
ob_start('ob_gzhandler');
und TIdHTTP.Compressor:=TIdCompressorZLib; zuweise
dann klappt es :thumb:
Wenn ich TIdHTTP.Compressor:=nil; setze dann sehe ich, dass ein gezippter String kommt :idea:
So, später schaue ich mir dann mal WireShark ohne Firewall an.

Danke für die Hilfen.:thumb:

luisk 29. Mai 2016 13:29

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Mich würde dennoch interessieren,
ob man das nicht auch mit einer Delphi-Funktion wie gZDecompressStr() hinbekommt.

Valle 29. Mai 2016 13:37

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Zitat:

Zitat von luisk (Beitrag 1339129)
Mich würde dennoch interessieren,
ob man das nicht auch mit einer Delphi-Funktion wie gZDecompressStr() hinbekommt.

Natürlich kriegt man das hin. Höchstwahrscheinlich ist es ein Encoding Problem. Du könntest man versuchen ein base64 Encode / Decode darüber laufen zu lassen. Damit hast du zwar wieder mehr Traffic (also das ist nicht sinnvoll für die Produktion), aber du kannst testen ob es ein Problem auf dem Übertragungsweg ist. Da kann ich dir aber nicht helfen; da kein Delphi.

Zitat:

Zitat von luisk (Beitrag 1339127)
obwohl ich mal versucht habe hier php zu ergänzen:

Du hast die Zeilen aber schon angepasst, oder? Der Pfad ist ja nur ein Beispielpfad. Außerdem würde ich das IfModule weglassen.

Zitat:

Zitat von luisk (Beitrag 1339128)
weitere Erkenntnis:
wenn ich nun in mein php-Script folgende Zeile einfüge:
ob_start('ob_gzhandler');
und TIdHTTP.Compressor:=TIdCompressorZLib;
dann klappt es :thumb:
Wenn ich TIdHTTP.Compressor:=TIdCompressorZLib; weglasse, dann sehe ich, dass ein gezippter String kommt :idea:
So, später schaue ich mir dann mal WireShark ohne Firewall an.

Das kannste auch so machen, natürlich. Du könntest den Content-Encoding Header mit PHP dann auch selbst setzen um standardkonform zu bleiben.

luisk 29. Mai 2016 13:41

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
Zitat:

Zitat von Valle (Beitrag 1339130)
Du könntest den Content-Encoding Header mit PHP dann auch selbst setzen um standardkonform zu bleiben.

Mich würde interessieren wie das geht. Das wäre mir lieber, wenn das klappt.

wenn ich
Delphi-Quellcode:
ob_start('ob_gzhandler');
in php weglasse, wird nicht gezippt.

Delphi-Quellcode:
 AddOutputFilterByType DEFLATE text/php text/plain
bringt nichts

luisk 29. Mai 2016 14:34

AW: PHP gzcompress(); Delphi ZDecompressStr ( ) Data error
 
bei das Entzippen über die Indy-Komponente funktioniert anscheinend nur,
wenn der Webserver das Zippen unterstützt:
daher:
Delphi-Quellcode:
if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip'))
   ob_start('ob_gzhandler');
else
   ob_start();


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz