Avatar billede kren1000 Nybegynder
14. oktober 2008 - 09:14 Der er 16 kommentarer og
1 løsning

Request Entity Too Large

Hej eksperter

Jeg har en hjemmeside, hvor jeg oploader indhold til siderne i en database. Det er få oplysninger, tekstindhold og et billede, der også laver en thumbnail der gemmes.

Koden virker på flere andre webhoteller, men jeg er stødt på et problem ved opload nu på netop dette hos webdomain, når jeg forsøger at oploade billeder der er større end ca.125bk, alt derover giver følgende fejl:

Request Entity Too Large
The requested resource
/cms/htmlarea/partnere_opret_indsaet.php
does not allow request data with POST requests, or the amount of data provided in the request exceeds the capacity limit.
------------------------------------------------------------------

Apache/2.2.8 (Unix) PHP/5.2.6 Server at hejrede.dk Port 80

Jeg fatter simpelthen ikke hvad der er galt, jeg konfererer pt med webhotellet, og de siger der er margin på 6mb for en opload, så det burde jo være ok.

Her er koden til opload, som egentlig er simpel, kan nogen se hvad der kan være galt? Det underlige er at det før har virket fint, jeg har arbejdet på det, men burde ikke have ændret noget ved opload koden...

<?php
ini_set("memory_limit","6M");
   
$mydb = mysql_connect('xxxxxx',xxxxxx','xxxxxx');
mysql_select_db('xxxxxx',$mydb);

//Her skal filen flyttes fra
$src = $_FILES['fil']['tmp_name'];

//Hvilken type fil arbejder vi med?
$ext = strtolower(end(explode(".", $_FILES['fil']['name'])));

//laver lige et par variabler :-)
$navn = $navn;
$pris = $pris;
$visning = $visning;
$beskrivelse = $beskrivelse;
$tid = time();

//Her giver vi billedet et andet navn, så der ikke kommer to ens navne…
$nytNavn = "partnere-" . $tid . "." . $ext;

//Her er vores destination for det store billede
$dst = "partnere/" . $nytNavn;

//her uploades det store billede:
copy($src, $dst);

//billed-funktioner:
$image = $dst;

//hvis billedet eksisterer
if(file_exists($image)) {

//billedet eksisterer
$foto = 1;

//find størrelsen
$imgsize = getimagesize($image);

//hvis bredden er mere end 200px
if($imgsize[0] > 100) {

//sæt det nye billedes bredde til 200,
//og regn højden ud så propertionerne passer
$width = 200;
$height = $imgsize[1] / ($imgsize[0] / 200);

//lav et nyt, blankt billede
$dst_img=imagecreatetruecolor($width,$height);

//åbn kildebilledet
$src_img=ImageCreateFromJpeg("$image");

//kopiér og resize kildebilledet over i det nye billede
ImageCopyResampled($dst_img,$src_img,0,0,0,0,$width,$height,ImageSX($src_img),ImageSY($src_img));

//lav output til mappen /tmp/
ImageJpeg($dst_img, "partnere/thumbnail/" . $nytNavn);
       
//hvis bredden ikke er over 200px
} else {

//åbn kildebilledet og lav output
$src_img=ImageCreateFromJpeg("$image");
ImageJpeg($src_img, $dst);
};

//sæt url'en til billedet
$imgurl = "partnere/thumbnail/" . $nytNavn;
} else {

//foto findes ikke
$foto = 0;
};

//Her ligges oplysningerne ind databasen – huske at connecte til den!

$navn = $_POST['navn'];
$visning = $_POST['visning'];
$beskrivelse = $_POST['beskrivelse'];
$teaser = $_POST['teaser'];

$query    = "INSERT into `partnere`
            SET
            `navn` = '".$navn."',
            `visning` = '".$visning."',
            `teaser` = '".$teaser."',
            `beskrivelse` = '".$beskrivelse."',
            `billede` = '".$dst."',
            `thumbnail` = '".$imgurl."'";

    mysql_query($query) or die(mysql_error());

    header("Location: partnere_opret.php");
    exit();
?>
Avatar billede erikjacobsen Ekspert
14. oktober 2008 - 09:23 #1
Ja, det er en indstilling på serveren/webhotellet.
Avatar billede erikjacobsen Ekspert
14. oktober 2008 - 09:25 #2
Ups: ... som du selv kan se ved at lave en fil med  <?php phpinfo(); ?> 
Der kan du se den faktiske begrænsning, og du kan sammenligne med andre webhoteller med PHP.
Avatar billede kren1000 Nybegynder
14. oktober 2008 - 09:35 #3
Ja ok, her er diverse info fra php, men synes ikke det er til at spotte en fejl, er dog heller ikke ekspert på dette område:)

