Archief - PHP: File uploaden lukt niet als de size > +-2MB

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Fraggie

Legacy Member
PHP:
<?php
require('authorise.php');
if (!checkLogin()) exit();
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Upload a file</title>
<link href="style.css" rel="stylesheet" type="text/css" /></head><body bgcolor="#BBE17E" style="margin:15px">';
  if (!empty($_FILES["userfile"])) {
    $filename = basename($_FILES['userfile']['name']);
    $uploaddir = "/mapke/".$_SESSION['login']."/";
    $uploadfile = $uploaddir.$filename;
    
    if (!eregi("^[_a-z0-9-]+\.[a-z]{3}$", $filename)) { exit("<h2>Filename incorrect!</h2>"); } //#a-zA-Z0-9_-.a-zA-Z; incorrect: sad roo.gif#


    //#Check for bad extensions#
    $extension = false;
    $allowedExtensions = array('rar','zip','ace','tar','jpg','jpeg');
    $fileExtension = substr(strtolower($filename),-3);

    foreach($allowedExtensions as $value) {
     if($value == $fileExtension) {
      $extension = true;
      break;
     }
    }
    if (!$extension) { exit ("<h2>Incorrect extension!</h2>"); }
    
    //#Checking if the file exists#
    if(file_exists($uploaddir.date("Y-m-d")."_".$filename)) { exit("<h2>Filename already exists</h>"); }
    
    
    if (!$checkdir = opendir($uploaddir)) { mkdir($uploaddir, 0755); } //#If dir doesn't exists, make one with CHMOD 755#
    if(move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
     echo "<div style=\"color:#000000\">The file ".$filename." has been uploaded<br /></div>";
    } else  exit("<h2>There was an error uploading the file, please try again!</h2>");
    
    if (rename($uploadfile, $uploaddir.date("Y-m-d")."_".$filename)) {
     $filename = date("Y-m-d")."_".$filename;
     echo "<span onclick=\"window.opener.document.forms[0].txtURL.options[0]=new Option('$filename','http://mapke/".$_SESSION['login']."/".$filename."'); window.opener.document.forms[0].txtURL.options[0].selected = 'selected'; window.close();\">Changed filename to: <b>$filename</b><br />";
    }
    else { echo "Could not change filename!<br />"; }
    echo("<b>File Upload complete</b><br />The URL is - http://mapke/".$_SESSION['login']."/".$filename."</span>");
   } else {

?>
<div align="center"><form action="uploadafile.php" method="post" enctype="multipart/form-data">
<input type="file" name="userfile" type="file" style="width:500px" size="60"><br /> <!-- FF doesn't support width.. size=60 -->
<input type="submit" value="Upload File" class="button">
</form></div>

<? } ?>
</body></html>

Dit is een upload script waar een paar regels aan verbonden zijn zoals: beperkte extensie, controle of de file al bestaat etc

Wanneer ik de volgende files upload lukt alles zonder probleem:
fotos.jpg (51kB)
fotosrar.rar (50kB)
muski.rar (680kB)

Als ik echter de inhoud van mushi 3x kopieer (muski2.rar) dan een filesize krijg van: 2.04MB krijg ik deze error:

There was an error uploading the file, please try again!
maw de volgende if is niet voldaan:
PHP:
if(move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
Iemand een idee waarom de filesize een verschil maakt?

Het script heb ik zelf geschreven in stukjes, er kunnen dus overbodige/foute dingen bij zitten.

Flipkikker

Legacy Member
voor zover ik iets van file uploading in php ken, zal dit te maken hebben met een instelling in je php, de max file upload size ofzo, kdenk dat je dit wel kunt wijzigen met een functie, tenzij je server dit beperkt :x

dit is slechts een vermoeden hé, kzal ff zoeken of het klopt watk zeg :$

edit: kijk btw ook eens of je webspace niet vol staat :unsure:

edit2:

http://us3.php.net/features.file-upload

->

PHP:
Example 38-1. File Upload Form

A file upload screen can be built by creating a special form which looks something like this:

<!-- The data encoding type, enctype, MUST be specified as below -->
<form enctype="multipart/form-data" action="__URL__" method="POST">
    <!-- MAX_FILE_SIZE must precede the file input field -->
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    <!-- Name of input element determines name in $_FILES array -->
    Send this file: <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>

Flipkikker

Legacy Member
check men edit ;)

