[php/mssql/linux] Te grote blobs/images

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hai mensen. Hier weer een breinkraker.
Ik ben onlangs overgestapt van een windows naar linux webserver. Hierbij bleek dat ik toch enkele aanpassingen moest doen aan mijn .php code.

Ik heb image velden in mijn MSSQL2000 database. Onder windows kan ik deze gemakkelijk opvragen en via echo wegzetten. Dit met content type image/jpg levert een mooie afbeelding uit de database op.

Onder linux werkte dit echter niet, bleek dat de 'raw data' niet binair was.. maar in hexadecimaal! Na deze via Pack() weer omgezet te hebben werkten de afbeeldingen weer.

Probleem is nu: Bij grote afbeeldingen wordt de hele php pagina afgekapt op het moment van uitvoeren van de query die de image data ophaalt. Volgens mij ligt de grens van wel/niet ergens bij 32kb.

Ik gebruik linux Debian 3.1 met ADODB(mssql). Ook is in mijn php.ini het volgende ingesteld:
code:
1
2
3
4
5
; Valid range 0 - 2147483647.  Default = 4096.
mssql.textlimit = 2147483647

; Valid range 0 - 2147483647.  Default = 4096.
mssql.textsize = 2147483647


Waar volgens mij werkt dit alleen voor de windows driver.. Help!! ;(

Ligt dit aan een gebruikte mssql driver voor linux?
Hoe kan ik dit zien? (linux is voor mij geinstalleerd incl. packages. Ben zelf NIET handig met linux)
Zegt Sybase jullie wat? (Dit is wel bekend op de web server)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voor het gemak van anderen zal ik ook maar even de oplossing posten. >:)

Het probleem lag bij Sybase/Mssql/Adodb. Deze wilde maximaal blob velden van 32k ontvangen. Dit is overigens de standaard waarde voor Sybase. Dit kan je verhogen via een query:
code:
1
2
3
4
5
6
7
8
9
10
11
// Stretch blob size
$cSql = 'set textsize 4194304'; // = 4MB
sql_exec($cSql);

// Retrieve the image
$cSql = "
    select Cast(MAP_IMAGE as image) as MAP_IMAGE
    from MAP
    where MAP_ID = $nId
"; 
$row = sql_result($cSql, ASSOC);

Dan kom je (misschien) op het volgende probleem:

Allowed memory size of 8388608 bytes exhausted

Zodra er een blob veld aanwezig is, wordt er geprobeerd het gespecificeerde hoeveelheid geheugen aan te maken. Hierdoor kan je de maximaal aantal geheugen voor een script overschrijden. Dit kan je dan verhelpen door het maximale geheugen gebruik voor je pagina op te schroeven van 8M naar 20M (of meer).

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Waarom sla je afbeeldingen op in je database?
In mijn optiek is het filesystem 'database' veel beter geschikt voor het opslaan van afbeeldingen.

Gooi je afbeelding in een map, en gooi het pad naar je afbeelding in je database.

Acties:
  • 0 Henk 'm!

  • Swaptor
  • Registratie: Mei 2003
  • Laatst online: 17-06 07:31

Swaptor

Java Apprentice

Oude discussie, TS had een specifiek probleem en geen intenties om over te stappen naar een andere methodiek.

Ontdek mij!
Proud NGS member
Stats-mod & forum-dude