webForumDet fria alternativet

Problem att packa upp gz-komprimerad sträng

PHPur PHP

11 svar · 1 258 visningar · startad av erciz

ercizMedlem sedan maj 20011 826 inlägg
#1

Jag får in en gz-komprimerad och base64-encodad sträng som jag vill packa upp, men jag får inte till det.

Första gör jag

$gz = base64_decode($str);

vilket går bra, sen har jag försökt använda

$s = gzuncompress($gz);

men jag får Data error då. Något förslag? efter base64_decode() så är det en binärsträng, har försökt spara ner det till en fil, utan att lyckats så bra. Vad gör jag för fel?

nitro2k01Medlem sedan aug. 20039 342 inlägg
#2

Posta base64-strängen här eller skicka den i ett PM till mig.

ercizMedlem sedan maj 20011 826 inlägg
#3

nitro2k01 skrev:

Posta base64-strängen här eller skicka den i ett PM till mig.

visst!

begin-base64 644 data.xml.gz
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
====
colioneMedlem sedan juni 20014 421 inlägg
#4

här kommer den.

Såhär gjorde jag:

<?php

$bs64=<<<EOB
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==
EOB;

$fh = fopen("data.xml.gz", 'w');
fwrite($fh, base64_decode($bs64));
fclose($fh);

sen unzippade jag den.

ercizMedlem sedan maj 20011 826 inlägg
#5

colione skrev:

här kommer den.

Såhär gjorde jag:

<?php

$bs64=<<<EOB
H4sIAAAAAAAAC92b3W/bNhDA3/NXGH5eqOPx23BUZMk6BGiKoEmHYS+DaguONlvyJDkf//2OsuuPxMUqlVuF+ckkjxR1P/J4R1LjN0+L+eAhLausyM+GnMFwkOaTYprls7Phx7u3p3Y4qOoknybzIk/PhnkxHLyJT8Z3ZZLlJHSR5nVaXiZ18imp0gG1lldnw/u6Xo6i6PHxkc2ScpHlbFIsIiqsJvfpIqmi49WjBxyumxg9VdlBM4+CFeUsQgAe/Xr97rZp5zTLfd8mKdWqstG68XfFJKmbt+nei0HHqg/InqrpMD45GQzG55M6e8jqLK1iSu4ynge3y6Ksz4YfVrlvYrguJoGraUwvaE/BnCLcIYyAj6T9bRxRwWeZd8lycFsnZX2XLYjHMfltgyR+V9TJ3IveppMin1Yxt45ZC/43jl6V7ipeZmvVXqf0flUsOTCUTnFuxtGLsl2l6+QpW6wWt8s0ncaKaQNOoh1HB/k78QsaVKXXj290m9iVX5Fu84o0FjeqS0kR25y9Vyyz2SwtqTP3xTS+TvJVMqdXO8jdl04mf+7Sn3OWRZbX+9m+gBTzGoiSBKQpOpS+KahfNO4OsxtidVavpullOitTej/NGVfWSe7G0cuyV3WLfHYgwAXjzkppSWOvCg87FB3v0fh8vn7mhp4ShjknHbEdRy/KDiu+wA5MS8E5qi8PiKbaLRErShqzdRqff6powoyj/bx9FtFxGK0Z2SCMrNOiMyNrtA3GSEpmUKIU2I6RYA44CA59Y4Qj5CEYOVRKdWbkLMdw80gzMCisMe0YEVuBVjrflb5BEmEgacTuxg65/v7GzllGhLTxBqFvkBQGgKQBAbErJGO4Ed8dEtdECawRpodTSelAfoO1XSk5EDagvUOGaECBbbkmITJjhROqd56DIFBhKCkD3T0HaFzDMJSUYuisshJaUuKG0foote2d70CUTCBK+A2+A8dwFk8apsFyJUXbuQRkupUE1bt1iSi5MJS06mzxrBN+4IeipCnk0VaBbkuJMwrZFPcRQd8ocThC6Xjjm9xw0TQ9/Zi9DfZqIswANNJ0H4DKqXAD0DKlnRDK/Z8GYJANFQfAO7uvRAnCGXOFTHKpOjhGkklyfrXH2ztKQZZcR1FG9y0V8mNkMEoamLLKCaPaUtK05FJ4InX/KGGYzUlrZOd43aGVPCQlDgpRtl1yyVQ6LsD2cS6F2VUhSD5A7khJGhfOMTKCgRWosG2QoTUzkvw77GGQIcKEggZ151DQKW4CUpKMAh5O+m5LyTGNVA/6SEmFocSF7kxJSwxIqdmMkwCyJSWjGRoNgvdwW0WECdiNUJ29B6eF6AMlywyCM6aHnrgMsy5ZDZ3jJSeaXd9QlKBxG01r78EZRiGBFbp3G8lEKZAnzlV3i0cDWIfz8RxDYYwTLb0H6aNa0Ny6Hq5L6ti2SgdK8hvWJZAm3N4DzSVtnLZt4yWJipH/bpXo3bokRxDEe3Dcdb/M4RBVuPNNiwy5Uka3vCjgKWnqi3S920iWx7co21NCsJ13iBwaHo6Sk8xw1K09cYnehaclsn/H0DLYhQ4pu0e1IFWwozNypZmVigKflvt4kvoC3BCm3q1LciSCHEM7f6bYfR+PxnE4SsAANvcZW1ECy4S15D/0cF0K5D2g5d2PoZ3FYBfYPCWnObe8pSf+VfdOvxulYxbvPzo60//m0ZkOdHTmuMTO7qulVS5cwG4F08pIA21v5/V3ABKlICfs/lpQ9+t5RCncPVdjmVUcjGx7z9U5psjACL8f0zdKGGQjmXwbLrtTIv813FwCZozQrY25pwTGKHKqekjpmMX7KmPuoSy3iYsyTeqibL5IqZ+X6dnwMn3IJunv9f53Ge8TetDbokzLVZ6npQByQpq8ncjHPKuvprEQaIzjytvCTdZO5qYspqtJfXUZS0uDY5fcifyy/rjn4K02edfJH0UZE4uD9DHBLKcCf45xkLEv+eMqm0/XDZDYXuq1UFN3K3TY0vYJO+VuFLrOoAG3+YrGp7ep5rsRn3G+qu8PlH++XM6z9RdBWwJr7f/cfNgzuCgWi1XuRajezXw1O73K91msO73tzit1fqUyD1WpvqTJfT3icT3+oxZf6/COVBF/SOdpUqU0eH1qW+RH/HXyPOA48HPiB/ozQjfylzP3Z8P6qWkZV38lm4emWyZ7KiLjlc9oAP703k+L5u86/yYp6/erxSeqBaBPz4FrOPVO+17BGmmDkHCOv/CVVXzyN1g0ljm3NgAA====
EOB;


