2013-08-07 3 views
3

사용자가 페이지를 방문 할 때 화면과 뷰포트의 높이/너비를 PHP로 가져 오려고합니다.첫로드시 PHP에서 사용자 화면 및 뷰포트 크기 가져 오기

나는 여러 가지 방법을 시도했지만 모두 다른 문제를 일으 킵니다.

내 목표 :

  • 가 첫 번째로드에 대한 정보 (NO 점프 페이지, 아니 다시로드)를 가져옵니다.

  • 로드에서 실행되는 PHP의 나머지 부분에 영향을 미치지 URL을 변경하거나 두 번

내가 지금까지 시도했습니다 무슨 PHP 실행하지 :

뷰포트 가져 오기위한 자바 스크립트 :

if(!isset($_POST['width']) || !isset($_POST['height'])) { 
echo ' 
<script type="text/javascript" src="jquery.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function() { 
    var height = $(window).height(); 
    var width = $(window).width(); 
    $.ajax({ 
     type: \'POST\', 
     data: { 
      "height": height, 
      "width": width 
     }, 
     success: function (data) { 
      $("body").html(data); 
     }, 
    }); 
}); 
</script> 
'; 
} 

$user_width = $_POST['width']; 
$user_height = $_POST['height']; 

문제 : 모든 PHP가 두 번,로드시 한 번, 한 번 값을 반환 할 때 (두 번째 시간은 첫 번째 이후 약 4 초), PHP의 나머지 부분을 엉망이되게 만듭니다 ... 또한 페이지를 매우로드하게 만듭니다.

if(isset($_SESSION['screen_width']) AND isset($_SESSION['screen_height'])){ 
    $user_width = $_SESSION['screen_width']; 
    $user_height = $_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>'; 
    } 

문제 : 다음 URL로 화면 크기를 퍼팅

을 느리게 변경 URL을 (다른 코드에 영향을 미치는 그들이 지금이 무표정 URL에 비해 나쁜 보이는); 뷰포트 크기를 반환하지 않습니다 afaik

저는 멍청 해요. 어쩌면하는 것이 쉽지만 실제로는 잘 모릅니다. 나는 많은 것을 수색했다. 그것이 위의 방법을 얻은 방법입니다. 그러나 나는 그들이 나를 위해 일하도록 할 수 없었다. Afaik, 나는 비슷한 상황에 대한 해결책을 보지 못했습니다.

감사합니다 :)

+0

불가능합니다. 너 한테 묻는대로해라. PHP는 서버 측을 실행합니다. 사용자의 브라우저에서 실행되는 javascript로 원하는 것을 성취 할 수 있습니다. – andrew

+0

예. 나는 PHP가 서버 측이라고 이해한다. 그래서 내가 문제가 생겼다. 위에서 보여준 것처럼 자바 스크립트를 사용하여 치수를 가져 와서 PHP에 게시했습니다. 그것은 작동하지만 모든 php를 다시 실행하는 문제가 발생합니다 (내 사이트에서 두 번 출력, 엉뚱한 결과 등이 발생합니다). 어쩌면 내가하는 일보다 자바 스크립트에서 PHP로 게시하는 더 좋은 방법이 있을까요? 고마워. – kenji359

답변

3

문서 작성 준비 방법 AJAX 요청은 별도의 PHP 문서로 전송 한 다음 페이지로드 헤드에 해당 내용을 포함시킵니다. 그렇게하면,로드 할 특정 HTML을 준비 할 때 몸에 곧바로 넣을 수 있습니다.

<head> 
<script> 
$(document).ready(function() { 
    var height = $(window).height(); 
    var width = $(window).width(); 
    $.ajax({ 
     url: 'body.php', 
     type: 'post', 
     data: { 'width' : width, 'height' : height, 'recordSize' : 'true' }, 
     success: function(response) { 
      $("body").html(response); 
     } 
    }); 
}); 
</script> 
</head> 
<body></body> 

다음 body.php 파일과 같이 보일 것이다 : JS 기능은 모든 페이지로드를 실행하는 것을 당신이 다음하지 않은 경우

<?php 
if(isset($_POST['recordSize'])) { 
$height = $_POST['height']; 
$width = $_POST['width']; 
$_SESSION['screen_height'] = $height; 
$_SESSION['screen_width'] = $width; 
//Any html you want returned in here 

것은 그냥 싸는를 예를 들어

전체 내용은 <?php if(isset($_SESSION['screen_height'])) { //JS function } ?>

일단 내가 갖고있는 치수와 관련하여 무엇을하려했는지 확신 할 수는 없으므로 답변이 불만 인 경우 사과드립니다. 르 막연하지만, 이렇게하면 페이지는이 브라우징 세션을 처음 방문했을 때 저장 한 치수 만 설정하고 리디렉션 할 필요가 없으므로 조금만 도움이 되었기를 바랍니다.

+0

사이트는 방문자와 방문자의 활동 등을 기록합니다.이 질문은 모든 방문자의 화면 및 뷰포트 차원을 기록에 포함하기를 원하기 때문입니다. 죄송합니다 명확하지 않았습니다 ... 나는 당신의 솔루션으로 연주. 나는 여전히 두 번 문제를 겪는다. 나는 아마 뭔가를 놓친거야? 스크립트는 사이트에서 약 100 페이지를 계속합니다. 모든 페이지의 모든 방문자를 기록합니다. 문제는 스크립트가 두 번 실행되므로 모든 방문자가 두 번 계산됩니다 ... 감사합니다 – kenji359

+0

페이지에 제출하는 코드가 있습니까? 필자가 제안한 코드는 완전히 비동기 적이어야하지만 현재 페이지가 실행되는 동안 새로 고침/제출하는 항목은 중지되지 않습니다. 나는 AJAX 호출에서 닫는'});을 놓쳤다.하지만 페이지 새로 고침에 영향을 미치지 않아야한다. – Matt

+0

당신의 아이디어가 효과적이다 : 별도의 PHP 문서로 분할 한 다음 screen_height가 설정 될 때만 JS 함수를 실행한다. 다른 문제를 일으키지 않고 사용자의 뷰포트 차원을 데이터베이스로 가져 오는 데 큰 도움이됩니다. 도움을 주셔서 감사합니다. :) – kenji359

1

가 나는 스스로에게 물어 더 좋은 생각 : 당신이 widthheight 어떤 작업을 원하십니까? 그리고 그 목표를 성취 할 다른 방법이 있는지보십시오. 서버 측에서 실행되므로 사용자는 PHP를 사용하여 화면 폭과 높이를 얻을 수 없습니다.

따라서이 데이터는 이 아니며 첫 번째로드시에는을 사용할 수 없습니다.

AJAX를 사용하여 데이터를 제출 한 다음 JavaScript를 사용하여 페이지를 변경할 수 있습니다. 다음 페이지 리로드 데이터가 저장되면 서버 측에서 사용 가능합니다.

+0

나는 PHP가 서버 측이라고 이해한다. 그래서 내가 문제가 생겼다. 위의 자바 스크립트 코드는 PHP에 게시하고, 그것이 전부라면 괜찮을 것입니다. 그러나 모든 PHP는 게시 될 때 다시 실행됩니다. "처음로드"가 올바른 단어가 아닐 수도 있습니다. PHP를 두 번 실행하지 않고 점프 페이지/새로 고침 페이지를 사용할 필요가 없다는 것을 의미합니다. – kenji359

+0

데이터를 저장하는 별도의 PHP 파일을 만듭니다. 페이지 새로 고침은 피할 수 없습니다. 필요한 경우 AJAX로 페이지의 섹션을 새로 고칠 수도 있습니다. – Matthijs