[PHP] Ongewenste warning bij werkende file upload

Pagina: 1
Acties:
  • 116 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
In mijn php applicatie (PHP 4.2.2) kun je een bestand uploaden. Hierin zit een beperking in het aantal MB's ingebouwd. Mijn script werkt goed, als in, er wordt een file geupload, dan wordt gekeken of het niet te groot is en als dat wel het geval is, wordt er een door mij geschreven melding op de pagina gegeven en krijg je een nieuw, leeg upload formulier.

Het probleem is nu, dat ondanks dat mijn script helemaal goed werkt, er een waarschuwing naar de browser wordt gestuurd die aangeeft dat de upload restrictie van de server van toepassing is:

"Warning: upload_max_filesize of 2097152 bytes exceeded - file [new_file=<filenaam>] not saved in Unknown on line 0"

Dit controleer ik ook in mijn script, dat het bestand te groot is. Het probleem is dat de waarschuwing verschijnt voordat het script waar ik de upload heen stuur uitgevoerd wordt...

Aangezien ik niet bij de server instellingen kan (php.ini of ini_set() gebruiken), zoek ik naar een oplossing in mijn script. Ik heb geprobeerd alle waarschuwingen uit te zetten dmv error_reporting(0);. Dit had geen effect op deze waarschuwing.

Dit is de code van de form voor de upload:

HTML:
1
2
3
4
5
<form action="<filename>" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="2097152" />
<label for="new_file">Bestand kiezen</label><input type="file" name="new_file" id="new_file" />
<input name="store" type="submit" class="submit" value="Bewaar" />
</form>


Na een search op Gathering vond ik al de volgende posts, die mij niet de oplossing gaven:
[php] upload script error
[PHP] error handling
[PHP] Upload werkt niet

Hier is steeds het uploaden zelf het probleem, dus file permissions met een move_uploaded_file die niet werkt. Bij mij werkt die code die checkt of de move succesvol is prima, er komt alleen voordat ik kan checken een extra warning die ik weg wil hebben.

Deze thread geeft precies hetzelfde probleem, maar geeft als oplossing een javascript hack, die ik het liefst niet wil gebruiken:
[PHP] errormsg "max file size exceeded" onderdrukken

Iemand een idee hoe ik deze warning kan laten verdwijnen dmv php code?

Edit: de MAX_FILE_SIZE in de form lager zetten heb ik geprobeerd, dan verschijnt die variabele in de waarschuwing ipv "upload_max_filesize", met verder dus hetzelfde resultaat.

[ Voor 3% gewijzigd door Verwijderd op 23-06-2007 12:53 ]


Acties:
  • 0 Henk 'm!

  • coenbijlsma
  • Registratie: Augustus 2004
  • Niet online
ik weet niet meer precies hoe het ook alweer zit in PHP, maar volgens mij heb je daar 2 plaatsen waar de max_file_size staat ingesteld: in je form en ergens in php.ini ofzo. Die in de php.ini heeft altijd voorrang op die in je form, dus als die kleiner is dan de grootte in je form en je gaat een bestand uploaden dat groter is krijg je die foutmelding.

Pin me er niet op vast, maar volgens mij was het zoiets :+

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het instellen van de maximale grootte is het probleem niet, als ik grotere bestanden wilde uploaden weet ik waar ik dat kan wijzigen. Het probleem is dat mijn script correct afvangt dat een bestand te groot is om te uploaden, dus goed werkt, behalve dan dat er toch nog ergens een warning vandaan komt die zegt dat het bestand te groot is.

Dus: het klopt dat het bestand te groot is, dit wil ik afvangen en dat lukt in mijn script, op die ene warning na die ik nog weg wil hebben.

Acties:
  • 0 Henk 'm!

  • coenbijlsma
  • Registratie: Augustus 2004
  • Niet online
ahaa :)
dan kun je een paar dingen doen:
- de functie aanroepen met een @ ervoor, dit onderdrukt de errormessage (kijk maar hier ).
- zelf een exceptionhandler schrijven, die kan ook warnings ed afvangen
- het level van errorreporting aanpassen (hier)

volgens mij dekt dat de lading wel zo

