2010-02-05 5 views
5

J'ai un système avec une page download.php. La page prend et id et charge un fichier basé sur à partir de l'enregistrement DB, puis le sert. J'ai remarqué quelques cas où les fichiers sont demandés plusieurs fois dans de courtes périodes (20ms). Des temps qui sont trop rapides pour l'apport humain. Il y a beaucoup de cas où le téléchargeur fonctionne bien. Cependant, en regardant de plus près l'utilisation du téléchargeur, j'ai remarqué un comportement intéressant.Fichier de service Apache/PHP plusieurs fois

Par exemple, l'adresse IP xxx.xxx.xxx.xxx (qui appartient à une gamme appartenant à xxxxxx.de en Allemagne) est arrivée sur le site via Google. Ils ont parcouru autour et sont venus à la page http://site.com/xxxx/press+125.php Là ils ont émis une demande pour /download.php?id=/ZZ/n+aH55Y= (un pdf) à 9:04:23 AM. Cela seul n'est pas un gros problème. Cependant, ce qui est intéressant, c'est que le serveur semble avoir été très préoccupé par cette requête. Dans les journaux, la requête se termine d'abord entre 09:09:48 et 09:10:00. Il semble que l'utilisateur ait dû se lasser d'attendre pendant ce temps et a demandé le document deux fois de plus. Entre 09:14:47 et 09:15:00 la même requête réapparaît, sauf à partir de 09:04:43, 20ms plus tard que la première requête. Puis il apparaît une troisième fois, avec une demande qui a commencé à 09:05:06 complétant entre 09:19:55 et 09:19:58!

Je me méfie de ce document. En regardant à travers les journaux, je vois d'autres cas où le serveur prend un peu de temps pour gérer ce fichier spécifique. Consultez cette liste de demandes de zzz.zzz.zzz.zzz [différente de celle ci-dessus] pour le fichier /download.php?id=/ZZ/n+aH55Y= (le même document que précédemment):

Demande de temps Temps Complet 04:32:43 04:33:36 04:32:50 04:33:36 04:32:51 04:33:38 04:33:05 04:33:38 04:33 : 34 04:33:42 04:33:05 04:33:42

Donc, quelque chose se passe définitivement. Qu'il s'agisse de ce document spécifique triant le serveur, du code de la page download.php, ou si nous ne voyons que la preuve d'une surcharge au niveau du serveur alors qu'il se joue en temps réel, je ne suis pas encore sûr.

En toute justice, il existe d'autres exemples de personnes qui téléchargent /download.php?id=/ZZ/n+aH55Y= (le même PDF) sans erreur. Cependant, il est intéressant que les processus multiples semblent se produire avec ce seul fichier, et seulement quand il est accessible via la page http://site.com/press+125.php. Il est nécessaire d'examiner plus avant s'il y a quelque chose qui ne va pas dans le code qui fait que le système déclenche plusieurs demandes de téléchargement qui occupent le serveur.

Je ne sais pas si cette presse + 125.php est un trou de lapin, mais il y a une consistance étrange.

Des idées? Je suis totalement à court d'idées. Apache a atteint son maximum? Des choses comme ça.

///DOWNLOAD.php 
$file = new files(); 
$file->comparison_filter("id", "=", $id); //sql to load 
if ($file->load()) { 
    $file->serve(); 
} 


//FILES 
function serve() { 
     if ($this->is_loaded) { 
      if (file_exists($this->get_value("filename"))) { 
       if ($this->get_value("content_type") != "") { 
        header("Content-Type: " . $this->get_value("content_type")); 
       }  
       header("Content-Length: " . filesize($this->get_value("filename"))); 
       if ($this->get_value("flag_image") == 0 || $this->get_value("flag_image") == false) { 
        header("Cache-Control: private"); 
        header("Content-Disposition: attachment; filename=" . urlencode($this->get_value("original_filename"))); 
       } 

       set_time_limit(0); 
       @readfile($this->get_value("filename")); 

       exit; 
      } 
     } 
} 
+0

Avez-vous regardé sur le disque pour voir la taille de ce PDF? Est-ce beaucoup plus gros que tous les autres fichiers? Aussi, êtes-vous sur un serveur dédié ou un hébergement partagé? – Paolo

+0

c'est à peu près la même chose. C'est une boîte dédiée. – easement

Répondre

0

Utilisez un réseau CDN pour le téléchargement de fichiers. Ils vont gérer cela pour vous, et plus vous fournir de la bande passante et l'évolutivité. Plus de verrous sur votre serveur. http://www.reelseo.com/free-cdn-velocix/

+0

CDN n'est pas une option. Certains articles sont propriétaires et confidentiels. J'ai retiré un code qui détecte l'authentification. De plus, il y a un administrateur en place pour télécharger les fichiers. – easement

0
  1. Avez-vous analysé User-Agent et têtes Referer dans la requête HTTP? Pourquoi ne pas servir tous les fichiers statiques de Apache ou ce que vous avez? Si vous voulez suivre les statistiques de téléchargement de , vous pouvez faire une redirection de votre script vers un fichier statique.
+0

Il y a un suivi d'authentification. Il y a un hit sur la BD qui recherche le pays et la région, puis l'écrit dans un fichier journal. Nous devons aussi savoir qui télécharge les fichiers. – easement

0

Ajoutez '% D% X' à votre configuration de journalisation - Je pense que cela répondra à beaucoup de vos questions.

C.