Wij zijn bezig met het koppelen van onze CRM database aan onze internet site, hierbij willen we derde de mogelijkheid bieden om documenten (pdf) te downloaden.
Nu worden de documenten gecomprimeerd opgeslagen in de database, hoe ze het comprimeren weet ik niet. Aangezien ik ook niet het datamodel ken van de database hebben we de software leverancier de opdracht gegeven om ons een stuk code te geven waarmee we de documenten eruit kunnen halen. Zij hebben mij dus een stuk php code gegeven waarin de nodige query's zitten en ook een stukje code om de documenten te openen.
Het openen werkt echter niet, het gaat mis op de decompressie van de data. Nu ligt het natuurlijk voor de hand om met het probleem terug te gaan naar de leverancier, iets wat ik ook al gedaan heb. Echter merk ik uit de reactie die ik krijg dat zij geen expert zijn op php gebied en de code ook maar simpel weg van php.net halen.
Aangezien ik niet ga zitten wachten tot hun met een oplossing komen ben ik zelf ook aan het uitzoeken waar het probleem nu zit, echter kom ik er ook niet uit...
De volgende code werd door hun aangeleverd om documenten te openen (relevant deel ervan uiteraard)
op deze code krijg ik de volgende foutmelding wanneer adobe reader opent: bestand begint niet met %PDF-.
Als ik de gedecomprimeerde data gewoon naar de browser output krijg ik de volgende foutmelding te zien:
Warning: gzuncompress() [function.gzuncompress <http://domain/folder/function.gzuncompress> ]:
data error in .... line
Een melding waar helaas niet veel informatie over te vinden is. Enkel in de php manual staat in de comments een mogelijke oplossing, welke ook door de leverancier is aangedragen. Namelijk de volgende functie gebruiken om hem de decomprimeren:
Ook dit heeft geen succes, krijg niet eens een foutmelding te zien.
Zlib staat wel aan bij onze webhost, versie 1.2.3 op php versie 5.2.13
Maarja hoe nu verder, op de foutmelding is niet veel informatie te vinden, de gecomprimeerde code krijg ik keurig in me browser, maarja daar wordt je ook niet echt wijzer van.
Nu worden de documenten gecomprimeerd opgeslagen in de database, hoe ze het comprimeren weet ik niet. Aangezien ik ook niet het datamodel ken van de database hebben we de software leverancier de opdracht gegeven om ons een stuk code te geven waarmee we de documenten eruit kunnen halen. Zij hebben mij dus een stuk php code gegeven waarin de nodige query's zitten en ook een stukje code om de documenten te openen.
Het openen werkt echter niet, het gaat mis op de decompressie van de data. Nu ligt het natuurlijk voor de hand om met het probleem terug te gaan naar de leverancier, iets wat ik ook al gedaan heb. Echter merk ik uit de reactie die ik krijg dat zij geen expert zijn op php gebied en de code ook maar simpel weg van php.net halen.
Aangezien ik niet ga zitten wachten tot hun met een oplossing komen ben ik zelf ook aan het uitzoeken waar het probleem nu zit, echter kom ik er ook niet uit...
De volgende code werd door hun aangeleverd om documenten te openen (relevant deel ervan uiteraard)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| header('Pragma: private'); header('Cache-control: private, must-revalidate'); header("Content-Transfer-Encoding: binary"); header('Content-type: application/pdf;'); echo $data; exit; function uncompressdata($data) { $sZMno0 = '49'; $sZMno1 = '5a'; $sZMno2 = '4d'; $sZMno3 = '53'; If ((bin2hex($data[0]) == $sZMno0) && (bin2hex($data[1]) == $sZMno1) && (bin2hex($data[2]) == $sZMno2) && (bin2hex($data[3]) == $sZMno3)) { $result = substr($data, 8); $uncompressed = gzuncompress($result); return $uncompressed; } else { return $data; } } |
op deze code krijg ik de volgende foutmelding wanneer adobe reader opent: bestand begint niet met %PDF-.
Als ik de gedecomprimeerde data gewoon naar de browser output krijg ik de volgende foutmelding te zien:
Warning: gzuncompress() [function.gzuncompress <http://domain/folder/function.gzuncompress> ]:
data error in .... line
Een melding waar helaas niet veel informatie over te vinden is. Enkel in de php manual staat in de comments een mogelijke oplossing, welke ook door de leverancier is aangedragen. Namelijk de volgende functie gebruiken om hem de decomprimeren:
PHP:
1
2
3
4
5
| function gzuncompress_crc32($data) { $f = tempnam('/tmp', 'gz_fix'); file_put_contents($f, "\x1f\x8b\x08\x00\x00\x00\x00\x00" . $data); return file_get_contents('compress.zlib://' . $f); } |
Ook dit heeft geen succes, krijg niet eens een foutmelding te zien.
Zlib staat wel aan bij onze webhost, versie 1.2.3 op php versie 5.2.13
Maarja hoe nu verder, op de foutmelding is niet veel informatie te vinden, de gecomprimeerde code krijg ik keurig in me browser, maarja daar wordt je ook niet echt wijzer van.