$fh = fopen("data.xml.gz", 'w');
fwrite($fh, base64_decode($bs64));
fclose($fh);

sen unzippade jag den.

Du verkar ha lyckats unzippa den iaf. Så långt du har gjort i din kod har jag också kommit, det är själva unzippningen som är problemet. Jag vill göra det med PHP men får som sagt data error. Jag kan tillägga att jag inte lyckas att zippa upp data.xml.gz med 7-zip i Windows heller, men du verkar ju ha lyckats med det. Använde du gunzip i Linux eller?

colioneMedlem sedan juni 20014 421 inlägg
#6

jag använde gzip ja, men det bör inte vara några problem i typ winrar heller.

hur kompirmeras filen? (av en människa, ett script?)

colioneMedlem sedan juni 20014 421 inlägg
#7

Fullösning:

$fh = fopen("data.xml.gz", 'w');
fwrite($fh, base64_decode($bs64));
fclose($fh);
$ugz = readgzfile("data.xml.gz");

Filen verkar vara gzip-encodad. därför får du felet. kolla här:
http://se2.php.net/manual/en/function.gzdecode.php

ercizMedlem sedan maj 20011 826 inlägg
#8

colione skrev:

jag använde gzip ja, men det bör inte vara några problem i typ winrar heller.

hur kompirmeras filen? (av en människa, ett script?)

Jag har testat att öppna den med 7-Zip för windows ( http://www.7-zip.org/ ), men jag får då felet Kan inte öppna filen data.xml.gz som ett arkiv.

Filen komprimeras av ett Active-X-plugin i klientens webbläsare.

ercizMedlem sedan maj 20011 826 inlägg
#9

colione skrev:

Fullösning:

$fh = fopen("data.xml.gz", 'w');
fwrite($fh, base64_decode($bs64));
fclose($fh);
$ugz = readgzfile("data.xml.gz");

Filen verkar vara gzip-encodad. därför får du felet. kolla här:
http://se2.php.net/manual/en/function.gzdecode.php

Den där koden funkar inte alls för mig, den skriver bara ut den gz-kodade strängen.

När jag försöker med gzdecode() som du länkar till så får jag Call to undefined function gzdecode(). Det verkar inte som den funktionen finns riktigt i php ännu, det står på maualsidan: (No version information available, might be only in CVS).

Jag har testat med alla gz-funktioner jag kan hitta på http://se.php.net/manual/en/ref.zlib.php
Både gzinflate() och gzuncompress() ger data error.

Antingen är det jag som gör något fel med funktionerna eller så är det någon bugg i PHPs gz-funktioner. :(

colioneMedlem sedan juni 20014 421 inlägg
#10

Det finns en gzdecode-funktion i kommentarerna på den sidan.

ercizMedlem sedan maj 20011 826 inlägg
#11

colione skrev:

Det finns en gzdecode-funktion i kommentarerna på den sidan.

Ja, det fanns ganska många varianter på den i kommentarerna. Jag började med att testa den första som fanns på en extern sida och den genererade strpos(): Offset not contained in string och gzinflate(): data error. Sen de efterföljande två som är ganska långa returnerade båda NULL. Och den sista som är ganska kort skrev bara ut den gzippade strängen.

Så ingen lycka än så länge :(

Har du provat med någon av de här funktionera på den sträng jag klistrade in (efter att base64_decodat dem)?

ercizMedlem sedan maj 20011 826 inlägg
#12

colione skrev:

Fullösning:

$fh = fopen("data.xml.gz", 'w');
fwrite($fh, base64_decode($bs64));
fclose($fh);
$ugz = readgzfile("data.xml.gz");

Filen verkar vara gzip-encodad. därför får du felet. kolla här:
http://se2.php.net/manual/en/function.gzdecode.php

Eftersom det blir en binärsträng så tror jag att det måste vara 'wb' för att det ska funka under windows, men jag får den inte att funka iallafall, det blir en fil 0 byte stor :(

140 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)