Opmerking:deze oplossing gaat meer over prestaties dan over snelle oplossing en ik ben eindelijk klaar
Ik neem aan dat je, aangezien je memcache gebruikt, je inhoud uit een MySQL-database haalt, deze vervolgens in PHP ontleden en in de cache opslaat en weergeeft.
Elke versie zou een ander domein hebben. iPhone/Android (en andere smartphones) gebruiken de m.domain.com
domein, tablets (iPad, galaxy etc...) gebruiken t.domain.com
, alle anderen gebruiken o.domain.com
en de standaard gebruikt www.domain.com
of domain.com
.
Al deze subdomeinen kunnen naar dezelfde map verwijzen (/var/www/
- de standaard). Wat het zal doen, is hoe je het noemt.
Voeg dit toe aan uw .htaccess- of apache-configuratie:
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]
Dus in je PHP-bestand kun je de $_GET['subdomain']
. gebruiken en beslis wat u moet doen om uw pagina te genereren. Op deze manier is het heel gemakkelijk te onderhouden, heb je 1 toegangspunt en kun je regels instellen in PHP om informatie op te halen over wat je moet weergeven (de inhoud zal hetzelfde zijn, alleen de lay-out zal veranderen).
Een ding dat ik aanbeveel, is om uw bestanden te optimaliseren. De mobiele versie van uw site moet op een of andere manier lichter zijn (CSS, Afbeeldingen, JS). U wilt niet dat uw gebruiker grote CSS, JS en afbeeldingen laadt vanaf een mobiel apparaat met een traag netwerk. U wilt zoveel mogelijk optimaliseren voor een langzamer netwerkapparaat. Met andere woorden, u wilt geen 300x200-logo weergeven op een 176x220 flip-telefoonapparaat. Een manier is om uw bestand een naam te geven op basis van het domein waarin ze zich bevinden. Bijvoorbeeld:
- file.css (4k) V.S. file-m.css (0.4k)
- logo.jpg (300px * 300px 15k) V.S. logo-m.jpg (100px * 40px 2k)
En in uw PHP-code kunt u een logica hebben om JS-, afbeeldingen- en CSS-bestanden dynamisch te laden. Vergeet niet dat hoe sneller u uw mobiele site laadt, hoe beter deze is. Onderhoud is belangrijk, maar uw gebruikers ook. Als je een trage mobiele site hebt, zullen ze geneigd zijn om niet naar je site te gaan en ergens anders heen te gaan. Niet iedereen gebruikt het 3G/4G-netwerk of wifi op zijn telefoon. Ik raad ook aan om uitvoercompressie te gebruiken (zoals deflate ) wanneer u toegang wilt tot uw bestanden.
Dit zal uw laadtijd verbeteren, vooral voor de mobiele apparaten. Als u nu de dezelfde . gebruikt bestand, laten we zeggen een Javascript-bestand voor het indienen van een nieuwsbrief, u wilt het niet dupliceren of kopiëren met de naam. In plaats van een extra logica in je PHP te maken, kun je een symbolische link als volgt maken:
ln -s /var/www/js/file.js /var/www/js/file-m.js
Met deze oplossing moet u omleiden naar de juiste site, afhankelijk van het type apparaat dat ze gebruiken. U wilt niet dat een flip-telefoon een iPhone-versie van uw site bekijkt. Hier zijn een paar trucjes die je kunt doen om dit te bereiken:
// 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();
}
OF in de .htaccess/apache-configuratie onder de standaardsite:
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...
Ik raad aan om te kijken naar http://detectmobilebrowsers.com/ om erachter te komen wat u kunt gebruiken voor de mobiele apparaten en u kunt kijken op http://validator.w3.org /mobiel/ om ervoor te zorgen dat alles er goed uitziet voor uw mobiele apparaat.
Wat betreft de gebruikelijke PHP-bestanden, raad ik aan om een gecentraliseerde plaats te gebruiken, een specifiek pad dat u kunt gebruiken en de buitenwereld niet. U kunt al deze code in een gemeenschappelijke map plaatsen waar alle sites toegang hebben tot deze bestanden. Voorbeeld:
/web/lib/
Op deze manier heeft niemand, behalve u, rechtstreeks toegang tot uw bestanden. In je PHP-code doe je zoiets als (bijvoorbeeld het inlogscript):
<?php
define('BASE_PATH', '/web/lib/');
require(BASE_PATH . 'filex.php');
// etc...