SMTP localhost localhost
smtp_port 25 25
sql.safe_mode Off Off
track_errors Off Off
unserialize_callback_func no value no value
upload_max_filesize 6M 6M
upload_tmp_dir /home/virtual/_tmp /home/virtual/_tmp
user_dir no value no value


log_errors_max_len 1024 1024
magic_quotes_gpc Off Off
magic_quotes_runtime Off Off
magic_quotes_sybase Off Off
mail.force_extra_parameters no value no value
max_execution_time 30 30
max_input_nesting_level 64 64
max_input_time 60 60
memory_limit 30M 30M
open_basedir /home/virtual/hejrede.dk:/home/virtual/_tmp no value
output_buffering 4096 4096
output_handler no value no value
post_max_size 8M 8M
precision 14 14
realpath_cache_size 16K 16K
realpath_cache_ttl 120 120
register_argc_argv Off Off
register_globals On On
Avatar billede erikjacobsen Ekspert
14. oktober 2008 - 09:53 #4
125 kB bør ikke overskride de grænser ved POST. Memorylimit på 30MB bør også gøre det muligt at lave resize på ret store billeder.

Hvordan ser din <form> ud?
Avatar billede kren1000 Nybegynder
14. oktober 2008 - 09:57 #5
<table width="530" height="400" border="0" cellpadding="0" cellspacing="0">
        <tr>
          <td width="187" colspan="2" align="center" valign="top">
          <form enctype="multipart/form-data" action="partnere_opret_indsaet.php" method="post">
          <br>
         
          <table width="450" border="0" align="center" cellpadding="2" cellspacing="2">

<tr>
    <td width="46" align="left">Navn&nbsp;&nbsp;</td>
    <td width="390" align="left"><input type="text" name="navn" value="" size="60" maxlength="40"></td>
</tr>
<tr>
    <td width="46" align="left">Visning&nbsp;&nbsp;</td>
    <td width="390" align="left"><input type="text" name="visning" value="" size="60" maxlength="40"></td>
</tr>
<tr>
    <td align="left" valign="top">Teaser</td>
    <td align="left"><textarea name="teaser" cols="45" rows="8"></textarea></td>
</tr>
<tr>
    <td align="left" valign="top">Tekst</td>
    <td><textarea name="beskrivelse" cols="45" rows="8"></textarea></td>
</tr>
<tr>
    <td align="left">Billede</td>
    <td align="left"><input name="fil" type="file" size="45"></td>
</tr>

<tr>
    <td>&nbsp;</td>
    <td align="left">
    <input type="submit" value="Opret"> </td>
</tr>
</table>
</form>
Avatar billede kren1000 Nybegynder
14. oktober 2008 - 09:58 #6
Den hedder så partner_opret.php
Avatar billede erikjacobsen Ekspert
14. oktober 2008 - 10:06 #7
Og det er ikke fordi du putter H.C.Andersens samlede værker ind i det textarea ;) ?

Nej, det ser ok ud.

Der er yderligere en grænse i Apache serveren. Jeg ved ikke lige hvordan vi undersøger det.
Avatar billede kren1000 Nybegynder
14. oktober 2008 - 10:09 #8
hehe, nej jeg tester bare med lidt volapyk tekst, ikke over 25 anslag:).

