for each
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)
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
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);
?>
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
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?
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
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.
Hoe groot zijn die downloads?
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
Het script heb ik in bruikleen van net.
En die exif heb ik er tussen gestoken'
maar expertise in dit script heb ik niet
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.
kijk eens met 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.