Bonjour à la communauté,

Je me tourne vers vous car je rencontre un problème de lenteur avec mon serveur et j'ai l'impression que c'est mon programme qui déconne et pas le serveur.

Je vous explique : J'ai développé un programme central qui est utilisé par les sites de mes clients pour faire tourner ces derniers. Les requêtes http sont centralisées autour d'un contrôleur frontal qui se charge du traitement de ces dernières en fonction de l'URL de la ressource demandée.

Pour diverses raisons j'ai voulu traiter les requêtes de fichiers de la même façon que les requêtes de pages web, avec des contrôleurs spécialisés.

J'ai donc créé un dossier spécial downloads contenant 5 contrôleurs dédiés qui sont les suivants :

  1. fichier.php
  2. flash.php
  3. images.php
  4. scripts.php
  5. styles.php


Le problème c'est que des fois j'ai l'impression que mon navigateur retélécharge en permanence les images, les scripts et tout le reste au lieu d'utiliser le cache. Pire, des fois j'ai un joli carré blanc avec une croix au milieu comme si l'image n'avait pas été trouvée. Idem pour les styles, des fois ça ne me télécharge pas les scripts alors que si je tape l'adresse directement ça fonctionne très bien. Le problème n'est pas permanent mais plutôt ponctuel et fortement récurrent.

Pourtant lorsque je tape l'URL de la ressource (par exemple une image), mon serveur me renvoie bien le fichier qui s'affiche dans mon navigateur ou que je peux télécharger (par exemple un script ou une feuille de styles).

Je vous donne le code du contrôleur pour le téléchargement d'images. La classe étendue "DownloadController" quand à elle ne possède qu'un constructeur qui se charge de créer la propriété "registry" qui est un tableau d'objets contenant des valeurs, dont entre autre le nom du dossier contenant le template utilisé par le site du client (et donc contenant aussi les images de ce template).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
42
43
44
45
46
47
48
49
final class Images extends DownloadController
{
    /**
     * Call parent's constructor
     */
    public function __construct()
    {
        parent::__construct();
    }
 
    /**
     * Default behaviour
     */
    public function index()
    {
        $this->load->helper( 'file' );
        $uri_string = str_replace( '/', DIRECTORY_SEPARATOR, $this->uri->uri_string );
        $directories = array( 'views/templates/common', 'views/templates/' . $this->registry['template_folder']->key_value );
 
        $path = pathinfo( FCPATH );
        $image = read_file( $path['dirname'] . $uri_string );
        $mime_type = get_mime_by_extension( $uri_string );
        if( $image )
        {
            $length = strlen( $image );
            $this->output->set_header( "Last-Modified: " . date('r') );
            $this->output->set_header( "Accept-Ranges: bytes" );
            $this->output->set_header( "Content-Length: $length" );
            $this->output->set_header( "content-type: $mime_type" );
            $this->output->set_output( $image );
        }
        else
        {
            foreach( $directories as $path )
            {
                if( $image = read_file( APPPATH . $path . $uri_string ) )
                {
                    $length = strlen( $image );
                    $this->output->set_header( "Last-Modified: " . date('r') );
                    $this->output->set_header( "Accept-Ranges: bytes" );
                    $this->output->set_header( "Content-Length: $length" );
                    $this->output->set_header( "content-type: $mime_type" );
                    $this->output->set_output( $image );
                    break;
                }
            }
        }
    }
}
Si le fichier n'est pas trouvé directement dans le répertoire racine du client ma variable image vaut "false" et on essaye de le télécharger à partir des chemins indiqués dans $directories. Dans les deux cas je génère les mêmes headers et je me demande si ça ne viendrait pas de ça.

Pour conclure, j'ai aussi l'impression que ce problème apparaît quand ma connexion est ralentie (par exemple lorsque je me connecte avec le PC avec un iPhone ou alors lorsque mon réseau est ralentis). Quoi qu'il en soit j'imagine ce que ça doit donner pour les clients utilisant une connexion adsl en 512K ou pire en 56K.

Merci de me donner votre avis et vos conseils.

Cordialement.