Remarque :cette solution est plus une question de performances qu'une solution rapide et j'ai enfin terminé
Je suppose que puisque vous utilisez Memcache, vous récupérez votre contenu à partir d'une base de données MySQL, puis analysez-le en PHP, enregistrez-le dans le cache et affichez-le.
Chaque version aurait un domaine différent. iPhone/Android (et autre smartphone) utilisera le m.domain.com
domaine, les tablettes (iPad, galaxy etc...) utiliseront t.domain.com
, tous les autres utiliseront o.domain.com
et la valeur par défaut utilisera www.domain.com
ou domain.com
.
Tous ces sous-domaines peuvent pointer vers le même dossier (/var/www/
- celui par défaut). Ce qui fera l'affaire, c'est comment vous l'appelez.
Ajoutez ceci à votre configuration .htaccess ou apache :
SetEnvIf Host ^www\. page=www
SetEnvIf Host ^o\. page=others
SetEnvIf Host ^m\. page=mobile
SetEnvIf Host ^t\. page=tablets
rewriterule ^.*$ index.php?subdomain=%{ENV:page} [QSA,L]
Ainsi, dans votre fichier PHP, vous pouvez utiliser le $_GET['subdomain']
et décidez ce que vous devez faire pour générer votre page. De cette façon, il est très facile à maintenir, vous avez 1 point d'entrée et vous pouvez configurer des règles en PHP pour récupérer des informations sur ce que vous devez afficher (le contenu sera le même, seule la mise en page changera).
Une chose que je recommande sera d'optimiser vos fichiers. La version mobile de votre site ne doit en aucun cas être plus légère (CSS, Images, JS). Vous ne voulez pas que votre utilisateur charge de gros CSS, JS et images à partir d'un appareil mobile avec un réseau lent. Vous souhaitez optimiser autant que possible les périphériques réseau plus lents. En d'autres termes, vous ne souhaitez pas afficher un logo 300 x 200 sur un téléphone à clapet 176 x 220. Une façon sera de nommer votre fichier en fonction du domaine dans lequel il se trouve. Par exemple :
- fichier.css (4k) V.S. fichier-m.css (0.4k)
- logo.jpg (300px * 300px 15k) V.S. logo-m.jpg (100px * 40px 2k)
Et dans votre code PHP, vous pouvez avoir une logique pour charger dynamiquement les fichiers JS, Images et CSS. N'oubliez pas que plus vous chargez rapidement votre site mobile, mieux c'est. La maintenabilité est importante, mais vos utilisateurs le sont aussi. Si vous avez un site mobile lent, ils auront tendance à ne pas accéder à votre site et à aller ailleurs. Tout le monde n'utilise pas le réseau 3G/4G ou le WiFi sur son téléphone. De plus, je recommande d'utiliser la compression de sortie (comme deflate ) lorsque vous souhaitez accéder à vos fichiers.
Cela améliorera votre temps de chargement, spécialement pour les appareils mobiles. Maintenant, si vous utilisez le même fichier, disons un fichier Javascript pour soumettre une newsletter, vous ne voulez pas le dupliquer ni le copier avec le nom. Au lieu de créer une logique supplémentaire dans votre PHP, vous pouvez créer un lien symbolique comme celui-ci :
ln -s /var/www/js/file.js /var/www/js/file-m.js
Avec cette solution, vous devrez rediriger vers le site approprié en fonction du type d'appareil qu'ils utilisent. Vous ne voulez pas qu'un téléphone à clapet visualise une version iPhone de votre site. Voici quelques astuces que vous pouvez utiliser pour y parvenir :
// PHP version - also make sure the current domain is checked otherwise you will be in an infinite loop!
if(strpos($_SERVER['HTTP_USER_AGENT'],'iPhone') !== FALSE || strpos($_SERVER['HTTP_USER_AGENT'],'Android') !== FALSE)
{
header('Location: http://m.domain.com/');
exit();
}
OU dans la configuration .htaccess/apache sous le site par défaut :
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "iphone|android" [NC]
RewriteCond %{HTTP_HOST} !^mobile.domain.com
RewriteRule ^(.*)$ http://m.domain.com/ [L,R=301] # or 302 if you want temporary
# etc...
Je recommande de regarder http://detectmobilebrowsers.com/ pour savoir ce que vous pouvez utiliser pour les appareils mobiles et vous pouvez vérifier http://validator.w3.org /mobile/ pour vous assurer que tout semble bon pour votre appareil mobile.
En ce qui concerne les fichiers PHP courants, je recommanderai d'utiliser un emplacement centralisé, un chemin spécifique que vous pouvez utiliser et que le monde extérieur ne peut pas. Vous pouvez mettre tout ce code dans un dossier commun où tous les sites peuvent accéder à ces fichiers. Exemple :
/web/lib/
De cette façon, personne, sauf vous, ne peut accéder directement à vos fichiers. Dans votre code PHP, vous ferez quelque chose comme (par exemple le script de connexion) :
<?php
define('BASE_PATH', '/web/lib/');
require(BASE_PATH . 'filex.php');
// etc...