سؤال

أحتاج إلى العثور على دقة الشاشة لشاشة المستخدمين الذين يزورون موقع الويب الخاص بي؟

هل كانت مفيدة؟

المحلول

لا يمكنك أن تفعل ذلك مع PUP PHP. يجب أن تفعل ذلك مع جافا سكريبت. هناك عدة مقالات مكتوبة حول كيفية القيام بذلك.

في الأساس، يمكنك تعيين ملف تعريف الارتباط أو يمكنك حتى القيام ببعض AJAX لإرسال المعلومات إلى البرنامج النصي PHP. إذا كنت تستخدم JQuery، فيمكنك القيام بذلك بشيء مثل هذا:

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"));
}
?>

كل ما هو أساسي حقا ولكن يجب أن تحصل عليك في مكان ما. عادة دقة الشاشة ليست ما تريده حقا. قد تكون أكثر اهتماما بحجم منفذ عرض المتصفح الفعلي لأن هذا هو في الواقع حيث يتم تقديم الصفحة ...

نصائح أخرى

مباشرة مع PHP غير ممكن ولكن ...

أكتب هذا التعليمات البرمجية البسيطة لحفظ دقة الشاشة على جلسة PHP لاستخدامها في معرض الصور.

<?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 هي لغة جانب الخادم - يتم تنفيذها على الخادم فقط، يتم إرسال إخراج البرنامج الناتج إلى العميل. على هذا النحو، لا توجد معلومات "شاشة عميل" المتاحة.

ومع ذلك، يمكنك أن يكون لديك العميل يخبرك بما هو دقة الشاشة عبر JavaScript. اكتب Scriptlet صغير لإرسال الشاشة .Width والشاشة http://example.net/index.php؟size=axb.

على الرغم من التحدث كمستخدم، إلا أنني أفضل بكم في تصميم موقع للتعامل مع أي دقة شاشة. أنا أستعرض نوافذ مختلفة الحجم، في الغالب غير تعظيم.

هذه هي عملية بسيطة جدا. نعم، لا يمكنك الحصول على العرض والارتفاع في PHP. صحيح أن jQuery يمكن أن توفر عرض الشاشة والارتفاع. الذهاب أولا إلى https://github.com/carhartl/jquery-cookie. والحصول على jquery.cookie.js. هنا هو مثال باستخدام PHP للحصول على عرض الشاشة والطول:

    <!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>

لدي اختبار يمكنك تنفيذه: http://rw-wrd.net/test.php.

استخدام جافا سكريبت (screen.width و screen.height IIRC، لكنني قد أكون مخطئا، لم أفعل JS في حين). PHP لا تستطيع أن تفعل ذلك.

لقد وجدت استخدام CSS داخل HTML الخاص بي داخل PHP قامت بالحيلة بالنسبة لي.

<?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>'; 

    ?>

سيؤدي ذلك إلى إخراج عنوان أصغر الحجم إذا كانت الشاشة 480 بكسل أو أقل. لذلك لا حاجة لتمرير أي فارغ باستخدام JS أو ما شابه ذلك.

يمكنك تجربة Ress (Design Design + مكونات جانب الخادم)، راجع هذا البرنامج التعليمي:

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

لا أعتقد أنك تستطيع اكتشاف حجم الشاشة بحتة مع PHP ولكن يمكنك اكتشاف وكيل المستخدم ..

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

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

إليك رابط إلى برنامج نصي أكثر تفصيلا: كشف PHP Mobile.

مثال على ذلك تماما

لم أستطع العثور على مثال PHP العامل الفعلي "غير مرئي" (بدون معلمات URL) عودة حجم شاشة العميل, وغيرها من الخصائص، إلى Server-Side PHP، لذلك وضعت هذا المثال معا.

JS يملأ ويقدم نموذج مخفي (نصي بواسطة PHP من مجموعة من خصائص JS)، POSTجي لنفسه (البيانات المتاحة الآن في PHP) وإرجاع البيانات في جدول.

(اختبار في "العديد من المتصفحات".)

<!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>

البيانات التي تم إرجاعها هي extractد في المتغيرات. علي سبيل المثال:

  • window.innerWidth يتم إرجاعها في $windowinnerWidth

الطريقة الوحيدة هي استخدام JavaScript، ثم احصل على JavaScript لنشرها على PHP الخاص بك (إذا كنت في حاجة حقا إلى جانب خادم الدقة). سيؤدي هذا إلى أن يسقط تماما على وجهه، إذا بدوره 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'];

