นี่เป็นไลบรารีการดมกลิ่นเบราว์เซอร์ที่ซับซ้อนมากและแทบไม่มีประโยชน์เลย ไม่มีประโยชน์เพราะคุณไม่ควรใช้เบราว์เซอร์ดม ดังนั้นหยุดตอนนี้แล้วไปอ่านบางอย่างเกี่ยวกับการตรวจจับคุณสมบัติแทน ฉันจริงจัง. ออกไป. คุณจะขอบคุณฉันในภายหลัง
WhereBrowser เวอร์ชัน PHP สำหรับใช้บนเซิร์ฟเวอร์ เข้ากันได้กับ PHP 7.0 หรือสูงกว่าอย่างสมบูรณ์ รวมถึง PHP 8
นอกจากนี้ยังมี:
ซึ่งเบราว์เซอร์/Parser-JavaScript
WhereBrowser เวอร์ชัน JavaScript สำหรับใช้กับ Node.js บนเซิร์ฟเวอร์
ซึ่งเบราว์เซอร์/เซิร์ฟเวอร์
เซิร์ฟเวอร์ที่เขียนด้วย PHP ซึ่งมี JavaScript API สำหรับใช้ในเบราว์เซอร์
แต่ทำไม เกือบจะไร้ประโยชน์โดยสิ้นเชิง และไม่ไร้ประโยชน์โดยสิ้นเชิง? มีข้อยกเว้นสำหรับกฎเสมอ มีเหตุผลที่ถูกต้องในการดมกลิ่นเบราว์เซอร์: เพื่อปรับปรุงประสบการณ์ผู้ใช้หรือเพื่อรวบรวมข้อมูลเกี่ยวกับเบราว์เซอร์ที่ใช้ในเว็บไซต์ของคุณ เว็บไซต์ของฉันคือ html5test.com และฉันต้องการทราบว่าคะแนนใดเป็นของเบราว์เซอร์ใด และในการทำเช่นนั้นคุณต้องมีเบราว์เซอร์ดมไลบรารี
เหตุใดจึงซับซ้อนมาก?
เพราะทุกคนโกหก จริงๆ แล้วไม่มีเบราว์เซอร์ตัวเดียวที่เป็นจริงอย่างสมบูรณ์ เบราว์เซอร์เกือบทั้งหมดบอกว่าเป็น Netscape 5 และเบราว์เซอร์ WebKit เกือบทั้งหมดบอกว่าใช้ Gecko แม้แต่ Internet Explorer 11 ก็ไม่อ้างว่าเป็น IE อีกต่อไป แต่เป็นเบราว์เซอร์ที่ไม่มีชื่อที่เหมือนกับ Gecko แทน และมันแย่ลง นั่นเป็นเหตุผลว่าทำไมมันถึงซับซ้อน
มันให้ข้อมูลประเภทไหน? คุณได้รับวัตถุที่ดีซึ่งมีข้อมูลเกี่ยวกับเบราว์เซอร์ เอ็นจิ้นการเรนเดอร์ ระบบปฏิบัติการ และอุปกรณ์ โดยจะให้ชื่อและเวอร์ชัน รวมถึงผู้ผลิตและรุ่นของอุปกรณ์ และเบราว์เซอร์ใดที่ค่อนข้างเหนียวแน่น มันให้ข้อมูลแก่คุณที่คนอื่นไม่ทำ ตัวอย่างเช่น:
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
แม้ว่าส่วนหัวของ useragent จะอ้างว่าเป็นอุปกรณ์ Series40 แต่เรารู้ว่ามันใช้งานแพลตฟอร์ม 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
ส่วนหัวของ useragent ดูเหมือน Opera 11.10 บน Linux แต่เรารู้ว่าเป็น Opera Mini เรายังสามารถทราบระบบปฏิบัติการและรุ่นอุปกรณ์จริงได้จากส่วนหัวอื่นๆ
เบราว์เซอร์ใดต้องการ PHP 7.0 ขึ้นไปและรองรับ PHP 8 เบราว์เซอร์ใดเข้ากันได้กับมาตรฐานการโหลดอัตโนมัติ PSR-4 และเป็นไปตามรูปแบบการเข้ารหัส PSR-1 และ PSR-2
คุณสามารถติดตั้ง whichBrowser ได้โดยใช้ Composer - โปรแกรมจัดการแพ็คเกจมาตรฐานสำหรับ PHP แพ็คเกจนี้เรียกว่า whichbrowser/parser
composer require whichbrowser/parser
คุณสามารถอัปเดต whichBrowser ได้อย่างง่ายดายด้วยการรันคำสั่งง่ายๆ
composer update whichbrowser/parser
คุณควรรันคำสั่งนี้บ่อยที่สุดเท่าที่จะทำได้ คุณอาจต้องการพิจารณาตั้งค่างาน cron เพื่อจุดประสงค์นี้ด้วย
ขั้นตอนแรกต้องใช้ตัวโหลดอัตโนมัติของ Composer:
<?php
require ' vendor/autoload.php ' ;
ขั้นตอนที่สองคือการสร้างวัตถุ WhichBrowserParser
ใหม่ ออบเจ็กต์นี้จะมีข้อมูลทั้งหมดที่ไลบรารีสามารถค้นหาได้เกี่ยวกับเบราว์เซอร์ ออบเจ็กต์มีพารามิเตอร์ที่จำเป็น ไม่ว่าจะเป็นส่วนหัวที่ส่งโดยเบราว์เซอร์หรือสตริง useragent ควรใช้ส่วนหัวเนื่องจากจะช่วยให้การตรวจจับดีขึ้น แต่หากคุณมีเพียงสตริง useragent ก็ใช้วิธีนี้ได้เช่นกัน
ตัวอย่างเช่น:
$ 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
ในบางกรณี คุณอาจต้องการปิดการใช้งานการตรวจจับบอท วิธีนี้จะทำให้บอทจงใจหลอก whichBrowser ได้ ดังนั้นคุณจึงสามารถระบุตัวตนของ useragent ได้ว่าบอทพยายามเลียนแบบอะไร สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อคุณต้องการใช้ whichBrowser เพื่อสลับระหว่างรูปแบบต่างๆ ของเว็บไซต์ของคุณ และต้องการให้แน่ใจว่าโปรแกรมรวบรวมข้อมูลเห็นรูปแบบที่ถูกต้องของเว็บไซต์ ตัวอย่างเช่น บอทที่เลียนแบบอุปกรณ์มือถือจะเห็นไซต์มือถือของคุณในรูปแบบต่างๆ
$ result = new WhichBrowser Parser ( getallheaders (), [ ' detectBots ' => false ]);
เบราว์เซอร์ใดรองรับอะแดปเตอร์แคชที่เข้ากันได้กับ PSR-6 สำหรับการแคชผลลัพธ์ระหว่างคำขอ การใช้แคชจะมีประโยชน์อย่างยิ่งหากคุณใช้ whichBrowser ในทุกหน้าของเว็บไซต์ของคุณและมีผู้ใช้เข้าชมหลายหน้า ในระหว่างการเยี่ยมชมครั้งแรก ส่วนหัวจะถูกแยกวิเคราะห์และผลลัพธ์จะถูกแคชไว้ เมื่อตรวจดูเพิ่มเติม ผลลัพธ์ที่แคชไว้จะถูกนำมาใช้ ซึ่งเร็วกว่าการต้องแยกวิเคราะห์ส่วนหัวครั้งแล้วครั้งเล่า
มีอะแดปเตอร์สำหรับแคชประเภทอื่นๆ เช่น APC, Doctrine, Memcached, MongoDB, Redis และอื่นๆ อีกมากมาย การกำหนดค่าของอะแดปเตอร์เหล่านี้ทั้งหมดแตกต่างกัน แต่เมื่อกำหนดค่าแล้ว สิ่งที่คุณต้องทำคือส่งผ่านเป็นตัวเลือกเมื่อสร้างออบเจ็กต์ Parser
หรือใช้ฟังก์ชัน setCache()
เพื่อตั้งค่าในภายหลัง ซึ่งเบราว์เซอร์ได้รับการทดสอบให้ทำงานกับอะแดปเตอร์ที่จัดทำโดย PHP Cache สำหรับรายการแพ็คเกจอื่นๆ ที่มีอะแดปเตอร์ โปรดดูที่ Packagist
ตัวอย่างเช่น หากคุณต้องการเปิดใช้งานแคชแบบ memcached คุณต้องติดตั้งแพ็คเกจผู้แต่งเพิ่มเติม:
composer require cache/memcached-adapter
และเปลี่ยนการเรียกเป็น whichBrowser/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 นาที หากคุณคิดว่า whichBrowser ใช้หน่วยความจำมากเกินไปในการแคช คุณควรลดค่านี้ลง คุณสามารถทำได้โดยการตั้งค่าตัวเลือก 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
หากเบราว์เซอร์เป็นอุปกรณ์เคลื่อนที่ เช่น โทรศัพท์ แท็บเล็ต ereader กล้อง เครื่องเล่นสื่อแบบพกพา นาฬิกา หรือคอนโซลเกมแบบพกพา มิฉะนั้นจะส่งคืนค่า 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)
เบราว์เซอร์ที่ใช้ webview ใช้กับชื่อที่ให้มาหรือไม่
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
คือ "เกม" คุณสมบัติ subtype
สามารถมีค่าใดก็ได้จากรายการต่อไปนี้:
ฟังก์ชั่น:
getManufacturer()
รับชื่อผู้ผลิต
getModel()
รับชื่อรุ่น
toString()
รับการแสดงอุปกรณ์ที่ตรวจพบโดยมนุษย์
อ็อบเจ็กต์ของคลาส WhichBrowserModelFamily
ใช้สำหรับคุณสมบัติ family
ของอ็อบเจ็กต์ WhichBrowserModelBrowser
และ WhichBrowserModelOs
และมีคุณสมบัติจำนวนหนึ่ง หากคุณสมบัติไม่สามารถใช้งานได้ในสถานการณ์นี้ คุณสมบัตินั้นจะถือเป็นโมฆะหรือไม่ได้กำหนดไว้
คุณสมบัติ:
name
version
ฟังก์ชั่น:
getName()
รับชื่อครอบครัว
getVersion()
รับเวอร์ชั่นของครอบครัว
toString()
รับภาพครอบครัวที่มนุษย์สามารถอ่านได้
อ็อบเจ็กต์ของคลาส WhichBrowserModelUsing
ใช้สำหรับคุณสมบัติ using
ของอ็อบเจ็กต์ WhichBrowserModelBrowser
และมีคุณสมบัติจำนวนหนึ่ง หากคุณสมบัติไม่สามารถใช้งานได้ในสถานการณ์นี้ คุณสมบัตินั้นจะถือเป็นโมฆะหรือไม่ได้กำหนดไว้
คุณสมบัติ:
name
version
ฟังก์ชั่น:
getName()
รับชื่อของ webview
getVersion()
รับเวอร์ชันของ webview
toString()
รับการนำเสนอ webview ที่มนุษย์สามารถอ่านได้
อ็อบเจ็กต์ของคลาส 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