Archief - PHP: Grote foto's uploaden

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.

Jellepunk

Legacy Member
Ik ben bezig aan een fotoalbum en dat werkt perfect (tot nu toe toch), maar vanaf ik wil groter foto's uploaden van 1 tot 3 MB. krijg ik fouten van de server of krijg ik een timeout.
dit is mijn upload code
PHP:
<h2>Voeg werken toe</h2>
<?php
    if($_SERVER['REQUEST_METHOD'] == "POST")
    {
    $map    =    "img/foto/";
    $view    =    "view/";
        if(!is_dir($map))
        {
            mkdir($map);
            chmod($map, 0777);
        }
        if(!is_dir($map.$view))
        {
            mkdir($map.$view);
            chmod($map.$view, 0777);
        }
        foreach($_FILES as $afbeelding)
        {
            $naam         = $afbeelding['name'];
            $type         = $afbeelding['type'];
            $temp         = $afbeelding['tmp_name'];
            $error        = $afbeelding['error'];
            $size        = $afbeelding['size'];
            
            switch($error)
            {
                case 0:
                    if(is_uploaded_file($temp))
                    {
                        if($type == 'image/jpeg' || $type == 'image/gif' || $type == 'image/png' || $type == 'image/pjpeg')
                        {
                            if($size >= 1024000)
                            {
                                echo '<p>Sorry, dit bestand is te groot om te worden geupload!</p>';
                            }else{
                                $random = randomgenerator(5);
                                $verplaats = move_uploaded_file($temp, $map.$random.'-'.$naam);
                                thumbnail($map,$view,$random.'-'.$naam,640,640);
                                thumbnail($map,null,$random.'-'.$naam,100,100);
                            
                                if($verplaats == 1)
                                {
                                    echo '<p>Er is geen error opgetreden. Het bestand is met success geupload</p>';
                                }else{
                                    echo '<p>Er ging iets mis met het uploaden van '.$naam.', neem contact op met de webmaster.</p>';
                                }
                            }
                        }else{
                            echo '<p>Sorry, dit bestandsformaat accepteer ik niet!</p>';
                        }                
                    }else{
                        echo '<p>Sorry, dit accepteer ik niet!</p>';
                    }
                    break;
                    
                case 1:
                    echo '<p>Error: De grootte van het bestand is groter dan wat de server aankan!</p>';
                    break;
                
                case 2:
                    echo '<p>Error: De grootte van het bestand is groter dan 1024kb!</p>';
                    break;
                
                case 3:
                    echo '<p>Error: Het bestand is maar gedeeltelijk geupload!</p>';
                    break;
                
                case 4:
                    //Geen bestand geupload, we doen niks!
                    break;
            }
        }
    }
?>
<form action="" method="post" enctype="multipart/form-data">
<?php
    for($i=0; $i<10; $i++)
    {
        if(($i+1) < 10) $afb    =    "0" . ($i+1);
        else $afb    =    ($i+1);
        echo "Afbeelding " . $afb . ": <input type=\"file\" name=\"afbeelding" . ($i+1) . "\" size=\"60\" class=\"bestand\"/><br/>";
    }
?>
<input type="submit" value="uploaden!" class="knop"/>
<input type="reset" value="Opnieuw Beginnen" class="knop"/>
</form>
en mijn thumbnail code
PHP:
function thumbnail($map,$thumblocatie,$bestandsnaam,$breedte,$hoogte)
{
    list($breedte_origineel, $hoogte_origineel, $type) = getimagesize($map.$bestandsnaam);

    //We weten de breedte/hoogte van een afbeelding, we weten ook hoe groot ze moeten worden en gaan dus lekker rekenen!
    if (($breedte_origineel < $hoogte_origineel) && ($breedte > $hoogte)) {
        $breedte = ($hoogte / $hoogte_origineel) * $breedte_origineel;
    }else{
        $hoogte = ($breedte / $breedte_origineel) * $hoogte_origineel;
    }
    
    //Maak een nieuwe afbeelding aan met de juiste breedte en hoogte, openen de originele en gebruik de functie imagecopyresampled om daar een mooie afbeelding van te maken.
    $afbeelding = imagecreatetruecolor($breedte, $hoogte);
    
    switch ($type) 
    {
        case 1:
            //gif
            $afbeelding_origineel = imagecreatefromgif($map.$bestandsnaam);
            imagecopyresampled($afbeelding, $afbeelding_origineel, 0, 0, 0, 0, $breedte, $hoogte, $breedte_origineel, $hoogte_origineel);
            imagegif($afbeelding, $map.$thumblocatie.$bestandsnaam);
            break;
        case 2:
            //jpg
            $afbeelding_origineel = imagecreatefromjpeg($map.$bestandsnaam);
            imagecopyresampled($afbeelding, $afbeelding_origineel, 0, 0, 0, 0, $breedte, $hoogte, $breedte_origineel, $hoogte_origineel);
            imagejpeg($afbeelding, $map.$thumblocatie.$bestandsnaam,80);
            break;
        case 3:
            //png
            $afbeelding_origineel = imagecreatefrompng($map.$bestandsnaam);
            imagecopyresampled($afbeelding, $afbeelding_origineel, 0, 0, 0, 0, $breedte, $hoogte, $breedte_origineel, $hoogte_origineel);
            imagepng($afbeelding, $map.$thumblocatie.$bestandsnaam);
            break;
    }   
}

