[PHP] postgresql image upload *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zit al een aantal dagen te klooien om een plaatje in de postgresql database te krijgen en vervolgens deze weer uit te lezen. In postgresql zijn er volgens de handleiding 2 methoden om er binary data in te stoppen. OID (lo_import) en bytea. Ik heb gekozen voor bytea en krijg deze dus niet voor elkaar. :'(

(ik maak gebruik van pear database access echter heb ik ook gewoon database access geprobeerd met php, echter resulaat is hetzelfde)

plaatje erin stoppen:
...
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
27
28
29
30
function escByteA($binData) {
  /**
   * \134 = 92 = backslash, \000 = 00 = NULL, \047 = 39 = Single Quote
   *
   * str_replace() replaces the searches array in order. Therefore, we must
   * process the 'backslash' character first. If we process it last, it'll
   * replace all the escaped backslashes from the other searches that came
   * before.
   */
  $search = array(chr(92), chr(0), chr(39));
  $replace = array('\\\134', '\\\000', '\\\047');
  $binData = str_replace($search, $replace, $binData);
  return $binData;
  //echo "<pre>$binData</pre>";
  //exit;
} 
...
$contents = "";
    $hFile = fopen($uploadfile, "rb");
    $fileContents = fread($hFile, $uploadsize);
    fclose ($hFile);
    $contents = escByteA($FileContents);

    // DATABASE INSERT  
    PEAR::setErrorHandling(PEAR_ERROR_DIE, "Aaaaargh! Error: %s");
    $db = DB::connect($GLOBAL_DSN);
    $sql = "insert into organisatie(naam, logo) values(".
            $db->quote($organisatie) . ",".
            $db->quote($contents) . ")";
    $db->query($sql);


plaatje eruit halen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
require_once("config.php");
require_once("PEAR.php");
require_once("DB.php");

$organisatie_id = (isset($_GET['organisatie_id'])) ? $_GET['organisatie_id'] : 0;

PEAR::setErrorHandling(PEAR_ERROR_DIE, "Aaaaargh! Error: %s");
$db = DB::connect($GLOBAL_DSN);
$sql = "select logo from organisatie where organisatie_id = $organisatie_id";
$result = $db->query($sql);
$row = $result->fetchRow();

header("Content-Type: image/jpeg");
header("Content-Disposition: inline; filename=$organisatie_id.jpg");
echo stripcslashes($row[0]);
?>

[ Voor 9% gewijzigd door gorgi_19 op 24-08-2004 09:07 ]


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-09 08:50

gorgi_19

Kruimeltjes zijn weer op :9

Zie ook: P&W FAQ - De "quickstart"
Kan je nog even aangeven wat er niet lukt, wat er fout gaat en welke foutmeldingen er komen? En op welke regel je die foutmelding krijgt?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bij het erin stoppen geeft php geen foutmelding. En wanneer je in de database kijkt met een database client zie je dat er een record is aangemaakt met blob data. Echter bij het eruithalen zie ik in internet explorer alleen een kruisje en verder geen foutmeldingen. Ik heb het vermoeden dat het iets te maken heeft met het escapen van de binary data.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Een kruisje zie je niet veel aan. Haal de content type eens weg en kijk wat voor foutmelding je krijgt.

--

Hmm, ik mis in de insert query de ' om de content en vraag me af waarom je strip c slashes over het resultaat uitvoert.

[ Voor 39% gewijzigd door Janoz op 24-08-2004 09:31 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'