2010-04-28 3 views
1

Sur un site Web, les utilisateurs peuvent télécharger des photos. Pour des raisons de sécurité, ils sont stockés en dehors du dossier webroot (public_html). Quand je dois montrer l'image, j'envoyer les en-têtes et avoir lu et sortie « readfile » les données d'image, comme si:Problème lors de l'affichage d'images stockées en dehors du dossier racine Web

header("Pragma: public"); 
header("Expires: 0"); // set expiration time 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 

header('Content-type: image/jpg'); 
header('Content-Length: ' . $filesize); 

readfile($path_url . '/' . $photo); 

Cela fonctionne très bien, mais le site est en croissance et cela commence à être fardeau sur le serveur. Question: existe-t-il un moyen d'envoyer les données de l'image ou de l'image à l'utilisateur, sans que le serveur doive d'abord charger l'image (évidemment, l'image étant encore stockée en dehors du dossier webroot)?

Merci!

David

+0

Pouvez-vous définir «charge» en chiffres, s'il vous plaît? –

+0

Je suis curieux ... pour quelles raisons de sécurité? Y a-t-il des photos que certains utilisateurs ne sont pas autorisés à voir? Sinon, si toutes les images sont visibles publiquement ... Je ne suis pas tout à fait sûr de ce que cela a. – mpen

+0

@col. scrapnel, je n'ai pas de chiffres durs j'ai peur. Mais il y a des problèmes de mémoire, le serveur devient lent, et des messages "Utilisation excessive des ressources". – David

Répondre

0

Pouvez-vous stocker les images dans une base de données SQL?

+1

Je suppose que je pourrais, mais actuellement il ya plus de 1 Go de fichiers images, et mysql est assez chargé aussi bien. Serait-ce vraiment une amélioration? – David

+1

Supposons qu'il le puisse. Et alors? –

+0

Il est peu probable que cela rende les choses plus vite. – Tom

0

Vous pouvez regarder dans mod_xsendfile, un module apache qui peut parfois être utile dans des situations comme la vôtre. Sinon, vous devrez peut-être envisager l'implémentation d'un serveur multimédia dédié.

+0

Comment ça aide? –

+0

Lemme finish ... – webbiedave

+0

Merci aussi à webbiedave, je vais aussi jeter un oeil à votre solution. – David

1

Si vos problèmes viennent vraiment de cet endroit et que vous ne pouvez pas utiliser la mise en cache HTTP, il existe une solution, un serveur web proxy. nginx avec X-Accel-Redirect ou lighttpd avec les en-têtes X-Sendfile

+0

merci Colonel, je vais regarder dans ce domaine. – David

Questions connexes