Bij het ontwikkelen van een website voor lokaal nieuws (112Marum.nl) heb ik een vreemd probleem ondervonden, waar ik geen verklaring voor heb. Ik ben geen expert, dus het zou iets simpels kunnen zijn. Ik hoop dat dit topic ook als naslag voor anderen kan dienen, en dus niet direct verwijderd wordt.
Het probleem is als volgt: De website heeft een beheersysteem, waar de beheerder nieuwsberichten met foto's kan toevoegen, wijzigen en verwijderen. Een foto-script zorgt ervoor dat maximaal 10 foto's per bericht worden ge-upload, verkleind naar het juiste formaat, en voorzien worden van een watermerk. Dit alles met enkele PHP-functies. Dit script werkte in principe prima bij het testen, maar er doet zich nu een vaag probleem voor: Het werkt soms wel, en soms niet. Wanneer er iets fout gaat, zijn foutmeldingen te zien zoals deze:
Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: '/hsphere/local/home/rnotenbo/112marum.nl/cms/uploads/img_5686.jpg' is not a valid JPEG file
Dit terwijl alle bestanden wél JPG-bestanden zijn, die vers van de digitale camera komen. De foto's zijn ongeveer 1 tot 3 megapixel groot, en dus ongeveer 500kb maximaal. Vaak werkt het bij een tweede poging wél! Ook nadat de foto's handmatig zijn verkleind naar een lagere resolutie, werkt het script vlekkeloos, maar dit is nu juist wat het script zelf zou moeten doen. Het kan dus te maken hebben met de hoeveelheid data die per upload verzonden wordt, of misschien met het feit dat de foto's onbewerkt van een camera afkomen (dat php die bestanden niet pikt). Het kan ook zijn dat de server vol is, maar dit lijkt me onwaarschijnlijk. Is er een makkelijke manier om dit te controleren?
Ik heb geen directe toegang tot de server. De PHP versie is 4.4.7 (phpinfo)
Alle hulp is welkom. Als er meer uitleg nodig is, dan geef ik dat graag.
Hier de relevante broncode. Dit deel is niet door mij geschreven, en volgens mij is het niet de meest moderne of correcte code:
Het probleem is als volgt: De website heeft een beheersysteem, waar de beheerder nieuwsberichten met foto's kan toevoegen, wijzigen en verwijderen. Een foto-script zorgt ervoor dat maximaal 10 foto's per bericht worden ge-upload, verkleind naar het juiste formaat, en voorzien worden van een watermerk. Dit alles met enkele PHP-functies. Dit script werkte in principe prima bij het testen, maar er doet zich nu een vaag probleem voor: Het werkt soms wel, en soms niet. Wanneer er iets fout gaat, zijn foutmeldingen te zien zoals deze:
Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: '/hsphere/local/home/rnotenbo/112marum.nl/cms/uploads/img_5686.jpg' is not a valid JPEG file
Dit terwijl alle bestanden wél JPG-bestanden zijn, die vers van de digitale camera komen. De foto's zijn ongeveer 1 tot 3 megapixel groot, en dus ongeveer 500kb maximaal. Vaak werkt het bij een tweede poging wél! Ook nadat de foto's handmatig zijn verkleind naar een lagere resolutie, werkt het script vlekkeloos, maar dit is nu juist wat het script zelf zou moeten doen. Het kan dus te maken hebben met de hoeveelheid data die per upload verzonden wordt, of misschien met het feit dat de foto's onbewerkt van een camera afkomen (dat php die bestanden niet pikt). Het kan ook zijn dat de server vol is, maar dit lijkt me onwaarschijnlijk. Is er een makkelijke manier om dit te controleren?
Ik heb geen directe toegang tot de server. De PHP versie is 4.4.7 (phpinfo)
Alle hulp is welkom. Als er meer uitleg nodig is, dan geef ik dat graag.
Hier de relevante broncode. Dit deel is niet door mij geschreven, en volgens mij is het niet de meest moderne of correcte code:
PHP: bericht_toevoegen.php
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
| /**************** Configuratie *****************/ $file_mimes = array('image/jpeg','image/jpg','image/gif','image/bmp'); // Toegestane bestand Mime Types. Voeg zonodig meer mime types toe. $file_exts = array('.jpg','.JPG','.gif'); // Toegestane bestand extensies. Voeg zonodig meer mime-types toe. $upload_dir ="/hsphere/local/home/rnotenbo/112marum.nl/cms/uploads/"; // Map waar alle uploads opgeslagen worden. (eindigend op "/") $aantal_u = "10"; // Aantal mogelijke uploads per keer $up_empty = ""; // Boodschap bij leeg uploadveld. $up_finish = "Gelukt"; // Boodschap bij Geslaagde upload. $up_fail = "<p>Er is een fout opgetreden bij het toevoegen van de foto('s). Mogelijke oorzaken:<BR>- Foto is niet van het bestandstype Jpg/Jpeg<BR>- Foto is groter dan 2 Mb</p>"; // Boodschap bij mislukte upload. $up_perm = "Veranderen van de permissies naar 777 is mislukt"; // Boodschap bij mislukken van veranderen permissies $url_dir = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']); $url_this = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; $upload_url = $url_dir."/".$upload_dir."/"; $nu = time(); if($aantal_u <11) { /********** Begin Controle En Upload **************/ for($x = 0; $x < $aantal_u; $x++) { $upfile = 'upfile_'.$x; $file_name = $_FILES[$upfile]['name']; $file_type = $_FILES[$upfile]['type']; $file_ext = strtolower(substr($file_name,strrpos($file_name,"."))); //echo "<b>Upload ".($x+1).":</b> "; if ($file_name != "" && $file_type != "") { if (!in_array($file_type, $file_mimes) && !in_array($file_ext, $file_exts)) { echo $up_fail."\n"; } else { $temp_name = $_FILES[$upfile]['tmp_name']; $file_name = $_FILES[$upfile]['name']; $file_name = str_replace("\\","",$file_name); $file_name = str_replace("'","",$file_name); $file_name = str_replace("%","_",$file_name); $file_name = str_replace("&","_",$file_name); $file_name = str_replace(";","",$file_name); $file_name = str_replace("%20","_",$file_name); $file_name = str_replace(" ","_",$file_name); $file_name = strtolower($file_name); //echo $filename; $file_path = $upload_dir.$file_name; //echo"pad = $file_path <BR>"; $result = move_uploaded_file($temp_name, $file_path); //einde uploadscript //start resize-script TJ define("SOURCE_DIR", $upload_dir); define("TARGET_DIR", $upload_dir); $formaat = getimagesize(SOURCE_DIR.$file_name); $fl_h = $formaat[0]; //Hoogte bepaald $fl_w = $formaat[1]; //Breedte bepaald if ($fl_h > $fl_w) { list($md_f, $md_w, $md_h) = resize($fl_w, $fl_h, 480); //Formaat MD bepaald } else { list($md_f, $md_w, $md_h) = resize($fl_w, $fl_h, 360); //Formaat MD bepaald } $src_img = imagecreatefromjpeg(SOURCE_DIR.$file_name); //Afbeelding ingelezen $dest_img = imagecreatetruecolor($md_h,$md_w); //Doel aangemaakt imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $md_h, $md_w, $fl_h, $fl_w); //Afbeelding geschaald $watermerk = imagecreatefrompng("uploads/watermerk.png"); $watermerk_width = imagesx($watermerk); $watermerk_height = imagesy($watermerk); imagecreatetruecolor($watermerk_width, $watermerk_height); // positie voor watermerk bepalen $xas = $md_h - $watermerk_width; $yas = $md_w - $watermerk_height; //--- overschrijf het 'geuploade bestand' en voeg watermerk toe imagecopymerge($dest_img, $watermerk, $xas, $yas, 0, 0, $watermerk_width, $watermerk_height, 100); $newfile = $file_name; $newfile = $nu.$newfile; imagejpeg($dest_img, TARGET_DIR.$newfile); //Afbeelding opgeslagen chmod(TARGET_DIR.$newfile, 0664); //chmod(TARGET_DIR."md_".$newfile, 0664); //Rechten goedgezet imagedestroy($src_img); //Geheugen geleegd imagedestroy($dest_img); //Geheugen geleegd imagedestroy($watermerk); //Geheugen geleegd |