Men fedt at vide det ser ud som det skal.

Jeg tænker om det kan være fordi at webhotellet er fyldt på, så der simpelthen ikke er plads, da det jo før har virket...

Der burde være 2000mb, men hvis mailsystemet nu f.eks. har overtaget en del eller noget, så kunne det måske være det, ellers ved jeg heller ikke hvad pokker det kan være...
Avatar billede erikjacobsen Ekspert
14. oktober 2008 - 10:32 #9
Det er vist en besked fra Apache. Du kan evt. lave dig en minimal testside, og sende den til deres support, og prøve at overbevise dem om at kigge i Apaches opsætning i httpd.conf.
Avatar billede kren1000 Nybegynder
14. oktober 2008 - 10:58 #10
Ja ok, det vil jeg lige høre dem ad om.

De skriver via support til mig:

"Jo netop thumbnail kan volde problemer alt efter hvordan de bliver lavet..

Du skal huske på et jpeg billed er et billed som er komprimeret/pakked, f.eks et jpeg billed på f.eks... 1mb som fil vil fylde godt 10-15 MB(alt efter opløsning og detailer i billedet) udpakket i hukommelsen, og alt efter hvad du så gør med det kan man MEGET nemt komme til at bruge over de 20MB..."
Avatar billede erikjacobsen Ekspert
14. oktober 2008 - 11:17 #11
Men det sker netop FØR du resizer billedet - derfor et lille eksempel uden.
Avatar billede kren1000 Nybegynder
15. oktober 2008 - 09:11 #12
Ah ok, jeg prøver lige eksempel så:=)
Avatar billede kren1000 Nybegynder
19. oktober 2008 - 08:56 #13
Nu har jeg prøvet uden resize, men det virker heller ikke. På webhotellet siger de nu at det er fordi at:

1. copy() er forkert, i skal bruge move_uploaded_file() istedet.

2. man behøver ikke at sætte sine variabler mere...det var kun php3 og før.

Jeg har nu forsøgt med nedenstående eksempel, og det virker også kun med de små billeder....

<form enctype="multipart/form-data" action="<?= $_SERVER['PHP_SELF'] ?>" method="POST">
    Send this file: <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>
<?php

  if ( $_SERVER['REQUEST_METHOD'] == 'POST' )
  {
    $uploaddir = '/sti der virker:)/';
    $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

    echo '<pre>';
    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
      echo "File is valid, and was successfully uploaded.\n";
    } else {
      echo "Possible file upload attack!\n";
    }

    echo 'Here is some more debugging info:';
    print_r($_FILES);

    print "</pre>";
  }

?>
Avatar billede erikjacobsen Ekspert
19. oktober 2008 - 09:16 #14
"det virker heller ikke" er ikke præcist nok! Er det samme reaktion som før - eller en anden. Uden at vide hvad der sker, er der ingen der kan hjælpe. Men lad os så antage, at du får samme fejlbesked som før.

Man bør ganske rigtigt bruge move_uploaded_file, men det virker med copy for små filer, så derfor er det ikke noget problem. Og det virker jo heller ikke med move_uploaded_file ;)

Det du har her viser helt klart, at der er en indstilling på serveren, Apache vil jeg mene, som er for lille.
Avatar billede erikjacobsen Ekspert
19. oktober 2008 - 10:05 #15
PS: Jeg vil gerne lægge det script du har her på en anden server, så du kan se, at scriptet er korrekt. Men jeg vil ikke lægge URL-en her. Du kan evt kontakte mig vi mit minisite.
Avatar billede kren1000 Nybegynder
19. oktober 2008 - 10:31 #16
Beklager min upræcise kommentar.

Det var samme fejlbesked som før ja.

Det kan jeg ikke sige nej til, det vil være fedt. Jeg sender dig lige min mail via din kontaktform.

På forhånd tak!
Avatar billede kren1000 Nybegynder
24. november 2008 - 15:57 #17
jeg lukker denne...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester