هذه مكتبة استنشاق متصفح معقدة للغاية وغير مجدية تقريبًا. عديمة الفائدة لأنه لا يجب عليك استخدام استنشاق المتصفح. لذا توقف الآن واقرأ شيئًا عن اكتشاف الميزات بدلاً من ذلك. أنا جادة. يبتعد. سوف تشكرني لاحقا.
إصدار PHP من WhatBrowser للاستخدام على الخادم. متوافق تمامًا مع PHP 7.0 أو أعلى، بما في ذلك PHP 8.
متاح أيضا:
WhatBrowser/محلل جافا سكريبت
إصدار JavaScript من WhatBrowser للاستخدام مع Node.js على الخادم
أي متصفح/خادم
خادم مكتوب بلغة PHP يوفر واجهة برمجة تطبيقات JavaScript للاستخدام في المتصفح
ولكن لماذا تكاد تكون عديمة الفائدة تمامًا وليست عديمة الفائدة تمامًا؟ حسنًا، هناك دائمًا استثناء للقاعدة. هناك أسباب وجيهة للقيام بفحص المتصفح: لتحسين تجربة المستخدم أو لجمع معلومات حول المتصفحات المستخدمة على موقع الويب الخاص بك. موقع الويب الخاص بي هو html5test.com وأردت معرفة النتيجة التي ينتمي إليها أي متصفح. وللقيام بذلك تحتاج إلى مكتبة استنشاق المتصفح.
لماذا هو معقد للغاية؟
لأن الجميع يكذبون. على محمل الجد، لا يوجد متصفح واحد صادق تمامًا. تقول جميع المتصفحات تقريبًا أنها Netscape 5 وتقول جميع متصفحات WebKit تقريبًا إنها تعتمد على Gecko. حتى Internet Explorer 11 لم يعد الآن يدعي أنه IE على الإطلاق، ولكنه بدلاً من ذلك متصفح غير مسمى يشبه Gecko. والأمر يزداد سوءا. ولهذا السبب فإن الأمر معقد.
ما نوع المعلومات التي يقدمها؟ تحصل على كائن جميل يحتوي على معلومات حول المتصفح ومحرك العرض ونظام التشغيل والجهاز. فهو يوفر لك الأسماء والإصدارات وحتى الشركة المصنعة للجهاز وطرازه. وWitchBrowser عنيد جدًا. فهو يوفر لك معلومات لا يقدمها الآخرون. على سبيل المثال:
JUC (Linux; U; 2.3.6; zh-cn; GT-I8150; 480*800) UCWEB8.7.4.225/145/800
UC Browser 8.7 on a Samsung Galaxy W running Android 2.3.6
لم يتم ذكر Android مطلقًا
Mozilla/5.0 (Series40; Nokia501/10.0.2; Profile/MIDP-2.1 Configuration/CLDC-1.1) Gecko/20100401 S40OviBrowser/3.0.0.0.73
Nokia Xpress 3.0.0 on a Nokia Asha 501 running Nokia Asha Platform
على الرغم من أن رأس وكيل المستخدم يدعي أنه جهاز من السلسلة 40، فإننا نعلم أنه يقوم بالفعل بتشغيل منصة Asha ونعلم أيضًا أنه تمت إعادة تسمية OviBrowser إلى Nokia Xpress.
Opera/9.80 (X11; Linux zvav; U; zh) Presto/2.8.119 Version/11.10
Opera Mini on a Nokia 5230 running Series60 5.0
يبدو رأس وكيل المستخدم مثل Opera 11.10 على Linux، ولكننا نعرف أنه Opera Mini. يمكننا حتى معرفة نظام التشغيل الحقيقي وطراز الجهاز من العناوين الأخرى.
يتطلب WhatBrowser PHP 7.0 أو أعلى ويدعم PHP 8. ويتوافق WhatBrowser مع معيار التحميل التلقائي PSR-4 ويتبع نمط الترميز PSR-1 وPSR-2.
يمكنك تثبيت WhatBrowser باستخدام Composer - مدير الحزم القياسي لـ PHP. تسمى الحزمة whichbrowser/parser
.
composer require whichbrowser/parser
يمكنك بسهولة تحديث WhatBrowser عن طريق تشغيل أمر بسيط.
composer update whichbrowser/parser
يجب عليك تشغيل هذا الأمر كلما كان ذلك ممكنًا. قد ترغب أيضًا في التفكير في إعداد وظيفة cron لهذا الغرض.
تتطلب الخطوة الأولى أداة التحميل التلقائي للملحن:
<?php
require ' vendor/autoload.php ' ;
الخطوة الثانية هي إنشاء كائن WhichBrowserParser
جديد. سيحتوي هذا الكائن على جميع المعلومات التي يمكن أن تجدها المكتبة حول المتصفح. يحتوي الكائن على معلمة مطلوبة، إما الرؤوس التي يرسلها المتصفح، أو سلسلة وكيل المستخدم. يُفضل استخدام الرؤوس، لأنها ستسمح باكتشاف أفضل، ولكن إذا كان لديك سلسلة وكيل المستخدم فقط، فسيعمل هذا أيضًا.
على سبيل المثال:
$ result = new WhichBrowser Parser ( getallheaders ());
أو:
$ result = new WhichBrowser Parser ( $ _SERVER [ ' HTTP_USER_AGENT ' ]);
يحتوي المتغير $result
الآن على كائن يمكنك الاستعلام عنه للحصول على معلومات. هناك طرق مختلفة للوصول إلى المعلومات.
أولاً، يمكنك استدعاء الدالة toString()
للحصول على تعريف يمكن قراءته بواسطة الإنسان:
" You are using " . $ result -> toString ();
// You are using Chrome 27 on OS X Mountain Lion 10.8
الاحتمال الآخر هو الاستعلام عن الكائن:
$ result -> isType ( ' desktop ' );
// true
$ result -> isType ( ' mobile ' , ' tablet ' , ' media ' , ' gaming:portable ' );
// false
$ result -> isBrowser ( ' Maxthon ' , ' < ' , ' 4.0.5 ' );
// false
$ result -> isOs ( ' iOS ' , ' >= ' , ' 8 ' );
// false
$ result -> isOs ( ' OS X ' );
// true
$ result -> isEngine ( ' Blink ' );
// true
يمكنك أيضًا الوصول إلى هذه الخصائص مباشرةً:
$ result -> browser -> toString ();
// Chrome 27
$ result -> engine -> toString ();
// Blink
$ result -> os -> toString ();
// OS X Mountain Lion 10.8
أو الوصول إلى أجزاء من هذه الخصائص مباشرة:
$ result -> browser -> name ;
// Chrome
$ result -> browser -> name . ' ' . $ result -> browser -> version -> toString ();
// Chrome 27
$ result -> browser -> version -> value ;
// 27.0 . 1453.110
$ result -> engine -> name ;
// Blink
أخيرًا يمكنك أيضًا الاستعلام عن الإصدارات مباشرةً:
$ result -> browser -> version -> is ( ' > ' , 26 );
// true
$ result -> os -> version -> is ( ' < ' , ' 10.7.4 ' );
// false
من الممكن تعيين خيارات إضافية عن طريق تمرير مصفوفة كمعلمة ثانية عند إنشاء كائن Parser
.
في بعض الحالات قد ترغب في تعطيل اكتشاف الروبوتات. وهذا يسمح للروبوت بخداع WhatBrowser عمدًا، حتى تتمكن من التقاط هوية وكيل المستخدم الذي يحاول الروبوت تقليده. يكون هذا مفيدًا بشكل خاص عندما تريد استخدام WhatBrowser للتبديل بين الأشكال المختلفة لموقع الويب الخاص بك وتريد التأكد من أن برامج الزحف ترى الشكل الصحيح لموقع الويب. على سبيل المثال، سيرى الروبوت الذي يحاكي جهازًا محمولاً نسخة الجوال لموقعك.
$ result = new WhichBrowser Parser ( getallheaders (), [ ' detectBots ' => false ]);
يدعم WhatBrowser محولات ذاكرة التخزين المؤقت المتوافقة مع PSR-6 للتخزين المؤقت للنتائج بين الطلبات. يعد استخدام ذاكرة التخزين المؤقت مفيدًا بشكل خاص إذا كنت تستخدم WhatBrowser في كل صفحة من صفحات موقع الويب الخاص بك وقام المستخدم بزيارة صفحات متعددة. خلال الزيارة الأولى، سيتم تحليل الرؤوس وسيتم تخزين النتيجة مؤقتًا. عند إجراء زيارات أخرى، سيتم استخدام النتائج المخزنة مؤقتًا، وهو أسرع بكثير من الاضطرار إلى تحليل الرؤوس مرارًا وتكرارًا.
هناك محولات متاحة لأنواع أخرى من ذاكرات التخزين المؤقت، مثل APC وDoctrine وMemcached وMongoDB وRedis وغيرها الكثير. تختلف إعدادات هذه المحولات عن بعضها البعض، ولكن بمجرد تكوينها، كل ما عليك فعله هو تمريرها كخيار عند إنشاء كائن Parser
، أو استخدام الدالة setCache()
لتعيينها بعد ذلك. تم اختبار WhatBrowser للعمل مع المحولات التي توفرها PHP Cache. للحصول على قائمة بالحزم الأخرى التي توفر المحولات، راجع Packagist.
على سبيل المثال، إذا كنت تريد تمكين ذاكرة التخزين المؤقت المستندة إلى ذاكرة التخزين المؤقت، فستحتاج إلى تثبيت حزمة مؤلف إضافية:
composer require cache/memcached-adapter
وقم بتغيير المكالمة إلى WhatBrowser/Parser كما يلي:
$ client = new Memcached ();
$ client -> addServer ( ' localhost ' , 11211 );
$ pool = new Cache Adapter Memcached MemcachedCachePool ( $ client );
$ result = new WhichBrowser Parser ( getallheaders (), [ ' cache ' => $ pool ]);
أو
$ client = new Memcached ();
$ client -> addServer ( ' localhost ' , 11211 );
$ pool = new Cache Adapter Memcached MemcachedCachePool ( $ client );
$ result = new WhichBrowser Parser ();
$ result -> setCache ( $ pool );
$ result -> analyse ( getallheaders ());
يمكنك أيضًا تحديد عدد الثواني التي يجب أن يتم فيها تجاهل النتيجة المخزنة مؤقتًا. القيمة الافتراضية هي 900 ثانية أو 15 دقيقة. إذا كنت تعتقد أن WhatBrowser يستخدم مساحة كبيرة جدًا من الذاكرة للتخزين المؤقت، فيجب عليك خفض هذه القيمة. يمكنك القيام بذلك عن طريق تعيين خيار cacheExpires
أو تمريره كمعلمة ثانية إلى وظيفة setCache()
.
بعد إنشاء كائن WhichBrowserParser
جديد، فإنه يحتوي على عدد من الخصائص والوظائف. كل هذه الخصائص مضمونة لتكون موجودة.
ملكيات:
browser
engine
os
device
الوظائف:
getType()
إرجاع خاصية type
والنوع subtype
لكائن device
. في حالة وجود نوع فرعي، فسيتم ربطه بالنوع وفصله بنصف لون، على سبيل المثال: mobile:smart
أو gaming:portable
. إذا كان النوع الفرعي غير قابل للتطبيق، فسيقوم فقط بإرجاع النوع، على سبيل المثال: desktop
أو ereader
.
isType($type [,$type [,$type [,$type]]])
إذا تم استخدام وسيطة واحدة، ترجع الدالة true
إذا كانت الوسيطة تطابق type
كائن device
. يمكن للوسيطة أيضًا توفير نوع فرعي بشكل اختياري عن طريق ربطه بالنوع وفصله بفاصلة منقوطة. يمكنه استخدام وسائط متعددة وفي هذه الحالة تعود الدالة true
إذا تطابقت إحدى الوسائط. إذا لم يتطابق أي من الوسيطات، فسيتم إرجاع false
isMobile()
يُرجع true
إذا كان المتصفح جهازًا محمولاً، مثل هاتف أو جهاز لوحي أو قارئ إلكتروني أو كاميرا أو مشغل وسائط محمول أو ساعة أو وحدة تحكم ألعاب محمولة. وإلا فإنها ترجع false
.
isBrowser($name [, $comparison, $version])
يتم استخدامه للاستعلام عن name
version
كائن browser
. يمكن أن تحتوي الوظيفة على وسيطة واحدة لمقارنة بسيطة تعتمد على name
، أو ثلاث وسائط لمقارنة كل من name
version
. تحتوي الوسيطة الأولى دائمًا على اسم المتصفح. الوسيطات الثانية عبارة عن سلسلة يمكن أن تحتوي إما على <
أو <=
أو =
أو =>
أو >
. والثالث هو عدد صحيح أو عدد عشري أو سلسلة تحتوي على الإصدار. يمكنك استخدام إصدارات مثل 10
أو 10.7
أو '10.7.4'
. لمزيد من المعلومات حول كيفية إجراء مقارنات الإصدارات، الرجاء مراجعة الدالة is()
لكائن Version
.
isEngine($name [, $comparison, $version])
يتم استخدامه للاستعلام عن name
version
كائن engine
. تعمل هذه الوظيفة بنفس الطريقة التي تعمل بها isBrowser
تمامًا.
isOs($name [, $comparison, $version])
يتم استخدامه للاستعلام عن name
version
كائن os
. تعمل هذه الوظيفة بنفس الطريقة التي تعمل بها isBrowser
تمامًا.
isDetected()
هل تم بالفعل اكتشاف بعض المتصفحات، أم أننا فشلنا في اكتشاف أي شيء؟
toString()
احصل على تمثيل يمكن قراءته بواسطة الإنسان للمتصفح الذي تم اكتشافه، بما في ذلك نظام التشغيل ومعلومات الجهاز.
يتم استخدام كائن من فئة WhichBrowserModelBrowser
لخاصية browser
لكائن WhichBrowserParser
الرئيسي ويحتوي على عدد من الخصائص. إذا كانت الخاصية غير قابلة للتطبيق في هذه الحالة، فستكون فارغة أو غير محددة.
ملكيات:
name
alias
version
stock
channel
mode
hidden
family
using
الوظائف:
isFamily($name)
هل تحمل عائلة هذا المتصفح هذا الاسم أم أن المتصفح نفسه يحمل هذا الاسم.
isUsing($name)
هل يستخدم المتصفح عرض ويب باستخدام الاسم المقدم.
getName()
احصل على اسم المتصفح
getVersion()
احصل على نسخة المتصفح
toString()
احصل على تمثيل بشري قابل للقراءة للمتصفح المكتشف
يتم استخدام كائن من فئة WhichBrowserModelEngine
لخاصية engine
لكائن WhichBrowserParser
الرئيسي ويحتوي على عدد من الخصائص. إذا كانت الخاصية غير قابلة للتطبيق في هذه الحالة، فستكون فارغة أو غير محددة.
ملكيات:
name
version
الوظائف:
getName()
احصل على اسم محرك العرض
getVersion()
احصل على نسخة محرك العرض
toString()
احصل على تمثيل بشري يمكن قراءته لمحرك العرض المكتشف
يتم استخدام كائن من فئة WhichBrowserModelOs
لخاصية os
الخاصة بكائن WhichBrowserParser
الرئيسي ويحتوي على عدد من الخصائص. إذا كانت الخاصية غير قابلة للتطبيق في هذه الحالة، فستكون فارغة أو غير محددة.
ملكيات:
name
version
family
الوظائف:
isFamily($name)
هل تحمل عائلة نظام التشغيل هذا هذا الاسم، أم أن نظام التشغيل نفسه يحمل هذا الاسم.
getName()
احصل على اسم نظام التشغيل
getVersion()
الحصول على نسخة نظام التشغيل
toString()
احصل على تمثيل يمكن قراءته بواسطة الإنسان لنظام التشغيل المكتشف
يتم استخدام كائن من فئة WhichBrowserModelDevice
لخاصية device
لكائن WhichBrowserParser
الرئيسي ويحتوي على عدد من الخصائص. إذا كانت الخاصية غير قابلة للتطبيق في هذه الحالة، فستكون فارغة أو غير محددة.
ملكيات:
type
subtype
identified
manufacturer
model
يمكن أن تحتوي خاصية type
على أي قيمة من القائمة التالية:
إذا كان type
"متنقل"، فيمكن أن تحتوي خاصية subtype
على أي قيمة من القائمة التالية:
إذا كان type
"gaming"، فيمكن أن تحتوي خاصية subtype
على أي قيمة من القائمة التالية:
الوظائف:
getManufacturer()
احصل على اسم الشركة المصنعة
getModel()
احصل على اسم النموذج
toString()
احصل على تمثيل بشري قابل للقراءة للجهاز المكتشف
يتم استخدام كائن من فئة WhichBrowserModelFamily
لخاصية family
لكائن WhichBrowserModelBrowser
و WhichBrowserModelOs
ويحتوي على عدد من الخصائص. إذا كانت الخاصية غير قابلة للتطبيق في هذه الحالة، فستكون فارغة أو غير محددة.
ملكيات:
name
version
الوظائف:
getName()
احصل على اسم العائلة
getVersion()
احصل على نسخة العائلة
toString()
احصل على تمثيل بشري مقروء للعائلة
يتم استخدام كائن من فئة WhichBrowserModelUsing
لخاصية using
الخاصة بكائن WhichBrowserModelBrowser
ويحتوي على عدد من الخصائص. إذا كانت الخاصية غير قابلة للتطبيق في هذه الحالة، فستكون فارغة أو غير محددة.
ملكيات:
name
version
الوظائف:
getName()
احصل على اسم عرض الويب
getVersion()
احصل على نسخة عرض الويب
toString()
احصل على تمثيل بشري قابل للقراءة لعرض الويب
يتم استخدام كائن من فئة WhichBrowserModelVersion
لخاصية version
browser
engine
وكائن os
ويحتوي على عدد من الخصائص والوظائف. إذا كانت الخاصية غير قابلة للتطبيق في هذه الحالة، فستكون فارغة أو غير محددة.
ملكيات:
value
alias
nickname
details
الوظائف:
is($version)
أو is($comparison, $version)
باستخدام هذه الوظيفة، من السهل مقارنة إصدار بإصدار آخر. إذا قمت بتحديد وسيطة واحدة فقط، فستعود هذه الوظيفة إذا كانت الإصدارات هي نفسها. يمكنك أيضًا تحديد وسيطتين، في هذه الحالة تحتوي الوسيطة الأولى على عامل المقارنة، مثل <
أو <=
أو =
=>
أو >
. الوسيطة الثانية هي الإصدار الذي تريد مقارنته به. يمكنك استخدام إصدارات مثل 10
أو 10.7
أو '10.7.4'
، لكن انتبه إلى أن 10
ليس هو نفسه 10.0
. على سبيل المثال، إذا كان إصدار نظام التشغيل لدينا هو 10.7.4
:
$ result -> os -> version -> is ( ' 10.7.4 ' );
// true
$ result -> os -> version -> is ( ' 10.7 ' );
// true
$ result -> os -> version -> is ( ' 10 ' );
// true
$ result -> os -> version -> is ( ' 10.0 ' );
// false
$ result -> os -> version -> is ( ' > ' , ' 10 ' );
// false
$ result -> os -> version -> is ( ' > ' , ' 10.7 ' );
// false
$ result -> os -> version -> is ( ' > ' , ' 10.7.3 ' );
// true