2010-02-05 9 views
5

Ho un sistema con una pagina download.php. La pagina prende e id e carica un file basato sul record DB e lo serve. Ho notato un paio di casi in cui i file vengono richiesti più volte in brevi intervalli di tempo (20 ms). Tempi troppo rapidi per l'input umano. Ci sono molti casi in cui funziona correttamente il downloader. Tuttavia, nel dare un'occhiata più da vicino all'utilizzo del downloader, ho visto alcuni comportamenti interessanti.Apache/PHP file di servizio più volte

Ad esempio, l'indirizzo IP xxx.xxx.xxx.xxx (che è uno in un intervallo di proprietà di xxxxxx.de in Germania) è arrivato al sito tramite Google. Si guardarono intorno e poi arrivarono alla pagina http://site.com/xxxx/press+125.php Lì emisero una richiesta per /download.php?id=/ZZ/n+aH55Y= (un PDF) alle 9:04:23. Questo da solo non è un grosso problema. Tuttavia, ciò che è interessante è che il server sembra essere stato piuttosto preoccupato di servire quella richiesta. Nei registri la richiesta viene prima completata tra 9:09:48 e 9:10:00. Sembra che l'utente si sia stancato di aspettare durante quel periodo e ha richiesto il documento altre due volte. Tra le 09:14:47 e le 09:15:00 viene nuovamente visualizzata la stessa richiesta, tranne che dalle 9:04:43, 20 ms dopo la prima richiesta. Quindi si apre una terza volta, con una richiesta che è iniziata alle 09:05:06 che termina tra le 09:19:55 e le 09:19:58!

Sono sospettoso di questo documento. Guardando attraverso i log vedo altre istanze in cui il server impiega un po 'di tempo a gestire quel file specifico. Dai un'occhiata a questo elenco di richieste da zzz.zzz.zzz.zzz [diverso da sopra] per il file /download.php?id=/ZZ/n+aH55Y= (lo stesso docuemnt di prima):

Tempo di richiesta Tempo completo 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

Quindi qualcosa sta sicuramente accadendo. Se ha a che fare con questo documento specifico che fa scattare il server, il codice della pagina download.php, o se stiamo solo vedendo le prove di un sovraccarico a livello di server mentre si sviluppa in tempo reale, non sono ancora sicuro.

In tutta onestà, ci sono altre istanze di persone che scaricano /download.php?id=/ZZ/n+aH55Y= (lo stesso PDF) senza errori. Tuttavia, è interessante notare che i processi multipli sembrano solo accadere con questo unico file, e solo quando vi si accede tramite la pagina http://site.com/press+125.php. Sopporta ulteriori indagini se c'è qualcosa di sbagliato all'interno del codice che fa sì che il sistema spari più richieste di download che occupano il server.

Non so se questa pressa + 125.php è una tana di coniglio, ma c'è strana consolazione.

Qualche idea? Sono totalmente senza idee. Apache al massimo? Cose così.

///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

Hai guardato sul disco per vedere quanto è grande questo PDF? È significativamente più grande di qualsiasi altro file? Inoltre, sei su un server dedicato o hosting condiviso? – Paolo

+0

è all'incirca lo stesso. È una scatola dedicata. – easement

risposta

0

Utilizzare una rete CDN per il download di file. Lo gestiranno per te e in più forniranno larghezza di banda e scalabilità. Niente più lock up sul tuo server. http://www.reelseo.com/free-cdn-velocix/

+0

CDN non è un'opzione. Alcuni degli articoli sono riservati e riservati. Ho rimosso del codice che rileva l'autenticazione. Inoltre, c'è un amministratore sul posto per caricare i file. – easement

0
  1. Avete analizzato User-Agent e header Referer a richiesta HTTP?
  2. Perché non servire tutti i file statici da apache o qualsiasi altra cosa? Se si desidera tenere traccia delle statistiche di download di , è possibile eseguire un reindirizzamento dallo script in un file statico.
+0

C'è qualche tracciamento dell'autenticazione. C'è un colpo al DB che cerca il paese e la regione e poi lo scrive in un file di registro. Abbiamo bisogno di catturare chi sta scaricando i file. – easement

0

Aggiungi '% D% X' alla configurazione di registrazione - Mi aspetto che risponda a molte delle tue domande.

C.