Leden van mijn website kunnen foto's uploaden die niet voor iedereen zichtbaar zijn. Bij het uploaden wordt er een nieuw record in de tabel 'pics' aangemaakt en wordt het bestand in de root gezet (folder: "verborgen_map"), dus onbereikbaar voor mensen zonder toegang tot de webserver.
Bij het bekijken van de foto wordt een check uitgevoerd of men ingelogd is, en zo ja, wordt de afbeelding getoond. Alle afbeeldingen worden aangeroepen via de file "generate_image.php", waarin de inloggegevens gechecked worden, en de foto getoond wordt. Dit script ziet er (gesimplificeerd, dus alle foutdetectie eruit), zo uit:
Functioneel gezien werkt het prima, maar het laden van de foto's kan erg lang duren. Hoe zou ik bovenstaand script kunnen aanpassen zodat de boel wat beter performt?
Bij het bekijken van de foto wordt een check uitgevoerd of men ingelogd is, en zo ja, wordt de afbeelding getoond. Alle afbeeldingen worden aangeroepen via de file "generate_image.php", waarin de inloggegevens gechecked worden, en de foto getoond wordt. Dit script ziet er (gesimplificeerd, dus alle foutdetectie eruit), zo uit:
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
| <?php //fotogegevens uit database ophalen $sql_pic = "SELECT id, extension, filesize FROM tabel WHERE id = '".$_GET['id']."'"; if($var_pic = mysql_query($sql_pic)) { while($pic = mysql_fetch_object($var_pic)) { //locatie van bestand definieeren $pic_location = "verborgen_map/".$pic->id.".".$pic->extension.""; if(file_exists($pic_location)) { $fp = fopen($pic_location, "rb"); //header bepalen op basis van extensie if($pic_info['extension'] == "gif") { header("Content-Type: image/gif"); } elseif($pic_info['extension'] == "png") { header("Content-Type: image/png"); } else { header("Content-Type: image/jpeg"); } header("Content-Length: ".$pic->filesize.""); header("Content-Transfer-Encoding: binary\n"); fpassthru($fp); exit; } } } else { echo mysql_error(); } ?> |
Functioneel gezien werkt het prima, maar het laden van de foto's kan erg lang duren. Hoe zou ik bovenstaand script kunnen aanpassen zodat de boel wat beter performt?