Problemen met upload script meerdere foto's

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Keet

keet

05/01/2008 15:54:00
Quote Anchor link
Hallo,

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)
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
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>
Gewijzigd op 01/01/1970 01:00:00 door Keet
 
PHP hulp

PHP hulp

28/04/2024 02:16:47
 
Hipska BE

Hipska BE

05/01/2008 16:00:00
Quote Anchor link
1) als je html en php door elkaar post gebruik dan <html> ...

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...)
 
Keet

keet

05/01/2008 16:05:00
Quote Anchor link
Zal de volgende keer aan die code tag denken.

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?
 
Hipska BE

Hipska BE

05/01/2008 16:08:00
Quote Anchor link
bij de verdere verwerking zou je dan kunnen kijken welke foto's verwijderd moeten worden of niet, ivm veranderen van gedacht

Je kan nu al je post aanpassen voor die code... klik op Afbeelding bovenaan naast de post die je wil editten...
 
Keet

keet

05/01/2008 16:16:00
Quote Anchor link
Als ik dan alles in 1 keer zal uploaden zal hij toch ook de melding geven van een te kort memory of zie ik dat verkeerd?
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.
 
Hipska BE

Hipska BE

05/01/2008 16:26:00
Quote Anchor link
omdat ze bij jou allemaal tegelijk verzonden worden waarschijnlijk...

Ik zeg net dat je zou moeten kijken om met AJAX ofzo ze elk apart te downloaden...
 



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.