يمكن القيام بذلك بسهولة باستخدام ملفات تعريف الارتباط. This method allows the page to check the stored cookie values against the screen height and width (or browser view port height and width values), and if they are different it will reset the cookie and reload the page. يحتاج الرمز إلى السماح بتفضيلات المستخدم. إذا تم إيقاف تشغيل ملفات تعريف الارتباط المستمرة، فاستخدم ملف تعريف ارتباط جلسة. إذا لم ينجح ذلك، فعليك أن تذهب مع إعداد افتراضي.

  1. جافا سكريبت: تحقق مما إذا كانت الطول وسرطيت ملف تعريف الارتباط
  2. جافا سكريبت: إذا كانت المجموعة، تحقق مما إذا كانت الشاشة .height & screen.width (أو ما تريد) يطابق القيمة الحالية لملف تعريف الارتباط
  3. جافا سكريبت: إذا لم يتم تعيين ملف تعريف الارتباط أو لا تتطابق مع القيمة الحالية، ثم: جافا سكريبت: إنشاء ملف تعريف الارتباط الدائم أو الدورة المستمرة المسماة (على سبيل المثال) "Shw" إلى قيمة الشاشة الحالية .height & screen.width.
    ب. جافا سكريبت: إعادة توجيه إلى الذات باستخدام window.location.reload (). عندما يتم إعادة تحميله، سوف تخطي الخطوة 3.
  4. PHP: $ _Cookie ['shw'] يحتوي على قيم.
  5. تواصل مع PHP.

على سبيل المثال، أنا أستخدم بعض وظائف ملفات تعريف الارتباط الشائعة الموجودة على الويب. تأكد من إرجاع SetCookie القيم الصحيحة. أضع هذا الرمز مباشرة بعد علامة الرأس. من الواضح أن الوظيفة يجب أن تكون في ملف مصدر AA.

<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"];
}

يمكنك تعيين عرض النافذة في ملفات تعريف الارتباط باستخدام JS في النهاية الأمامية ويمكنك الحصول عليها في 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'];
?>

الإجابة السريعة ليست، ثم عليك أن تسأل لماذا لا أفعل ذلك مع PHP. حسنا هنا هو إجابة أطول. PHP هي لغة البرمجة النصية Serverside وهناك لا علاقة له بنوع عميل معين. ثم قد تسأل "لماذا يمكنني الحصول على وكيل المتصفح من PHP؟"، لأن هذه المعلومات يتم إرسالها باستخدام رؤوس HTTP الأولي عند الطلب إلى الخادم. لذلك إذا كنت تريد معلومات العميل التي لم يتم إرسالها باستخدام رأس HTTP، فيجب عليك لغة البرمجة النصية للعميل مثل JavaScript.

في PHP لا توجد طريقة قياسية للحصول على هذه المعلومات. ومع ذلك، فمن الممكن إذا كنت تستخدم حل الطرف الثالث. 51Degrees جهاز للكشف عن PHP لديه الخصائص التي تحتاجها:

يمنحك عرض وارتفاع شاشة المستخدم في بكسل. من أجل استخدام هذه الخصائص تحتاج إلى تنزيل الكاشف من Sourceforge.. وبعد ثم تحتاج إلى تضمين الأسطرين التاليةين في الملف / الملفات الخاصة بك حيث من الضروري اكتشاف ارتفاع الشاشة والعرض:

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

حيث المسار / TO / CORE هو المسار إلى دليل "Core" الذي قمت بتنزيله من SourceForge. أخيرا، لاستخدام الخصائص:

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

ضع في اعتبارك أن هذه المتغيرات يمكن أن تحتوي على قيمة "غير معروفة" في بعض الأحيان، عند تحديد الجهاز.

الحل: جعل تصميم ويب قابل للتطوير ... (يجب أن أقول أن تصميم المواقع المناسبة) يجب أن يتم تكوين الجانب العميل وأتمنى أن يتم تمرير المعلومات إلى الخادم ولكن المعلومات لا تزال مفيدة (عدد الكائن لكل صفوف نوع صفقة) ولكن لا يزال تصميم الويب يجب أن يكون السوائل، وبالتالي لا ينبغي وضع كل عنصر من العناصر في الجداول ما لم يكن الجدول الفعلي (والبيانات ستوسيع نطاقها على الخلايا الفردية) إذا كنت تستخدم Div يمكنك تكديس كل عناصر بجانب بعضها البعض و يجب أن تكون نافذتك "كسر" الصف في المكان المناسب. (فقط بحاجة إلى CSS المناسبة)

PHP يعمل فقط على جانب الخادم، وليس على مضيف المستخدم. استخدم JavaScript أو JQuery للحصول على هذه المعلومات وإرسالها عبر AJAX أو URL (؟ x = 1024 & y = 640).

أسهل طريقة

<?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; ?> 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top