kdenk dat hij standaard die waarde neemt van de server, tenzij je zoals in het stukje code je MAX_FILESIZE definieert

Fraggie

Legacy Member
Zo ziet mijn form er nu uit:
HTML:
<form action="uploadafile.php" method="POST" enctype="multipart/form-data">
<input type="file" name="userfile" style="width:500px" size="60"><br /> <!-- FF doesn't support width.. size=60 -->
<!-- MAX_FILE_SIZE must precede the file input field: http://us3.php.net/features.file-upload -->
<input type="hidden" name="MAX_FILE_SIZE" value="10240" /> <!-- 10MB -->
<input type="submit" value="Upload File" class="button">
</form></div>
Maar het geeft geen effect :(

Radiance

Legacy Member
Code:
<input type="hidden" name="MAX_FILE_SIZE" value="10240" /> <!-- 10MB -->
Dit is totaal nutteloos, het is in principe bedoelt om de browser te laten weten hoe groot de POST mag zijn die jij zo meteen gaat verzenden en u de moeite te besparen 50MB te uploaden om dan te ontdekken dat dat niet togestaan is. Enig probleem : geen enkele browser houd zich daar aan, en is ook niet de oorzaak van het probleem hier.

Het probleem zit hem zoals al vermeld in PHP instellingen.
Er zijn er redelijk wat die problemen kunnen opleveren, al navenant hoe beperkt uw host ze zelf heeft ingesteld.
De oplossing : als je op een Apache server zit & uw host laat het toe : maak een .htaccess file aan en zet die in dezelfde map als uw script en zet er dit in :
Code:
php_value max_amount_memory 50M
php_value memory_limit 50M
php_value post_max_size 50M
php_value upload_max_filesize 50M
LimitRequestBody 0
(via een phpinfo() kan altijd al eens bekijken waar die waarden nu op staan, zie je vrij snel waar het probleem zit)
50M uiteraard aanpassen naar een aantal megabytes naar believen. Draai je geen Apache of heb je niet voldoende rechten ? Contacteer uw host om het inorde te brengen.

TiZon

Legacy Member
heb dat ook gehad, gewoon bovenaan in je code volgende zetten:

PHP:
ini_set("memory_limit","20M");
ini_set("max_execution_time","3600");

Dan zal het wel lukken ;)

Fraggie

Legacy Member
frenzal zei:
draait je server php5?
De server draait idd PHP5

Verder is de .htaccess file niet gelukt (geef effect), er wordt nochtans met apache gewerkt.

Ook had ini_set geen effect, ik heb voor de zekerheid ook upload_max_filesize vergroot (mss kan ik bepaalde acties niet uitvoeren, omdat het een beperkte account is?). Ik heb nu email gezonden naar host om te vragen of ze het kunnen aanpassen.

Radiance

Legacy Member
De waarden die TiZon aanhaalt gaan uw probleem niet oplossen lijkt mij. max_execution_time begint pas te tellen wanneer de PHP processor iets uitvoert, heeft niks te maken met de tijd van "uploaden".

En upload_max_filesize kan je dan wel setten met ini_set(), het is dan al te laat, je moet die setten VOOR dat het script wordt uitgevoerd, dus via .htaccess of direct in de php.ini.
Als het plaatsen van de .htaccess file niets doet & je toch op een Apache server zit dan heeft uw host dat uigeschakeld, hen contacteren is dan the way to go.

frenzal

Legacy Member
Fraggie zei:
De server draait idd PHP5

Woops nvm, ik was m'n eigen aan het verwarren met een probleem die ik ooit had bij een downloadscript met php5, em wou geen bestanden groter als 2M laten downloaden.

Jellepunk

Legacy Member
zou dit makkelijekr en toehankelijker zijn via een ftp script, ik heb momenteel hetzelfde probleem want ik wilde mijn fotoalbum door geven en dat gaf problemen. Probleem is dat ik niet goed begrijp hoe je dingen via ftp kan uploaden. de connectie maken is geen probleem maar het doorsturen van de gegevens lukt me niet. iemand daarover beetje info?
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan