Pergunta

Eu preciso encontrar a resolução de tela de uma tela dos usuários que visitam meu site?

Foi útil?

Solução

Você não pode fazê-lo com PHP puro. Você deve fazê-lo com JavaScript. Existem vários artigos escritos sobre como fazer isso.

Essencialmente, você pode definir um cookie ou você mesmo pode fazer alguma Ajax para enviar as informações para um script PHP. Se você usar o jQuery, você pode fazê-lo algo como isto:

jQuery:

$(function() {
    $.post('some_script.php', { width: screen.width, height:screen.height }, function(json) {
        if(json.outcome == 'success') {
            // do something with the knowledge possibly?
        } else {
            alert('Unable to let PHP know what the screen resolution is!');
        }
    },'json');
});

PHP (some_script.php)

<?php
// For instance, you can do something like this:
if(isset($_POST['width']) && isset($_POST['height'])) {
    $_SESSION['screen_width'] = $_POST['width'];
    $_SESSION['screen_height'] = $_POST['height'];
    echo json_encode(array('outcome'=>'success'));
} else {
    echo json_encode(array('outcome'=>'error','error'=>"Couldn't save dimension info"));
}
?>

Tudo o que é realmente básico, mas deverá fazê-lo em algum lugar. resolução de tela, normalmente, não é o que você realmente quer embora. Você pode estar mais interessado no tamanho da porta de visualização do navegador da real uma vez que é realmente onde a página é processada ...

Outras dicas

Diretamente com PHP não é possível, mas ...

Eu escrevo este código simples para salvar a resolução da tela em uma sessão PHP para uso em uma galeria de imagens.

<?php
session_start();
if(isset($_SESSION['screen_width']) AND isset($_SESSION['screen_height'])){
    echo 'User resolution: ' . $_SESSION['screen_width'] . 'x' . $_SESSION['screen_height'];
} else if(isset($_REQUEST['width']) AND isset($_REQUEST['height'])) {
    $_SESSION['screen_width'] = $_REQUEST['width'];
    $_SESSION['screen_height'] = $_REQUEST['height'];
    header('Location: ' . $_SERVER['PHP_SELF']);
} else {
    echo '<script type="text/javascript">window.location = "' . $_SERVER['PHP_SELF'] . '?width="+screen.width+"&height="+screen.height;</script>';
}
?>

PHP é uma linguagem do lado do servidor - ele é executado somente no servidor, e a saída do programa resultante é enviado para o cliente. Como tal, não há nenhuma informação "tela do cliente" disponível.

Dito isso, você pode ter o cliente dizer-lhe que a sua resolução de tela é através de JavaScript. Escreva um pequeno scriptlet para lhe enviar screen.width e Screen.Height - possivelmente via AJAX, ou mais provavelmente com um "salto de página" inicial que encontra, em seguida, redireciona para http://example.net/index.php?size=AxB

Embora falando como um usuário, eu prefiro muito mais que você crie um site para alça fluidamente qualquer resolução de tela. I navegar em diferentes janelas de tamanho, principalmente não maximizado.

Este é um processo muito simples. Sim, você não pode obter a largura e altura em PHP. É verdade que JQuery pode fornecer largura e altura da tela. Primeiro, vá para https://github.com/carhartl/jquery-cookie e obter jquery.cookie js. Aqui está um exemplo usando php para obter a largura da tela e altura:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Test</title>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
        <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
        <script src="js/jquery.cookie.js"></script>
        <script type=text/javascript>
            function setScreenHWCookie() {
                $.cookie('sw',screen.width);
                $.cookie('sh',screen.height);
                return true;
            }
            setScreenHWCookie();
        </script>
    </head>
    <body>
        <h1>Using jquery.cookie.js to store screen height and width</h1>
    <?php
         if(isset($_COOKIE['sw'])) { echo "Screen width: ".$_COOKIE['sw']."<br/>";}
         if(isset($_COOKIE['sh'])) { echo "Screen height: ".$_COOKIE['sh']."<br/>";}
    ?>
    </body>
    </html>

Eu tenho um teste que você pode executar: http://rw-wrd.net/test.php

Use JavaScript (screen.width e screen.height IIRC, mas posso estar errado, não fiz JS em quando). PHP não pode fazê-lo.

Eu encontrei usando CSS dentro do meu html dentro do meu php fez o truque para mim.

