Observação:esta solução é mais sobre desempenho do que solução rápida e finalmente terminei
Suponho que, como você está usando o memcache, você obtém seu conteúdo de um banco de dados MySQL, analisa-o em PHP e salva-o no cache e exibe-o.
Cada versão teria um domínio diferente. iPhone/Android (e outro smartphone) usará o
m.domain.com
domínio, tablets (iPad, galaxy etc...) usarão t.domain.com
, todos os outros usarão o.domain.com
e o padrão usará www.domain.com
ou domain.com
. Todos esses subdomínios podem apontar para a mesma pasta (
/var/www/
- o padrão). O que vai fazer o truque é como você o chama. Adicione esta sua configuração .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]
Então no seu arquivo PHP você pode usar o
$_GET['subdomain']
e decida o que você precisa fazer para gerar sua página. Desta forma, é muito fácil de manter, você tem 1 ponto de entrada e pode configurar regras em PHP para recuperar informações sobre o que você precisa exibir (o conteúdo será o mesmo, apenas o layout será alterado). Uma coisa que eu recomendo será otimizar seus arquivos. A versão mobile do seu site deve ser mais leve de alguma forma (CSS, Imagens, JS). Você não quer que seu usuário carregue CSS, JS e imagens grandes de um dispositivo móvel com uma rede lenta. Você deseja otimizar o máximo possível para dispositivos de rede mais lentos. Em outras palavras, você não deseja exibir um logotipo de 300 x 200 em um telefone flip de 176 x 220. Uma maneira será nomear seu arquivo com base no domínio em que ele está. Por exemplo:
- arquivo.css (4k) V.S. arquivo-m.css (0,4k)
- logo.jpg (300px * 300px 15k) V.S. logo-m.jpg (100px * 40px 2k)
E no seu código PHP você pode ter uma lógica para carregar dinamicamente arquivos JS, Imagens e CSS. Lembre-se de que quanto mais rápido você carregar seu site para dispositivos móveis, melhor ele será. A manutenção é importante, mas seus usuários também. Se você tem um site móvel lento, eles tendem a não ir ao seu site e ir para outro lugar. Nem todo mundo está usando rede 3G/4G ou WiFi em seu telefone. Além disso, recomendo usar a compactação de saída (como deflate ) quando quiser acessar seus arquivos.
Isso melhorará seu tempo de carregamento, especialmente para dispositivos móveis. Agora, se você usar o mesmo arquivo, digamos um arquivo Javascript para enviar uma carta de notícias, você não quer duplicá-lo nem copiá-lo com o nome. Em vez de criar uma lógica extra no seu PHP, você pode criar um link simbólico como este:
ln -s /var/www/js/file.js /var/www/js/file-m.js
Com esta solução, você precisará redirecionar para o site apropriado, dependendo do tipo de dispositivo usado. Você não quer que um flip phone visualize uma versão para iPhone do seu site. Aqui estão alguns truques que você pode fazer para conseguir isso:
// 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 na configuração .htaccess/apache no site padrão:
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...
Eu recomendo olhar para http://detectmobilebrowsers.com/ para descobrir o que você pode usar para os dispositivos móveis e consulte http://validator.w3.org /móvel/ para garantir que tudo pareça bom para o seu dispositivo móvel.
Quanto aos arquivos PHP comuns, recomendo usar um local centralizado, um caminho específico que você possa usar e o mundo exterior não. Você pode colocar todo esse código em uma pasta comum onde todos os sites podem acessar esses arquivos. Exemplo:
/web/lib/
Desta forma, ninguém, exceto você, pode acessar diretamente seus arquivos. No seu código PHP, você fará algo como (por exemplo, o script de login):
<?php
define('BASE_PATH', '/web/lib/');
require(BASE_PATH . 'filex.php');
// etc...