Toon posts:

mysql_escape_string en hele grote BLOB

Pagina: 1
Acties:

Verwijderd

Topicstarter
Voor een intranet biedt ik clients de mogelijkheid om files te uploaden. Deze kunnen best groot zijn, dus heb ik een LongBlob veld in de mySQL database gecreerd. Tevens heb ik MySQL/PHP aangepast om grote post's aan te kunnen (bij Mysql max_allowed_packet op 8m, php.ini: upload_max_filesize=8m en post_max_size = 8m).
Om de BLOB netjes op te slaan gebruik ik mysql_escape_string.

Nu het probleem; als ik een file van meer dan 2 mb upload krijg ik de melding dat de 8mb limiet "exhausted" is. Op een of andere manier doet mysql_escape_string iets waardoor de post groter wordt. Als ik mysql_escape_string eruit sloop wordt de post namelijk netjes afgehandeld, alleen klopt het Insert-statement niet meer.
Dit treedt ook op wanneer ik addslashes gebruik (hoewel dit uit vele hoeken wordt afgeraden).
Heeft iemand hier ervaring mee? Mis ik een instelling op mijn server?
Bedankt!
_/-\o_

  • MikeN
  • Registratie: April 2001
  • Laatst online: 31-08 20:13
Ik denk dat in je php een memory limit is ingesteld. Dit is in je php.ini in te stellen met de optie memory_limit.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

ik denk dat je beter geen blobs kan gebruiken, maar je bestand ergens in je filesystem opslaan, met in je tabel een verwijzing o.i.d. naar dat bestand. Is vaak nog sneller ook.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
Die memory_limit zal op 8mb ook moeten werken, de file die ik upload is namelijk 2 mb. (de error zegt ook gewoon dat de memory limit van 8mb wordt overschreden door een string van 2 mb.. vandaar dat ik vermoed dat mysql_escape_string een of andere loop doet).
Bij MySQL is het gebruik van BLOB's over het algemeen geen probleem, bij Microsoft SQL server zorgt het voor een behoorlijk performance terugval. Als ik filesys ga gebruiken krijg je gedonder met file/directory-permissions, en het systeem moet superportable zijn. Het zal ook niet vaak voorkomen dat er grotere bestanden geupload gaan worden, maar ik wil wel de mogelijkheid hebben.
Er is ook verdomd weinig over de (interne) werking van mysql_escape_string te vinden moet ik zeggen.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Je zou kunnen proberen om de contents van het bestand eerst in stukjes te knippen... Ik weet eigenlijk niet of je kan benchen wat 't geheugenverbruik is in php, anders zou je even een paar testjes naast elkaar moeten zetten. Desnoods schrijf je zelf een functie die 't verhaal eerst in buffers van x bytes zet...

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Een string van 2MB neemt niet perse maar 2 MB in...
Daarnaast levert:
$var = mysql_escape_string($var);
altijd minstens tijdelijk 2x die 2MB op...
Maar mysql_escape_string roept intern in ieder geval ook nog eens mysql_real_escape_string aan zit je al op 6MB, in die functie wordt ook vast iets als $output = functie($input) gedaan en dan zit je dus al op 8MB.
(redenatie zal wel niet helemaal kloppen, maar je begrijpt het idee wel denk ik :) )

Vergeet daarbij voor het gemak niet dat dan vaak nog andere dingen als:
$query = "insert ... ('$var');"
etc gedaan worden en je zit alweer op dik 4a5MB kwa geheugen gebruik alleen al door die ene string van 2 MB ;)

en nee, php is bij mijn weten niet efficient met geheugen en ik twijfel zelfs wel eens of er een garbagecollector is...
Pagina: 1