[PHP] Ongeldige afbeeldingen

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • xilent_xage
  • Registratie: Februari 2005
  • Laatst online: 15-09 11:35
Mijn vraag
Hoi, ik werk aan een applicatie waarbij er een groot aantal foto's direct in de database zijn opgeslagen. Niet mijn keuze, maar opzich prima te doen zou je zeggen. Ik heb dus een tabel met id, fotonaam, datum en een string, de foto zelf dus.

Als ik deze string op het scherm tover en de juiste headers meestuur, dan krijg ik inderdaad netjes de betreffende foto te zien. De data zit dus goed opgeslagen in de db.

Mijn probleem is dat ik nu een exportfunctie probeer te maken om alle foto's van een project in 1 zipbestand te kunnen exporteren. Hieronder de code, denk dat die redelijk straightforward is zo:

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
            if ( $_POST['data'] == "fotos"){
                $zipname = "fotos.zip";
                $content = $prj->get_fotos($_GET['id']);
                if ( count($content) > 0 ){
                    $zip = new ZipArchive;
                    $res = $zip->open($zipname, ZipArchive::CREATE);
                    if ($res === TRUE) {
                        foreach ( $content as $kcontent=>$vcontent){ $zip->addFromString($return['prj']['nummer'] . "_" . $vcontent['traject'] . "_" . $vcontent['datum'] . "_foto.jpg", $vcontent['data']); }
                        $zip->setArchiveComment('Export gemaakt op ' . date("d-m-Y H:i") . " door " . $_SESSION['user_info']['name']);
                        $zip->close();
                        header('Content-Type: application/zip');
                        header('Content-disposition: attachment; filename='.$zipname);
                        header('Content-Length: ' . filesize($zipname));
                        readfile($zipname);
                        unlink($zipname);
                    }
                    else {
                        $return['feedback'] = array("type"=>"error", "text"=>"Kon zipbestand niet aanmaken. Disk vol?");
                    }
                }
                else {
                    $return['feedback'] = array("type"=>"error", "text"=>"Geen fotos gevonden");
                }

            }


Hiermee krijg ik inderdaad een download aangeboden, een zipfile met daarin alle foto's. De foto's bevatten allemaal de juiste data (niet 0 bytes ofzo). Als ik echter een dergelijke foto unzip en open, dan kan die niet worden weergegeven. Niet in paint, zelfs niet in chrome (die de versie direct op het scherm wel goed toont). Grrr dus.

Iemand enig idee? Moet er nog een soort header boven de data oid?

Alle reacties


Acties:
  • 0 Henk 'm!

  • Groentjuh
  • Registratie: September 2011
  • Laatst online: 04-10 19:39
Heb je wel eens beiden bestanden vergeleken? Een uit de zip en een die je in de webbrowser laad via PHP? Mogelijk kom je op die manier verder met wat er gebeurd. Zijn ze even groot? Als je ze in hex vergelijkt, krijg je ineens extra tekens?

Binaire data in PHP strings kan soms de meest verrassende dingen doen!

[ Voor 14% gewijzigd door Groentjuh op 20-11-2019 13:50 ]


Acties:
  • +6 Henk 'm!

  • xilent_xage
  • Registratie: Februari 2005
  • Laatst online: 15-09 11:35
1. Bedankt,
2. Ik ben een sukkel.

De data zat uiteraard met een base64_encode in de db... en ik zit al een uur apatisch naar mijn code te staren..

Acties:
  • +1 Henk 'm!

  • PageFault
  • Registratie: April 2002
  • Laatst online: 03-10 13:28
+1 dat je het gevonden hebt, niet dat ik je mening deel dat je een sukkel zou zijn ;)