for each

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Chris Bosmans

chris Bosmans

21/03/2016 20:43:35
Quote Anchor link
ik gebruik nu een script waarbij ik meerder foto's kan uploaden
en daarnaast worden ze nog in grootte aangepast

de meerder upload werkt tot op 8 geselecteerde bestanden??
en dan krijg ik volgende melding

Notice: Undefined index: uploaded_file in xxxxxxxxxxxxx on line 2 Warning: Invalid argument supplied for foreach() in xxxxxxxxxxxxxx on line 2

waarom krijg ik vanaf 8 bestanden deze foutmelding? gemiddelde grootte van files is +- 5 MB

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
foreach($_FILES['uploaded_file']['name'] as $key => $tmp_name )
{

    $fileName = $key.$_FILES['uploaded_file']['name'][$key];
    $fileSize =$_FILES['uploaded_file']['size'][$key];
    $fileTmpLoc =$_FILES['uploaded_file']['tmp_name'][$key];
    $fileType=$_FILES['uploaded_file']['type'][$key];
    $fileErrorMsg = $_FILES["uploaded_file"]["error"][$key];

$kaboom = explode(".", $fileName); // Split file name into an array using the dot
$fileExt = end($kaboom); // Now target the last array element to get the file extension
$fileTmpLoc1 = imagecreatefromstring(file_get_contents($_FILES['uploaded_file']['tmp_name'][$key]));
$exif = exif_read_data($_FILES['uploaded_file']['tmp_name'][$key]);
   sleep(1);
if(!empty($exif['Orientation'])) {
    switch($exif['Orientation']) {
        case
8:
            $fileTmpLoc1 = imagerotate($fileTmpLoc1,90,0);
            break;
        case
3:
            $fileTmpLoc1 = imagerotate($fileTmpLoc1,180,0);
            break;
        case
6:
            $fileTmpLoc1 = imagerotate($fileTmpLoc1,-90,0);
            break;
    }
}

imagejpeg($fileTmpLoc1,$fileTmpLoc);
// START PHP Image Upload Error Handling --------------------------------------------------
if (!$fileTmpLoc) { // if file not chosen
    echo "ERROR: Please browse for a file before clicking the upload button.";
    exit();
}
else if($fileSize > (1024*7000)) { // if file size is larger than 5 Megabytes
    echo "ERROR: Your file was larger than 7 Megabytes in size.";
    unlink($fileTmpLoc); // Remove the uploaded file from the PHP temp folder
    exit();
}
else if (!preg_match("/.(gif|jpg|png)$/i", $fileName) ) {
     // This condition is only if you wish to allow uploading of specific file types    
     echo "ERROR: Your image was not .gif, .jpg, or .png.";
     unlink($fileTmpLoc); // Remove the uploaded file from the PHP temp folder
     exit();
}
else if ($fileErrorMsg == 1) { // if file upload error key is equal to 1
    echo "ERROR: An error occured while processing the file. Try again.";
    exit();
}

$newfileName=$key."-".date("m").time().".".$fileExt;
// END PHP Image Upload Error Handling ----------------------------------------------------
// Place it into your "uploads" folder mow using the move_uploaded_file() function

$moveResult = move_uploaded_file($fileTmpLoc, "../../../../gallerij/webpic/$newfileName");
// Check to make sure the move result is true before continuing
if ($moveResult != true) {
    echo "ERROR: File not uploaded. Try again.";
    unlink($fileTmpLoc); // Remove the uploaded file from the PHP temp folder
    exit();
}

unlink($fileTmpLoc); // Remove the uploaded file from the PHP temp folder
// ---------- Include Universal Image Resizing Function --------

include_once("resize.php");
$target_file = "../../webpic/$newfileName";
$resized_file = "../../webpic/$newfileName";
$wmax = 1000;
$hmax = 700;
ak_img_resize($target_file, $resized_file, $wmax, $hmax, $fileExt);
?>


Toevoeging op 21/03/2016 20:53:28:

als mijn foto's kleiner (5kb) zijn dan lukt de script tot 20 stuks, en dan stopt het zonder fout boodschap
Gewijzigd op 21/03/2016 20:44:04 door Chris Bosmans
 
PHP hulp

PHP hulp

23/04/2024 16:11:21
 
L deB

L deB

22/03/2016 22:45:04
Quote Anchor link
var_dump eerst $_FILES['uploaded_file']
en name enzo.

Misschien dat die value al iets aangeeft, aangezien hij aangeeft dat er een invalid value wordt doorgegeven.

En alle error messages aangezet dus?
 
Chris Bosmans

chris Bosmans

22/03/2016 22:56:19
Quote Anchor link
=> maar als ik een var dump doe gaan dan mijn selecteerde input velden niet weg??


het is niet dat het script niet werkt vanaf als ik 8 foto's selecteer loopt hij vast
kan dit ergens aan cache geheugen liggen?


en alle errors staan aan
standard op mijn paginas

ini_set('display_errors', 'on');
error_reporting(E_ALL);


Toevoeging op 22/03/2016 22:57:52:

dacht ook dat het met misschien mijn input naam lag. maar heb mijn test fotos f1.jpg -> f20.jpg genoemd en ook hier loopt hij vast na foto 7
 
L deB

L deB

22/03/2016 23:09:52
Quote Anchor link
Je hebt geen limiet in resize.php ingesteld of iets wat hiervoor kan zorgen?

var_dump kan je gewoon doen binnen de foreach. Dan doe je eerst 7 afbeeldingen, bekijk je het resultaat. Dan doe je het met 8. Dan krijg je misschien extra info erover of dus een bepaald iets op null staat of wat dan ook.

Ik zou niet direct zelf durven te stellen dat het met het cache te maken heeft. Bedoel 20 x 5 kb is alsnog veel minder dan 7 x 5mb.. dus ik zou zelf denken dat er iets anders aan de hand is.

Toevoeging op 22/03/2016 23:13:47:

Ik ben een noob maar in een dergelijk geval verwijder (en sla ik op) alle code die het valideert en begin ik met niks. Zien of 8 afbeeldingen uploaden werkt. Daarna zien of 8 afbeeldingen uploaden werkt met 5mb. limiet. Daarna zien of 8 afbeeldingen lukt met jpg, png enz. validatie. En zo door. Kost even tijd maar heeft mij vaak geholpen om te vinden welke codering het probleem geeft en het daarna te begrijpen.
 
- SanThe -

- SanThe -

22/03/2016 23:29:45
Quote Anchor link
Hoe groot zijn die downloads?
 
Thomas van den Heuvel

Thomas van den Heuvel

22/03/2016 23:43:28
Quote Anchor link
@chris

Scripts kunnen zichzelf standaard een gelimiteerde hoeveelheid geheugen toe-eigenen.

Waarschijnlijk overschrijd je een geheugenlimiet.

In dit geval zul je rekening moeten houden met een aantal instellingen.

Onder andere, en in de onderlinge verhouding:

memory_limit (geheugen voor totale script)
>
post_max_size (totale grootte van $_POST en $_FILES tezamen)
>
upload_max_filesize (de maximale bestandsgrootte van één upload)

Doorgaans krijg je een WSOD (white screen of death) als je een geheugenlimiet overschrijdt, maar in jouw geval lijkt het erop dat $_FILES gewoon wordt leeggegooid? Gebruik je toevallig Suhosin ofzo (check via phpinfo())? Ook plaats je geen code van het formulier zelf, mogelijk zit daar een fout.

Dan is de verwerking van je afbeeldingen nogal knetter inefficiënt. Je gaat eerst allemaal plaatjes bakken en verplaatsen om deze vervolgens weer weg te gooien als deze niet aan de controles voldoen. Beetje zonde niet? Voer EERST de controles uit en ga DAN pas aan de slag met "dure" operaties.

Tevens geef je je resources van afbeeldingcreatie (imagecreatefromstring()) tussendoor niet vrij als je klaar bent met een iteratie van een afbeelding, zodat het in gebruik zijnde geheugen waarschijnlijk alleen maar oploopt tijdens de uitvoer van het script. Gebruik, om te voorkomen dat je geheugen tijdens de uitvoering van het script dichtslibt, de functie imagedestroy().

En tot slot overschrijf je een originele afbeelding, die je daarna verplaatst :/. Kun je dat niet in 1x doen?

Wat er allemaal gebeurt, en de volgorde waarin dit gebeurt is niet bepaald logisch en waarschijnlijk ook niet erg efficiënt.
Gewijzigd op 23/03/2016 00:00:29 door Thomas van den Heuvel
 
Chris Bosmans

chris Bosmans

23/03/2016 00:03:00
Quote Anchor link
Dank voor deuitleg zal dit morgen eens bekijken
Het script heb ik in bruikleen van net.
En die exif heb ik er tussen gestoken'

maar expertise in dit script heb ik niet
 
Ivo P

Ivo P

23/03/2016 11:00:39
Quote Anchor link
kijk eens met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php phpinfo();?>
wat de maximale grootte is van de te posten data.

Dat die index op regel 2 leeg is, lijkt erop te duiden dat de upload mislukt is.

Je zegt dat het vanaf 8 afbeeldingen van 5MB fout gaat en met kleinere goed.
Dan zou ik het zoeken in eeen overschreden limiet.

Zou het fout gaan bij het resizen van de plaatjes, dan is dat ofwel een rechtenprobleem (geen rechten om te schrijven) en dan krijg je daar een duidelijke foutmelding op, maar aangezien het wel lukt met minder plaatjes, lijkt met dat niet het geval.

Ofwel gebruikt php te veel geheugen, en dan is daar ook een duidelijke fatal error voor mbt overschreden limiet.

Dus waarschijnlijk grijpt Apache al in, voordat php aan de gang is.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.