Problemen met upload script meerdere foto's
Onderstaande script heb ik voor het uploaden van meerdere files(foto's) op mijn site.
Je kunt er meerdere files mee uploaden en deze worden verkleind naar het formaat dat ik wil en er wordt een link gemaakt en deze wordt in de database geplaatst.
Er kon steeds maar 1 foto mee geupload worden maar de geruiker kan nu aangeven hoeveel er geupload moeten worden en dan worden er dmv AJAX extra input fields aangemaakt, variable q.
Dit heb ik eerst uitgeprobeerd onder een testmap waar ook de andere foto's staan van de website en dat werkt, maar nu ik dit bij een al bestaande map met foto's wil uitproberen krijg ik onderstaande foutmelding
Fatal error: Allowed memory size of 20971520 bytes exhausted (tried to allocate 2048 bytes) in /home/deskudde/domains/deskuddebuikkies.nl/public_html/fotoupload.php on line 56
Weet iemand wat ik kan doen om dit te voorkomen en waarom dit niet elke keer gebeurt?
Ik heb het geprobeerd met ini_set("memory_limit","32M");
maar dit helpt ook niet omdat de host waar ik de website heb staan onderstaande instellingen heeft.
memory_limit 20M
post_max_size 8M
Volgens mij blijft het eerste plaatje in het geheugen en dan bij het 2e plaatje zit het geheugen vol, is er een manier om het geheugen leeg te maken?
1 plaatje van 1,5MB geeft geen problemen bij 2 of meer wel.
Het script is nogal traag heeft iemand een idee hoe het script sneller te krijgen is?
Onderstaande is het hele script zonder de ajax functie.
Volgens mij kan er snelheid behaald worden in het upload/verklein gedeelte, maar ik heb niet uit kunnen vinden hoe.
Ik hoop dat iemand me kan helpen.
Bvd.
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
<div id="aantalupload">
<?
$gebruiker=$_GET['gebruiker'];
$mapnaam=$_GET['ond'];
//$mapnaam="testKeet";
if ($_GET["q"]!=0)
{
$aantaluploads = $_GET["q"];
//echo"q=0";
}
else
{
$aantaluploads = $_POST["aantalknop"];
//echo("q is niet 0 q is $aantaluploads");
}
include("database.php");
$sql = "SELECT naam FROM fotoalbum WHERE map='$mapnaam'";
$resultaat = mysql_query($sql);
$aantal = mysql_num_rows($resultaat);
//verklein/upload gedeelte
if ($_POST['upload']){
$counter=0;
$test2 = $_POST["aantalknop"];
//echo"<br> uploaden is gestart $aantaluploads test2 = $test2 <br><br>";
//echo"Aantaluploads voor for loop = $aantaluploads test = $test";
for ( $ii = 1; $ii <= $aantaluploads; $ii += 1)
{
getimagesize($_FILES["userfile"]["tmp_name"][$ii]);
$imgsize = $_FILES["userfile"]["size"][$ii];
//echo"Aantaluploads = $aantaluploads II = $ii";
if ($imgsize == "0")
{
//$counter=$counter-1;
}
else
{
ini_set('max_execution_time', 120);
$naam= $aantal+1;
$filename = "fotoalbum/".$mapnaam."/".$naam."-thumb.jpg";
$filename1 = "fotoalbum/".$mapnaam."/".$naam.".jpg";
$img = $_FILES['userfile']['tmp_name'][$ii];
REGEL 56 ---> $original = ImageCreateFromJpeg($img);
$originalw = imagesx($original);
$originalh = imagesy($original);
$thumbh = 100;
$thumbw= 100;
// $neworgh = 548;
$neworgw = 700;
//thumbs
$thumbratio = ($originalh / $thumbh);
$thumbdest = imagecreatetruecolor($thumbw,$thumbh);
imagecopyresampled($thumbdest,$original,0,0,0,0,$thumbw,$thumbh,$originalw,$originalh);
imagejpeg($thumbdest,$filename,70);
//nieuwe orgineel
// $orgratio = ($originalh / $neworgh);
$orgratio = ($originalw / $neworgw);
// $orgw = ($originalw / $orgratio);
$orgh = ($originalh / $orgratio);
$orgdest = imagecreatetruecolor($neworgw,$orgh);
imagecopyresampled($orgdest,$original,0,0,0,0,$neworgw,$orgh,$originalw,$originalh);
// $orgdest = imagecreatetruecolor($orgw,$neworgh);
// imagecopyresampled($orgdest,$original,0,0,0,0,$orgw,$neworgh,$originalw,$originalh);
imagejpeg($orgdest,$filename1,70);
$mapnaam = addslashes($mapnaam);
$datum = date ("Y-m-d");
$tijd = date("G:i");
$sql = "INSERT INTO fotoalbum (map,naam,datum,tijd,toestand) VALUES ('$mapnaam','$naam','$datum','$tijd',1)";
mysql_query($sql) or die("Er is iets mis gegaan met de invoer");
if ($aantaluploads==1)
{
echo"De foto is geplaatst";
}
$aantal++;
$counter++;
}
}
if ($aantaluploads>1)
{
echo"Er zijn $counter foto's geplaatst";
}
?>
<br>
Klik <a href="?id=bekijkfotosnieuw&ond=<?php echo"$mapnaam";?>" class="fotoupload">
hier</a>
om naar de foto's te gaan<br>
<? echo"of om tekst toe te voegen"; ?><br>
<? echo"Je kan ook nog een foto in dezelfde map zetten";
}
?>
//verklein/upload gedeelte tot hier
</p>
<p>Hier kunnen foto's geupload worden</p>
<form name="upload" id="upload" ENCTYPE="multipart/form-data" method="post">
<?
if($aantaluploads==0 && $_GET["q"]=="")
{
$aantaluploads=1;
}
//echo"Dit is de aantalupload test $aantal"
echo"Hoeveel foto's wil je uploaden? maximaal 20 per keer!<br>";
echo" <input type=\"text\" id=\"aantal2\" name=\"aantalknop\" value =\"$aantaluploads\" onClick=\"this.select()\">";
//echo" <input type=\"text\" id=\"aantal2\" name=\"aantalknop\" value =\"$aantaluploads\" onClick=\"this.select()\" onkeyup=\"aantalUpload(this.value)\">";
echo"<input type=\"submit\" onClick=\"aantalUpload(aantalknop)\" value=\"wijzigen\">";
?>
<br>
<br>
Upload Image
<br>
<?
if ($aantaluploads>20)
{
echo"Er mogen maximaal 20 foto's per keer geupload worden!!";
}
else
{
for ( $i = 1; $i <= $aantaluploads; $i += 1)
{
echo"<input type=\"file\" id=\"userfile[$i]\" name=\"userfile[$i]\">";
?>
<br>
<?
}
?>
<input type="submit" name="upload" value="Upload">
</form>
<?
}
?>
</div>
<?
$gebruiker=$_GET['gebruiker'];
$mapnaam=$_GET['ond'];
//$mapnaam="testKeet";
if ($_GET["q"]!=0)
{
$aantaluploads = $_GET["q"];
//echo"q=0";
}
else
{
$aantaluploads = $_POST["aantalknop"];
//echo("q is niet 0 q is $aantaluploads");
}
include("database.php");
$sql = "SELECT naam FROM fotoalbum WHERE map='$mapnaam'";
$resultaat = mysql_query($sql);
$aantal = mysql_num_rows($resultaat);
//verklein/upload gedeelte
if ($_POST['upload']){
$counter=0;
$test2 = $_POST["aantalknop"];
//echo"<br> uploaden is gestart $aantaluploads test2 = $test2 <br><br>";
//echo"Aantaluploads voor for loop = $aantaluploads test = $test";
for ( $ii = 1; $ii <= $aantaluploads; $ii += 1)
{
getimagesize($_FILES["userfile"]["tmp_name"][$ii]);
$imgsize = $_FILES["userfile"]["size"][$ii];
//echo"Aantaluploads = $aantaluploads II = $ii";
if ($imgsize == "0")
{
//$counter=$counter-1;
}
else
{
ini_set('max_execution_time', 120);
$naam= $aantal+1;
$filename = "fotoalbum/".$mapnaam."/".$naam."-thumb.jpg";
$filename1 = "fotoalbum/".$mapnaam."/".$naam.".jpg";
$img = $_FILES['userfile']['tmp_name'][$ii];
REGEL 56 ---> $original = ImageCreateFromJpeg($img);
$originalw = imagesx($original);
$originalh = imagesy($original);
$thumbh = 100;
$thumbw= 100;
// $neworgh = 548;
$neworgw = 700;
//thumbs
$thumbratio = ($originalh / $thumbh);
$thumbdest = imagecreatetruecolor($thumbw,$thumbh);
imagecopyresampled($thumbdest,$original,0,0,0,0,$thumbw,$thumbh,$originalw,$originalh);
imagejpeg($thumbdest,$filename,70);
//nieuwe orgineel
// $orgratio = ($originalh / $neworgh);
$orgratio = ($originalw / $neworgw);
// $orgw = ($originalw / $orgratio);
$orgh = ($originalh / $orgratio);
$orgdest = imagecreatetruecolor($neworgw,$orgh);
imagecopyresampled($orgdest,$original,0,0,0,0,$neworgw,$orgh,$originalw,$originalh);
// $orgdest = imagecreatetruecolor($orgw,$neworgh);
// imagecopyresampled($orgdest,$original,0,0,0,0,$orgw,$neworgh,$originalw,$originalh);
imagejpeg($orgdest,$filename1,70);
$mapnaam = addslashes($mapnaam);
$datum = date ("Y-m-d");
$tijd = date("G:i");
$sql = "INSERT INTO fotoalbum (map,naam,datum,tijd,toestand) VALUES ('$mapnaam','$naam','$datum','$tijd',1)";
mysql_query($sql) or die("Er is iets mis gegaan met de invoer");
if ($aantaluploads==1)
{
echo"De foto is geplaatst";
}
$aantal++;
$counter++;
}
}
if ($aantaluploads>1)
{
echo"Er zijn $counter foto's geplaatst";
}
?>
<br>
Klik <a href="?id=bekijkfotosnieuw&ond=<?php echo"$mapnaam";?>" class="fotoupload">
hier</a>
om naar de foto's te gaan<br>
<? echo"of om tekst toe te voegen"; ?><br>
<? echo"Je kan ook nog een foto in dezelfde map zetten";
}
?>
//verklein/upload gedeelte tot hier
</p>
<p>Hier kunnen foto's geupload worden</p>
<form name="upload" id="upload" ENCTYPE="multipart/form-data" method="post">
<?
if($aantaluploads==0 && $_GET["q"]=="")
{
$aantaluploads=1;
}
//echo"Dit is de aantalupload test $aantal"
echo"Hoeveel foto's wil je uploaden? maximaal 20 per keer!<br>";
echo" <input type=\"text\" id=\"aantal2\" name=\"aantalknop\" value =\"$aantaluploads\" onClick=\"this.select()\">";
//echo" <input type=\"text\" id=\"aantal2\" name=\"aantalknop\" value =\"$aantaluploads\" onClick=\"this.select()\" onkeyup=\"aantalUpload(this.value)\">";
echo"<input type=\"submit\" onClick=\"aantalUpload(aantalknop)\" value=\"wijzigen\">";
?>
<br>
<br>
Upload Image
<br>
<?
if ($aantaluploads>20)
{
echo"Er mogen maximaal 20 foto's per keer geupload worden!!";
}
else
{
for ( $i = 1; $i <= $aantaluploads; $i += 1)
{
echo"<input type=\"file\" id=\"userfile[$i]\" name=\"userfile[$i]\">";
?>
<br>
<?
}
?>
<input type="submit" name="upload" value="Upload">
</form>
<?
}
?>
</div>
Gewijzigd op 01/01/1970 01:00:00 door Keet
2) je zou kunnen maken met ajax of iets dergelijks dat de foto al ge-upload wordt van zodra hij geselecteerd wordt... dan kan je meteen al controleren of hij de gewenste formaten heeft of bestandsindeling... Daarna gaat de gebruiker gewoon door naar de volgende afbeelding. en op het einde gebeurt de post (let wel dan moeten de afbeeldingen niet meer ge-upload worden, dan gebeurt enkel nog de verdere verwerking...)
Maar in bovenstaande script worden in de loop toch ook achter elkaar de foto's geupload, of zie ik dit verkeerd?
Is het wel handig om het meteen te uploaden zodra de gebruiker het upload, voor als hij zich bedenkt en een andere foto wil uploaden en daarom wijzigt of iets dergelijks?
Zou je misschien een voorbeeldje kunnen geven of tip om het te doen zoals jij zegt dat het zal werken?
Je kan nu al je post aanpassen voor die code... klik op bovenaan naast de post die je wil editten...
Heb jij misschien een idee waarom hij opeens met die melding komt bij de upload van het 2e plaatje, het eerste plaatje wordt zonder problemen geupload.
Ik zeg net dat je zou moeten kijken om met AJAX ofzo ze elk apart te downloaden...