[ Voor 0% gewijzigd door coenbijlsma op 23-06-2007 13:42 . Reden: leven != level... ]


Acties:
  • 0 Henk 'm!

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 20-09 00:30
De reden dat je die warning krijgt, is waarschijnlijk omdat die gegenereert word, VOORDAT je script uitgevoerd word. De upload zelf is de POST naar de server. Voor dat je script gaat draaien, initialiseert PHP alle GET, POST en FILE variabelen voor je, en komt er op dat punt al achter dat de file te groot is, en genereert de warning :)

What do you mean I have no life? I am a gamer, I got millions!


Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 13-09 20:30

kokx

WIN

Dit is ook een instelling die je niet met ini_set kan veranderen, aangezien het VOOR het initialiseren van de pagina gebeurd. Het kan volgensmij wel met .htaccess.

Acties:
  • 0 Henk 'm!

  • EnnaN
  • Registratie: September 2002
  • Laatst online: 12-09 11:42

EnnaN

Toys in the attic

@coenbijlsma:
errorreporting werkt niet als ik het goed lees
. Ik heb geprobeerd alle waarschuwingen uit te zetten dmv error_reporting(0);. Dit had geen effect op deze waarschuwing.
ik weet toevallig via IRL conversatie dat aanroepen met een @ ervoor ook niet helpt. met dat in het achterhoofd ben ik ook een beetje skeptisch over een exeptionhandler: die zal ook te laat beginnen gok ik, mede door wat morax zegt


@morax: dat hadden wij ook al bedacht: het is dus tussen de submit en het laden van de afhandeling :( .. maar heb je ook een idee hoe je die warning kan stoppen? Het gaat dus echt om het niet-laten-zien van de warning, de afhandeling gaat verder prima.

@kokx: enig idee hoe dat kan? dat lijkt me ook erg afhankelijk van of dat mag in de php.ini....

sig


Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 13-09 20:30

kokx

WIN

Ik heb ff in een stoffig hoekje van me HDD gekeken, een daar kwam ik deze .htaccess tegen:
code:
1
2
php_flag magic_quotes_gpc Off
php_flag register_globals Off


Iets dergelijks zul je dus moeten doen met de configuratie die jij moet veranderen, upload_max_filesize.

[ Voor 3% gewijzigd door kokx op 23-06-2007 14:57 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Er is een "post_max_size" configuratie optie die in te stellen is, maar alleen via de httpd.conf of php.ini in mijn PHP versie: http://nl3.php.net/manual/en/ini.php#ini.list. Ik heb verschillende opties in .htaccess geprobeerd, volgens mij is er geen toepasbaar in mijn geval.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Maar niemand heeft dus nog een ander idee hiervoor?

Acties:
  • 0 Henk 'm!

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

Janoz

Moderator Devschuur®

!litemod

Heb je in je .htaccess al geprobeert je loglevel aan te passen? Dus eigenlijk hetzelfde als set_errorreporting(0). Dat laatste werkt niet omdat de warning gegenereerd wordt voordat de error reporting aangepast wordt. Misschien werkt het wel wanneeer je de error reporting aanpast in de htaccess. Als dat nog niet werkt zou je de globale configuratie nog proberen aan te passen, maar dat kan natuurlijk alleen wanneer je daar de rechten voor hebt.

[ Voor 75% gewijzigd door Janoz op 25-06-2007 10:58 ]

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


Acties:
  • 0 Henk 'm!

  • YakuzA
  • Registratie: Maart 2001
  • Niet online

YakuzA

Wat denk je nou zelluf hey :X

Uhm als dit in je HTML staat:
HTML:
1
<input type="hidden" name="MAX_FILE_SIZE" value="2097152" />


dan krijg je idd die melding als er meer dan 2097152 bytes in de file zitten, aangezien dit verwerkt word voordat PHP er uberhaupt iets mee gaat doen

[ Voor 10% gewijzigd door YakuzA op 25-06-2007 16:41 ]

Death smiles at us all, all a man can do is smile back.
PSN


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Ik meen me te herinneren dat zowel Apache als PHP een max file size hebben. Als die van PHP groter is dan die van Apache kan ik me voorstellen dat je die error krijgt.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info

Pagina: 1