hbrendel Geplaatst: 24 september 2007 Delen Geplaatst: 24 september 2007 Is er iemand die dit al voor elkaar heeft gekregen in PHP? TIA Henk Quote Link naar reactie
0 Pieter Claerhout Geplaatst: 26 september 2007 Delen Geplaatst: 26 september 2007 Je kan dit als volgt doen: <?php // Include de filemaker api require_once 'FileMaker.php'; // Maak een connectie met FileMaker $fm = & new FileMaker(); $fm->setProperty('database', 'ContainerTest'); $fm->setProperty('username', 'Admin'); $fm->setProperty('password', 'Admin'); // Zoek het record $command = $fm->newFindCommand('ContainerTest'); $command->addFindCriterion('title', 'foto 2'); $result = $command->execute(); $record = $result->getFirstRecord(); // Vraag FileMaker naar de url van het container veld $containerUrl = $record->getField('picture'); // Stuur de juiste content-type header header('Content-type: image/jpeg'); // Toon de container data echo $fm->getContainerData($containerUrl); ?> De truuk is dat de getField functie van een containerveld een url teruggeeft in de vorm van: /fmi/xml/cnt/data.cnt?-db=ContainerTest&-lay=ContainerTest&-recid=2&-field=picture(1) De extensie van "/fmi/xml/cnt/data.cnt" wordt aangepast aan de inhoud van het container veld. De volgende combinaties zijn mogelijk: JPEG beeld: /fmi/xml/cnt/data.jpg?-db=ContainerTest&-lay=ContainerTest&-recid=2&-field=picture(1) GIF beeld: /fmi/xml/cnt/data.gif?-db=ContainerTest&-lay=ContainerTest&-recid=2&-field=picture(1) Al de rest: /fmi/xml/cnt/data.cnt?-db=ContainerTest&-lay=ContainerTest&-recid=2&-field=picture(1) De functie getContainerData kan aan de hand van deze url dan de container data halen uit FileMaker. Let wel op als je de url wil doorgeven via de querystring, want dan mag je niet vergeten ze te urlencoden: Het img.php script kan er dan als volgt uitzien: <?php // Include de filemaker api require_once 'FileMaker.php'; // Maak een connectie met FileMaker $fm = & new FileMaker(); $fm->setProperty('database', 'ContainerTest'); $fm->setProperty('username', 'Admin'); $fm->setProperty('password', 'Admin'); // Controleer dat een url is meegegeven via de query string if (isset($_GET['-url'])){ // Stop the url in een variable $url = $_GET['-url']; // Zoek de extensie van het bestand $url = substr($url, 0, strpos($url, "?")); $url = substr($url, strrpos($url, ".") + 1); // Stuur de juiste header if($url == "jpg"){ header('Content-type: image/jpeg'); } else if($url == "gif"){ header('Content-type: image/gif'); } else{ header('Content-type: application/octet-stream'); } // Toon de inhoude van het containerveld echo $fm->getContainerData($_GET['-url']); } ?> Groeten, pieter Quote Link naar reactie
0 hbrendel Geplaatst: 26 september 2007 Auteur Delen Geplaatst: 26 september 2007 Pieter, heel erg bedankt voor de uitgebreide beschrijving, ik ga er even naar kijken. Henk Quote Link naar reactie
0 hbrendel Geplaatst: 26 september 2007 Auteur Delen Geplaatst: 26 september 2007 Wat ik tot nu toe niet deed was het verzenden van een header. Dit heb ik ingevoegd, maar nu krijg ik: Warning: Cannot modify header information - headers already sent by (output started at /Library/WebServer/Documents/database/file.php:101) in /Library/WebServer/Documents/database/file.php on line 118 In het bestand file.php komt echter geen andere aanroep van de functie 'header' voor. Ik ga eens proberen de download vanuit een nieuwe php-file te laten gebeuren. Let wel: het gaat mij specifiek om het plaatsen van een link naar een bestand ter downloading. Henk Quote Link naar reactie
0 Pieter Claerhout Geplaatst: 26 september 2007 Delen Geplaatst: 26 september 2007 Henk, wat staat er op lijn 110 van file.php? Staat daar toevallig een lege lijn of een echo statement? pieter Quote Link naar reactie
0 hbrendel Geplaatst: 26 september 2007 Auteur Delen Geplaatst: 26 september 2007 Het is (na een aantal http-errors 200) toch gelukt. Ik roep nu een nieuw bestand aan: download.php. Daarin wordt de url gemaakt en een getContainerData () aangeroepen. Het werkt! Nu heeft de gedownloade pdf altijd de naam 'download.php.pdf', en de volgende 'download-1.php.pdf', enz. Hoe kan ik er nu voor zorgen dat deze pdf's de naam hebben van het oorspronkelijke bestand, desnoods een on-the-fly te genereren naam? TIA Henk Quote Link naar reactie
0 hbrendel Geplaatst: 26 september 2007 Auteur Delen Geplaatst: 26 september 2007 wat staat er op lijn 110 van file.php? Staat daar toevallig een lege lijn of een echo statement? Nee, maar er is al sprake van output, voordat de link wordt gegenereerd. Deze link(s) komen uit / staan in portaaldata. Vandaar een nieuwe file, en dat werkt dus wel. Bedankt, Henk Quote Link naar reactie
0 Pieter Claerhout Geplaatst: 26 september 2007 Delen Geplaatst: 26 september 2007 De naam van het bestand in het container veld kan je helaas niet achterhalen met de FileMaker PHP API. Wat je wel kan doen is de naam genereren op basis van de waarde van een veld en dan de volgende code gebruiken: header( 'Content-Type: application/force-download; name="' . $name . '"'); header( 'Content-Disposition: attachment; filename="' . $name . '"'); header( 'Cache-Control: public' ); header( 'Content-Transfer-Encoding: binary' ); header( 'Content-length: ' . strlen($data) ); echo($data); Dit forceert de browser om de file te downloaden met de naam die je aangeeft in de headers. Groeten, pieter Quote Link naar reactie
0 hbrendel Geplaatst: 27 september 2007 Auteur Delen Geplaatst: 27 september 2007 Ik heb dit geprobeerd, maar na al deze headers doet geen enkele link het meer op mijn site. Moeten die headers niet 'gereset' worden, o.i.d.? Weet je zeker dat dit zo klopt? Ik moet nog een paar tests doen, maar ik heb pas zaterdag weer tijd. Dan kom ik erop terug. In ieder geval erg bedankt, Pieter. Henk Quote Link naar reactie
0 hbrendel Geplaatst: 27 september 2007 Auteur Delen Geplaatst: 27 september 2007 Dat de links het niet meer deden kwam door een domme typfout. Alles is nu in orde en het werkt precies zoals ik het wil. Pieter, waar heb je die PHP-kennis opgedaan? Henk Quote Link naar reactie
0 Pieter Claerhout Geplaatst: 28 september 2007 Delen Geplaatst: 28 september 2007 Voornamelijk zelfstudie en heel veel lezen op internet... pieter Quote Link naar reactie
Vraag
hbrendel
Is er iemand die dit al voor elkaar heeft gekregen in PHP?
TIA
Henk
Link naar reactie
10 antwoorden op deze vraag
Aanbevolen berichten
Doe mee aan dit gesprek
Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.