Weten jullie hoe ik dit kan oplossen zonder dat de eindgebruiker moet beginnen zijn of haar foto's te verkleinen?

Disa

Legacy Member
Als je grotere dingen wilt uploaden zal je via de ftp commands moeten werken, vrees ik. Het http protocol laat grote (>2mb) niet toe dacht ik.

D

killgore

Legacy Member
Disa zei:
Als je grotere dingen wilt uploaden zal je via de ftp commands moeten werken, vrees ik. Het http protocol laat grote (>2mb) niet toe dacht ik.

D
je kan het wel groter laten worden dacht ik (zolang de browser het niet limiteert ffcourse), maar zeer vaak zal je gewoon met time-outs en dergelijke komen, het is gewoon niet aan te raden over die 2mb te gaan.

Ik zou dan idd een ftp-applet of zo gaan invoegen :).

Jellepunk

Legacy Member
Zal mijn thumbnail functie dan niet tegen werken, omdat ik al gehoord heb dat thumbnails maken van bestanden van 3mb ook een van de oorzaken is.
Nuja, ik zal het vanmiddag eens proberen

edit: bestanden die net 1 mb zijn kunnen ook niet verwerkt worden. ze worden wel geupload maar de thumbnail maken lukt niet

deadlock

Legacy Member
In php.ini:

- max_execution_time: verhogen naar bvb 2400
Zo krijg je pas na 2400 secs een timeout.

- memory_limit: verhogen naar bvb 128M
Zo kan PHP nog steeds thumbnails genereren bij grotere afbeeldingen

- post_max_size: verhogen naar bvb 128M
Zodat je ook grotere bestanden kan uploaden via een HTML formulier

- upload_max_filesize: verhogen naar bvb 50M
Spreekt voor zich denk ik

Na deze aanpassingen is natuurlijk een (VDS) restart nodig om ze effectief toe te passen.

Jellepunk

Legacy Member
deadlock zei:
In php.ini:

- max_execution_time: verhogen naar bvb 2400
Zo krijg je pas na 2400 secs een timeout.

- memory_limit: verhogen naar bvb 128M
Zo kan PHP nog steeds thumbnails genereren bij grotere afbeeldingen

- post_max_size: verhogen naar bvb 128M
Zodat je ook grotere bestanden kan uploaden via een HTML formulier

- upload_max_filesize: verhogen naar bvb 50M
Spreekt voor zich denk ik

Na deze aanpassingen is natuurlijk een (VDS) restart nodig om ze effectief toe te passen.

uhu, ik zal het hosting bedrijf even mailen en vragen of ze deze instellingen kunnen wijzigen.
bedankt!

caoimhin

Legacy Member
deadlock zei:
In php.ini:

- max_execution_time: verhogen naar bvb 2400
Zo krijg je pas na 2400 secs een timeout.

- memory_limit: verhogen naar bvb 128M
Zo kan PHP nog steeds thumbnails genereren bij grotere afbeeldingen

- post_max_size: verhogen naar bvb 128M
Zodat je ook grotere bestanden kan uploaden via een HTML formulier

- upload_max_filesize: verhogen naar bvb 50M
Spreekt voor zich denk ik

Na deze aanpassingen is natuurlijk een (VDS) restart nodig om ze effectief toe te passen.

kan dat niet gewoon met ini_set() in php?

edit: http://be.php.net/ini_set

Jellepunk

Legacy Member
Ik heb even geexperimenteerd met ini_set()

max_execution_time OK!
memory_limit OK!
post_max_size MISLUKT!
upload_max_filesize MISLUKT!

dus de laatste 2 kan ik niet aanpassen via ini_set()

hoe zou dit komen?

het zou veel handiger zijn dan de server aan te passen natuurlijk

Jellepunk

Legacy Member
PHP:
	$max_execution_time		=	ini_set("max_execution_time", "6000");
	if($max_execution_time) echo "max_execution_time	OK!";
	else echo "max_execution_time	MISLUKT!";
	
	echo "<br/>";
	
	$memory_limit			=	ini_set("memory_limit", "128M");
	if($memory_limit) echo "memory_limit	OK!";
	else echo "memory_limit	MISLUKT!";	
	
	echo "<br/>";
	
	$post_max_size			=	ini_set("post_max_size", "128M");
	if($post_max_size) echo "post_max_size_time	OK!";
	else echo "post_max_size	MISLUKT!";
		
	echo "<br/>";
	
	$upload_max_filesize	=	ini_set("upload_max_filesize", "50M");
	if($upload_max_filesize) echo "upload_max_filesize	OK!";
	else echo "upload_max_filesize	MISLUKT!";
		
	echo "<br/>";

	if($max_execution_time && $memory_limit && $post_max_size && $upload_max_filesize)
		echo "gelukt!";
	else
		echo "mislukt";

dit doe ik, gewoon de controle erbij gezet ter controle
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