<?php             
    echo '<h2 media="screen and (max-width: 480px)">'; 
    echo 'My headline';
    echo '</h2>'; 

    echo '<h1 media="screen and (min-width: 481px)">'; 
    echo 'My headline';
    echo '</h1>'; 

    ?>

A saída será um título de tamanho menor, se a tela é 480px ou menos. Portanto, não há necessidade de passar qualquer vars usando JS ou similar.

Você pode tentar RESS (componentes de design colaterais + Servidor Alternada), veja este tutorial:

http://www.lukew.com/ff/entry.asp?1392

Eu não acho que você pode detectar o tamanho da tela puramente com PHP, mas você pode detectar o user-agent ..

<?php
    if ( stristr($ua, "Mobile" )) {
        $DEVICE_TYPE="MOBILE";
    }

    if (isset($DEVICE_TYPE) and $DEVICE_TYPE=="MOBILE") {
        echo '<link rel="stylesheet" href="/css/mobile.css" />'
    }
?>

Aqui está um link para um roteiro mais detalhado: PHP Móvel Detectar

Totalmente Exemplo de Trabalho

Eu não poderia encontrar um exemplo PHP real de trabalho para "invisível" (sem parâmetros de URL) retorno tamanho da tela cliente , e outras propriedades, para PHP do lado do servidor , então eu coloquei este exemplo juntos.

povoa JS e apresenta uma forma escondida (escrito por PHP a partir de uma matriz de propriedades JS), POSTing a si mesma (os dados agora disponíveis em PHP) e devolve os dados de uma tabela.

(Testado em "vários" browsers.)

<!DOCTYPE html>
<html>
<head>
    <title>*Client Info*</title>
    <style>table,tr{border:2px solid gold;border-collapse:collapse;}td{padding:5px;}</style>
</head>

<body>
<?php
  $clientProps=array('screen.width','screen.height','window.innerWidth','window.innerHeight', 
    'window.outerWidth','window.outerHeight','screen.colorDepth','screen.pixelDepth');

  if(! isset($_POST['screenheight'])){

    echo "Loading...<form method='POST' id='data' style='display:none'>";
    foreach($clientProps as $p) {  //create hidden form
      echo "<input type='text' id='".str_replace('.','',$p)."' name='".str_replace('.','',$p)."'>";
    }
    echo "<input type='submit'></form>";

    echo "<script>";
    foreach($clientProps as $p) {  //populate hidden form with screen/window info
      echo "document.getElementById('" . str_replace('.','',$p) . "').value = $p;";
    }
    echo "document.forms.namedItem('data').submit();"; //submit form
    echo "</script>";

  }else{

    echo "<table>";
    foreach($clientProps as $p) {   //create output table
      echo "<tr><td>".ucwords(str_replace('.',' ',$p)).":</td><td>".$_POST[str_replace('.','',$p)]."</td></tr>";
    }
    echo "</table>";
  }
?>
<script>
    window.history.replaceState(null,null); //avoid form warning if user clicks refresh
</script>
</body>
</html>

Os dados retornados é extract 'd em variáveis. Por exemplo:

  • window.innerWidth é devolvido em $windowinnerWidth

A única maneira é usar javascript, então, fazer o javascript para postá-lo para o seu php (se você realmente precisa lá res lado do servidor). Este será, no entanto completamente cair de cara no chão, se desligar o JavaScript.

JS:

$.ajax({
    url: "ajax.php",
    type: "POST",
    data: "width=" + $("body").width(),
    success: function(msg) {

        return true;
    }
});

ajax.php

if(!empty($_POST['width']))
    $width = (int)$_POST['width'];

Isto pode ser feito facilmente usando cookies. Este método permite que a página para verificar os valores de cookies armazenados contra a altura da tela e largura (ou navegador altura porto vista e valores de largura), e se eles são diferentes que irá redefinir o cookie e recarregue a página. O código precisa para permitir preferências do usuário. Se os cookies persistentes são desligados, use um cookie de sessão. Se isso não funcionar, você tem que ir com uma configuração padrão.

  1. Javascript: Verifique se a altura e conjunto de cookies de largura
  2. Javascript: Se configurado, verificar se Screen.Height & screen.width (ou o que quiser) corresponde ao valor atual do cookie
  3. Javascript: Se cookie não definir ou não corresponder ao valor atual, então: uma. Javascript: criar cookie persistente ou sessão chamado (por exemplo) 'shw' a valor presente de Screen.Height & screen.width atual
    . b. Javascript: redirecionamento para AUTO usando window.location.reload (). Quando se recarrega, vai pular a etapa 3.
  4. PHP: $ _COOKIE [ 'shw'] contém valores.
  5. Continue com PHP

por exemplo., Estou usando algumas funções de cookies comuns encontrados na web. Certifique-se de SetCookie retorna os valores corretos. Eu coloquei este código imediatamente após a tag cabeça. Obviamente, a função deve estar em um arquivo de origem a.

<head>
<script src="/include/cookielib.js"></script>
<script type=text/javascript>
function setScreenHWCookie() {
    // Function to set persistant (default) or session cookie with screen ht & width
    // Returns true if cookie matches screen ht & width or if valid cookie created
    // Returns false if cannot create a cookies.
    var ok  = getCookie( "shw");
    var shw_value = screen.height+"px:"+screen.width+"px";
    if ( ! ok || ok != shw_value ) {
        var expires = 7 // days
        var ok = setCookie( "shw", shw_value, expires)
        if ( ok == "" ) {
            // not possible to set persistent cookie
            expires = 0
            ok = setCookie( "shw", shw_value, expires)
            if ( ok == "" ) return false // not possible to set session cookie
        }
        window.location.reload();
    }
    return true;
}
setScreenHWCookie();
</script>
....
<?php
if( isset($_COOKIE["shw"])) {
    $hw_values = $_COOKIE["shw"];
}

Você pode definir a largura da janela de cookies usando JS na extremidade dianteira e você pode obtê-lo em PHP:

<script type="text/javascript">
   document.cookie = 'window_width='+window.innerWidth+'; expires=Fri, 3 Aug 2901 20:47:11 UTC; path=/';
</script>

<?PHP
    $_COOKIE['window_width'];
?>

A resposta rápida não é, então provavelmente você está perguntando por que eu não posso fazer isso com php. OK aqui está uma resposta mais longa. PHP é uma linguagem de script serverside e por isso não tem nada a ver com o tipo de um cliente específico. Então você pode perguntar "por que então eu posso obter o agente navegador a partir de php?", Isso é porque essa informação é enviada com os cabeçalhos HTTP iniciais mediante solicitação para o servidor. Então, se você deseja obter informações do cliente que não é enviado com o cabeçalho HTTP você deve-lhe uma linguagem de script cliente como javascript.

Em PHP não há nenhuma maneira padrão para obter esta informação. No entanto, é possível se você estiver usando uma solução 3o partido. detector dispositivo 51Degrees para PHP tem as propriedades que você precisa:

Dá-lhe largura e altura da tela do usuário em pixels. Para utilizar essas propriedades que você precisa para fazer o download do detector de sourceforge . Em seguida, você precisa incluir as seguintes 2 linhas no seu arquivo / arquivos onde é necessário detectar a altura da tela e largura:

<?php
require_once 'path/to/core/51Degrees.php';
require_once 'path/to/core/51Degrees_usage.php';
?>

Onde path / to / núcleo é caminho para o diretório 'Core', que você baixou a partir do SourceForge. Finalmente, para usar as propriedades:

<?php
echo $_51d['ScreenPixelsHeight']; //Output screen height.
echo $_51d['ScreenPixelsWidth']; //Output screen width.
?>

Tenha em mente essas variáveis ??podem conter valor 'Desconhecido' algumas vezes, quando o dispositivo não pôde ser identificado.

solução: fazer web design escalável ... (nosso eu deveria dizer web design adequado) a formatação deve ser do lado do cliente feito e eu fiz desejar a informação seria transmitida ao servidor, mas a informação ainda é útil (como muitos objeto per linhas tipo de negócio), mas ainda web design deve ser fluido, assim, cada elementos de linha não deve ser colocado em mesas a menos que seu uma tabela real (e os dados serão dimensionados à sua células individuais) se você usar um div você pode empilhar cada elemento ao lado o outro e sua janela deve "quebrar" a linha no local adequado. (Só precisa css adequada)

PHP funciona apenas no lado do servidor, não no host do usuário. Use JavaScript ou jQuery para obter esta informação e enviar via AJAX ou URL (? X = 1024 & y = 640).

A maneira mais fácil

<?php 
//-- you can modified it like you want

echo $width = "<script>document.write(screen.width);</script>";
echo $height = "<script>document.write(screen.height);</script>";

?>
<script type="text/javascript">

if(screen.width <= 699){
    <?php $screen = 'mobile';?>
}else{
    <?php $screen = 'default';?>
}

</script>

<?php echo $screen; ?> 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top