search
HomeBackend DevelopmentPHP TutorialPHP判断浏览器类型

1、下面我们就来通过 $_SERVER['HTTP_USER_AGENT'] 来写一个php判断浏览器类型的办法。

<p>function my_get_browser(){</p>	if(empty($_SERVER['HTTP_USER_AGENT'])){<br />		return '命令行,机器人来了!';<br />	}<br />	if(false!==strpos($_SERVER['HTTP_USER_AGENT'],'MSIE 9.0')){<br />		return 'Internet Explorer 9.0';<br />	}<br />	if(false!==strpos($_SERVER['HTTP_USER_AGENT'],'MSIE 8.0')){<br />		return 'Internet Explorer 8.0';<br />	}<br />	if(false!==strpos($_SERVER['HTTP_USER_AGENT'],'MSIE 7.0')){<br />		return 'Internet Explorer 7.0';<br />	}<br />	if(false!==strpos($_SERVER['HTTP_USER_AGENT'],'MSIE 6.0')){<br />		return 'Internet Explorer 6.0';<br />	}<br />	if(false!==strpos($_SERVER['HTTP_USER_AGENT'],'Firefox')){<br />		return 'Firefox';<br />	}<br />	if(false!==strpos($_SERVER['HTTP_USER_AGENT'],'Chrome')){<br />		return 'Chrome';<br />	}<br />	if(false!==strpos($_SERVER['HTTP_USER_AGENT'],'Safari')){<br />		return 'Safari';<br />	}<br />	if(false!==strpos($_SERVER['HTTP_USER_AGENT'],'Opera')){<br />		return 'Opera';<br />	}<br />	if(false!==strpos($_SERVER['HTTP_USER_AGENT'],'360SE')){<br />		return '360SE';<br />	}<br /><p>}</p>

这里主要用到了 $_SERVER['HTTP_USER_AGENT'],这个常量是用来检查浏览页面的访问者在用什么操作系统(包括版本号)浏览器(包括版本号)和用户个人偏好。用法很简单,自己在程序里面打印出来看看就明白了。

2、另外 php 判断浏览器的类型还可以通过 php 系统函数 get_browser() 函数,这个函数将会返回用户浏览器的一些性能数据。

该函数通过查阅用户的 browscap.ini 文件,来测定用户浏览器的性能。若成功,则该函数返回包含用户浏览器信息的一个对象或一个数组,若失败,则返回 false。get_browser 语法get_browser(user_agent,return_array)这个函数有两个参数,参数意义解释如下:user_agent 可选。规定 HTTP 用户代理的名称。默认是 $HTTP_USER_AGENT 的值。您可以通过设置 NULL 绕过该参数。

 

return_array 可选。如果该参数设置为 true,本函数会返回一个数组而不是对象。对于 php 通过 $_SERVER['HTTP_USER_AGENT'] 和 get_browser 获取的浏览器信息,我们可以通过如下例子来认识一下:

<p><?php</p>echo $_SERVER['HTTP_USER_AGENT'] . "<br /><br />";<br />$browser = get_browser(null,true);<br />print_r($browser);<br /><p>?></p>

结果将输出:

Mozilla/4.0

(compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)Array(
[browser_name_regex] => ^mozilla/.\.0
(compatible; msie 6\.0.*;.*windows nt 5\.1.*\.net clr.*).*$
[browser_name_pattern] => Mozilla/?.0
(compatible; MSIE 6.0*;*Windows NT 5.1*.NET CLR*)*
[parent] => IE 6.0
[platform] => WinXP
[netclr] => 1
[browser] => IE
[version] => 6.0
[majorver] => 6
[minorver] => 0
[css] => 2
[frames] => 1
[iframes] => 1
[tables] => 1
[cookies] => 1
[backgroundsounds] => 1
[vbscript] => 1
[javascript] => 1
[javaapplets] => 1
[activexcontrols] => 1
[cdf] => 1
[aol] =>
[beta] =>
[win16] =>
[crawler] =>
[stripper] =>
[wap] =>
[ak] =>
[sk] =>

)

但是通过PHP的get_browser()函数获取客户端浏览器相关信息是有条件的,如果你直接使用一般会报出如下这个错误:

Warning: get_browser() [function.get-browser]: browscap ini directive not set in ......

通过查询 php 手册,得到的解释是:为了使用这个函数,你必须在php.ini文件里面增加一句指向 browscap.ini 文件的配置,browscap.ini文件里面记录了所有已存在的浏览器的类型及其信息,所以你要下载最新的这个文件,下载browscap.ini后放到服务器某个位置,get_browser()在使用时就是将获取的客户端信息与此文件进行对比,如果能找到,则返回相应类型。由上看来要想使用 get_browser() 获取浏览器类型代价不小啊!

3、另外还有一种php判断浏览器类型的办法,即使用一个国外牛人写的开源代码。国外有个叫mavrick的网站,上面有关于浏览器的项目,一直更新所写的Browser类,我最新看到的这个类可以获取包括iPhone、BlackBerry、win、mac、linux、OS、BeOS等平台上的浏览器信息,功能可以说是十分强大。

下载这个文件时要根据自己使用的PHP版本去选择。该类的具体代码如下:

<p><?php</p>/**<br /> * File: Browser.php<br /> * Author: Chris Schuld (http://chrisschuld.com/)<br /> * http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php/<br /> * Last Modified: August 20th, 2010<br /> * @version 1.9<br /> * @package PegasusPHP<br /> *<br /> * Copyright (C) 2008-2010 Chris Schuld  (chris@chrisschuld.com)<br /> *<br /> * This program is free software; you can redistribute it and/or<br /> * modify it under the terms of the GNU General Public License as<br /> * published by the Free Software Foundation; either version 2 of<br /> * the License, or (at your option) any later version.<br /> *<br /> * This program is distributed in the hope that it will be useful,<br /> * but WITHOUT ANY WARRANTY; without even the implied warranty of<br /> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<br /> * GNU General Public License for more details at:<br /> * http://www.gnu.org/copyleft/gpl.html<br /> *<br /> *<br /> * Typical Usage:<br /> *<br /> *   $browser = new Browser();<br /> *   if( $browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >= 2 ) {<br /> *   	echo 'You have FireFox version 2 or greater';<br /> *   }<br /> *<br /> * User Agents Sampled from: http://www.useragentstring.com/<br /> *<br /> * This implementation is based on the original work from Gary White<br /> * http://apptools.com/phptools/browser/<br /> *<br /> *<br /> */<br /><br />class Browser {<br />	private $_agent = '';<br />	private $_browser_name = '';<br />	private $_version = '';<br />	private $_platform = '';<br />	private $_os = '';<br />	private $_is_aol = false;<br />	private $_is_mobile = false;<br />	private $_is_robot = false;<br />	private $_aol_version = '';<br /><br />	const BROWSER_UNKNOWN = 'unknown';<br />	const VERSION_UNKNOWN = 'unknown';<br /><br />	const BROWSER_OPERA = 'Opera';// http://www.opera.com/<br />	const BROWSER_OPERA_MINI = 'Opera Mini';  // http://www.opera.com/mini/<br />	const BROWSER_WEBTV = 'WebTV';// http://www.webtv.net/pc/<br />	const BROWSER_IE = 'Internet Explorer';   // http://www.microsoft.com/ie/<br />	const BROWSER_POCKET_IE = 'Pocket Internet Explorer'; // http://en.wikipedia.org/wiki/Internet_Explorer_Mobile<br />	const BROWSER_KONQUEROR = 'Konqueror';// http://www.konqueror.org/<br />	const BROWSER_ICAB = 'iCab';  // http://www.icab.de/<br />	const BROWSER_OMNIWEB = 'OmniWeb';// http://www.omnigroup.com/applications/omniweb/<br />	const BROWSER_FIREBIRD = 'Firebird';  // http://www.ibphoenix.com/<br />	const BROWSER_FIREFOX = 'Firefox';// http://www.mozilla.com/en-US/firefox/firefox.html<br />	const BROWSER_ICEWEASEL = 'Iceweasel';// http://www.geticeweasel.org/<br />	const BROWSER_SHIRETOKO = 'Shiretoko';// http://wiki.mozilla.org/Projects/shiretoko<br />	const BROWSER_MOZILLA = 'Mozilla';// http://www.mozilla.com/en-US/<br />	const BROWSER_AMAYA = 'Amaya';// http://www.w3.org/Amaya/<br />	const BROWSER_LYNX = 'Lynx';  // http://en.wikipedia.org/wiki/Lynx<br />	const BROWSER_SAFARI = 'Safari';  // http://apple.com<br />	const BROWSER_IPHONE = 'iPhone';  // http://apple.com<br />	const BROWSER_IPOD = 'iPod';  // http://apple.com<br />	const BROWSER_IPAD = 'iPad';  // http://apple.com<br />	const BROWSER_CHROME = 'Chrome';  // http://www.google.com/chrome<br />	const BROWSER_ANDROID = 'Android';// http://www.android.com/<br />	const BROWSER_GOOGLEBOT = 'GoogleBot';// http://en.wikipedia.org/wiki/Googlebot<br />	const BROWSER_SLURP = 'Yahoo! Slurp'; // http://en.wikipedia.org/wiki/Yahoo!_Slurp<br />	const BROWSER_W3CVALIDATOR = 'W3C Validator'; // http://validator.w3.org/<br />	const BROWSER_BLACKBERRY = 'BlackBerry';  // http://www.blackberry.com/<br />	const BROWSER_ICECAT = 'IceCat';  // http://en.wikipedia.org/wiki/GNU_IceCat<br />	const BROWSER_NOKIA_S60 = 'Nokia S60 OSS Browser';// http://en.wikipedia.org/wiki/Web_Browser_for_S60<br />	const BROWSER_NOKIA = 'Nokia Browser';// * all other WAP-based browsers on the Nokia Platform<br />	const BROWSER_MSN = 'MSN Browser';// http://explorer.msn.com/<br />	const BROWSER_MSNBOT = 'MSN Bot'; // http://search.msn.com/msnbot.htm<br />	  // http://en.wikipedia.org/wiki/Msnbot  (used for Bing as well)<br />	<br />	const BROWSER_NETSCAPE_NAVIGATOR = 'Netscape Navigator';  // http://browser.netscape.com/ (DEPRECATED)<br />	const BROWSER_GALEON = 'Galeon';  // http://galeon.sourceforge.net/ (DEPRECATED)<br />	const BROWSER_NETPOSITIVE = 'NetPositive';// http://en.wikipedia.org/wiki/NetPositive (DEPRECATED)<br />	const BROWSER_PHOENIX = 'Phoenix';// http://en.wikipedia.org/wiki/History_of_Mozilla_Firefox (DEPRECATED)<br /><br />	const PLATFORM_UNKNOWN = 'unknown';<br />	const PLATFORM_WINDOWS = 'Windows';<br />	const PLATFORM_WINDOWS_CE = 'Windows CE';<br />	const PLATFORM_APPLE = 'Apple';<br />	const PLATFORM_LINUX = 'Linux';<br />	const PLATFORM_OS2 = 'OS/2';<br />	const PLATFORM_BEOS = 'BeOS';<br />	const PLATFORM_IPHONE = 'iPhone';<br />	const PLATFORM_IPOD = 'iPod';<br />	const PLATFORM_IPAD = 'iPad';<br />	const PLATFORM_BLACKBERRY = 'BlackBerry';<br />	const PLATFORM_NOKIA = 'Nokia';<br />	const PLATFORM_FREEBSD = 'FreeBSD';<br />	const PLATFORM_OPENBSD = 'OpenBSD';<br />	const PLATFORM_NETBSD = 'NetBSD';<br />	const PLATFORM_SUNOS = 'SunOS';<br />	const PLATFORM_OPENSOLARIS = 'OpenSolaris';<br />	const PLATFORM_ANDROID = 'Android';<br />	<br />	const OPERATING_SYSTEM_UNKNOWN = 'unknown';<br /><br />	public function Browser($useragent="") {<br />		$this->reset();<br />		if( $useragent != "" ) {<br />			$this->setUserAgent($useragent);<br />		}<br />		else {<br />			$this->determine();<br />		}<br />	}<br /><br />	/**<br />	* Reset all properties<br />	*/<br />	public function reset() {<br />		$this->_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : "";<br />		$this->_browser_name = self::BROWSER_UNKNOWN;<br />		$this->_version = self::VERSION_UNKNOWN;<br />		$this->_platform = self::PLATFORM_UNKNOWN;<br />		$this->_os = self::OPERATING_SYSTEM_UNKNOWN;<br />		$this->_is_aol = false;<br />		$this->_is_mobile = false;<br />		$this->_is_robot = false;<br />		$this->_aol_version = self::VERSION_UNKNOWN;<br />	}<br /><br />	/**<br />	* Check to see if the specific browser is valid<br />	* @param string $browserName<br />	* @return True if the browser is the specified browser<br />	*/<br />	function isBrowser($browserName) { return( 0 == strcasecmp($this->_browser_name, trim($browserName))); }<br /><br />	/**<br />	* The name of the browser.  All return types are from the class contants<br />	* @return string Name of the browser<br />	*/<br />	public function getBrowser() { return $this->_browser_name; }<br />	/**<br />	* Set the name of the browser<br />	* @param $browser The name of the Browser<br />	*/<br />	public function setBrowser($browser) { return $this->_browser_name = $browser; }<br />	/**<br />	* The name of the platform.  All return types are from the class contants<br />	* @return string Name of the browser<br />	*/<br />	public function getPlatform() { return $this->_platform; }<br />	/**<br />	* Set the name of the platform<br />	* @param $platform The name of the Platform<br />	*/<br />	public function setPlatform($platform) { return $this->_platform = $platform; }<br />	/**<br />	* The version of the browser.<br />	* @return string Version of the browser (will only contain alpha-numeric characters and a period)<br />	*/<br />	public function getVersion() { return $this->_version; }<br />	/**<br />	* Set the version of the browser<br />	* @param $version The version of the Browser<br />	*/<br />	public function setVersion($version) { $this->_version = preg_replace('/[^0-9,.,a-z,A-Z-]/','',$version); }<br />	/**<br />	* The version of AOL.<br />	* @return string Version of AOL (will only contain alpha-numeric characters and a period)<br />	*/<br />	public function getAolVersion() { return $this->_aol_version; }<br />	/**<br />	* Set the version of AOL<br />	* @param $version The version of AOL<br />	*/<br />	public function setAolVersion($version) { $this->_aol_version = preg_replace('/[^0-9,.,a-z,A-Z]/','',$version); }<br />	/**<br />	* Is the browser from AOL?<br />	* @return boolean True if the browser is from AOL otherwise false<br />	*/<br />	public function isAol() { return $this->_is_aol; }<br />	/**<br />	* Is the browser from a mobile device?<br />	* @return boolean True if the browser is from a mobile device otherwise false<br />	*/<br />	public function isMobile() { return $this->_is_mobile; }<br />	/**<br />	* Is the browser from a robot (ex Slurp,GoogleBot)?<br />	* @return boolean True if the browser is from a robot otherwise false<br />	*/<br />	public function isRobot() { return $this->_is_robot; }<br />	/**<br />	* Set the browser to be from AOL<br />	* @param $isAol<br />	*/<br />	public function setAol($isAol) { $this->_is_aol = $isAol; }<br />	/**<br />	 * Set the Browser to be mobile<br />	 * @param boolean $value is the browser a mobile brower or not<br />	 */<br />	protected function setMobile($value=true) { $this->_is_mobile = $value; }<br />	/**<br />	 * Set the Browser to be a robot<br />	 * @param boolean $value is the browser a robot or not<br />	 */<br />	protected function setRobot($value=true) { $this->_is_robot = $value; }<br />	/**<br />	* Get the user agent value in use to determine the browser<br />	* @return string The user agent from the HTTP header<br />	*/<br />	public function getUserAgent() { return $this->_agent; }<br />	/**<br />	* Set the user agent value (the construction will use the HTTP header value - this will overwrite it)<br />	* @param $agent_string The value for the User Agent<br />	*/<br />	public function setUserAgent($agent_string) {<br />		$this->reset();<br />		$this->_agent = $agent_string;<br />		$this->determine();<br />	}<br />	/**<br />	 * Used to determine if the browser is actually "chromeframe"<br />	 * @since 1.7<br />	 * @return boolean True if the browser is using chromeframe<br />	 */<br />	public function isChromeFrame() {<br />		return( strpos($this->_agent,"chromeframe") !== false );<br />	}<br />	/**<br />	* Returns a formatted string with a summary of the details of the browser.<br />	* @return string formatted string with a summary of the browser<br />	*/<br />	public function __toString() {<br />		return "<strong>Browser Name:</strong>{$this->getBrowser()}<br/>\n" .<br />		   "<strong>Browser Version:</strong>{$this->getVersion()}<br/>\n" .<br />		   "<strong>Browser User Agent String:</strong>{$this->getUserAgent()}<br/>\n" .<br />		   "<strong>Platform:</strong>{$this->getPlatform()}<br/>";<br />	}<br />	/**<br />	 * Protected routine to calculate and determine what the browser is in use (including platform)<br />	 */<br />	protected function determine() {<br />		$this->checkPlatform();<br />		$this->checkBrowsers();<br />		$this->checkForAol();<br />	}<br />	/**<br />	 * Protected routine to determine the browser type<br />	 * @return boolean True if the browser was detected otherwise false<br />	 */<br />	 protected function checkBrowsers() {<br />		return (<br />			// well-known, well-used<br />			// Special Notes:<br />			// (1) Opera must be checked before FireFox due to the odd<br />			// user agents used in some older versions of Opera<br />			// (2) WebTV is strapped onto Internet Explorer so we must<br />			// check for WebTV before IE<br />			// (3) (deprecated) Galeon is based on Firefox and needs to be<br />			// tested before Firefox is tested<br />			// (4) OmniWeb is based on Safari so OmniWeb check must occur<br />			// before Safari<br />			// (5) Netscape 9+ is based on Firefox so Netscape checks<br />			// before FireFox are necessary<br />			$this->checkBrowserWebTv() ||<br />			$this->checkBrowserInternetExplorer() ||<br />			$this->checkBrowserOpera() ||<br />			$this->checkBrowserGaleon() ||<br />			$this->checkBrowserNetscapeNavigator9Plus() ||<br />			$this->checkBrowserFirefox() ||<br />			$this->checkBrowserChrome() ||<br />			$this->checkBrowserOmniWeb() ||<br /><br />			// common mobile<br />			$this->checkBrowserAndroid() ||<br />			$this->checkBrowseriPad() ||<br />			$this->checkBrowseriPod() ||<br />			$this->checkBrowseriPhone() ||<br />			$this->checkBrowserBlackBerry() ||<br />			$this->checkBrowserNokia() ||<br /><br />			// common bots<br />			$this->checkBrowserGoogleBot() ||<br />			$this->checkBrowserMSNBot() ||<br />			$this->checkBrowserSlurp() ||<br /><br />			// WebKit base check (post mobile and others)<br />			$this->checkBrowserSafari() ||<br />			<br />			// everyone else<br />			$this->checkBrowserNetPositive() ||<br />			$this->checkBrowserFirebird() ||<br />			$this->checkBrowserKonqueror() ||<br />			$this->checkBrowserIcab() ||<br />			$this->checkBrowserPhoenix() ||<br />			$this->checkBrowserAmaya() ||<br />			$this->checkBrowserLynx() ||<br />			$this->checkBrowserShiretoko() ||<br />			$this->checkBrowserIceCat() ||<br />			$this->checkBrowserW3CValidator() ||<br />			$this->checkBrowserMozilla() /* Mozilla is such an open standard that you must check it last */<br />		);<br />	}<br /><br />	/**<br />	 * Determine if the user is using a BlackBerry (last updated 1.7)<br />	 * @return boolean True if the browser is the BlackBerry browser otherwise false<br />	 */<br />	protected function checkBrowserBlackBerry() {<br />		if( stripos($this->_agent,'blackberry') !== false ) {<br />			$aresult = explode("/",stristr($this->_agent,"BlackBerry"));<br />			$aversion = explode(' ',$aresult[1]);<br />			$this->setVersion($aversion[0]);<br />			$this->_browser_name = self::BROWSER_BLACKBERRY;<br />			$this->setMobile(true);<br />			return true;<br />		}<br />		return false;<br />	}<br /><br />	/**<br />	 * Determine if the user is using an AOL User Agent (last updated 1.7)<br />	 * @return boolean True if the browser is from AOL otherwise false<br />	 */<br />	protected function checkForAol() {<br />			$this->setAol(false);<br />			$this->setAolVersion(self::VERSION_UNKNOWN);<br /><br />			if( stripos($this->_agent,'aol') !== false ) {<br />			$aversion = explode(' ',stristr($this->_agent, 'AOL'));<br />			$this->setAol(true);<br />			$this->setAolVersion(preg_replace('/[^0-9\.a-z]/i', '', $aversion[1]));<br />			return true;<br />		}<br />		return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is the GoogleBot or not (last updated 1.7)<br />	 * @return boolean True if the browser is the GoogletBot otherwise false<br />	 */<br />	protected function checkBrowserGoogleBot() {<br />		if( stripos($this->_agent,'googlebot') !== false ) {<br />				$aresult = explode('/',stristr($this->_agent,'googlebot'));<br />				$aversion = explode(' ',$aresult[1]);<br />				$this->setVersion(str_replace(';','',$aversion[0]));<br />				$this->_browser_name = self::BROWSER_GOOGLEBOT;<br />				$this->setRobot(true);<br />				return true;<br />		}<br />		return false;<br />	}<br /><br />		/**<br />	 * Determine if the browser is the MSNBot or not (last updated 1.9)<br />	 * @return boolean True if the browser is the MSNBot otherwise false<br />	 */<br />		protected function checkBrowserMSNBot() {<br />			if( stripos($this->_agent,"msnbot") !== false ) {<br />				$aresult = explode("/",stristr($this->_agent,"msnbot"));<br />				$aversion = explode(" ",$aresult[1]);<br />				$this->setVersion(str_replace(";","",$aversion[0]));<br />				$this->_browser_name = self::BROWSER_MSNBOT;<br />				$this->setRobot(true);<br />				return true;<br />			}<br />			return false;<br />		}	<br />	<br />	/**<br />	 * Determine if the browser is the W3C Validator or not (last updated 1.7)<br />	 * @return boolean True if the browser is the W3C Validator otherwise false<br />	 */<br />	protected function checkBrowserW3CValidator() {<br />		if( stripos($this->_agent,'W3C-checklink') !== false ) {<br />			$aresult = explode('/',stristr($this->_agent,'W3C-checklink'));<br />			$aversion = explode(' ',$aresult[1]);<br />			$this->setVersion($aversion[0]);<br />			$this->_browser_name = self::BROWSER_W3CVALIDATOR;<br />			return true;<br />		}<br />		else if( stripos($this->_agent,'W3C_Validator') !== false ) {<br />				// Some of the Validator versions do not delineate w/ a slash - add it back in<br />				$ua = str_replace("W3C_Validator ", "W3C_Validator/", $this->_agent);<br />			$aresult = explode('/',stristr($ua,'W3C_Validator'));<br />			$aversion = explode(' ',$aresult[1]);<br />			$this->setVersion($aversion[0]);<br />			$this->_browser_name = self::BROWSER_W3CVALIDATOR;<br />			return true;<br />		}<br />		return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is the Yahoo! Slurp Robot or not (last updated 1.7)<br />	 * @return boolean True if the browser is the Yahoo! Slurp Robot otherwise false<br />	 */<br />	protected function checkBrowserSlurp() {<br />		if( stripos($this->_agent,'slurp') !== false ) {<br />			$aresult = explode('/',stristr($this->_agent,'Slurp'));<br />			$aversion = explode(' ',$aresult[1]);<br />			$this->setVersion($aversion[0]);<br />			$this->_browser_name = self::BROWSER_SLURP;<br />				$this->setRobot(true);<br />				$this->setMobile(false);<br />			return true;<br />		}<br />		return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is Internet Explorer or not (last updated 1.7)<br />	 * @return boolean True if the browser is Internet Explorer otherwise false<br />	 */<br />	protected function checkBrowserInternetExplorer() {<br /><br />		// Test for v1 - v1.5 IE<br />		if( stripos($this->_agent,'microsoft internet explorer') !== false ) {<br />			$this->setBrowser(self::BROWSER_IE);<br />			$this->setVersion('1.0');<br />			$aresult = stristr($this->_agent, '/');<br />			if( preg_match('/308|425|426|474|0b1/i', $aresult) ) {<br />				$this->setVersion('1.5');<br />			}<br />				return true;<br />		}<br />		// Test for versions > 1.5<br />		else if( stripos($this->_agent,'msie') !== false && stripos($this->_agent,'opera') === false ) {<br />			// See if the browser is the odd MSN Explorer<br />			if( stripos($this->_agent,'msnb') !== false ) {<br />				$aresult = explode(' ',stristr(str_replace(';','; ',$this->_agent),'MSN'));<br />				$this->setBrowser( self::BROWSER_MSN );<br />				$this->setVersion(str_replace(array('(',')',';'),'',$aresult[1]));<br />				return true;<br />			}<br />			$aresult = explode(' ',stristr(str_replace(';','; ',$this->_agent),'msie'));<br />			$this->setBrowser( self::BROWSER_IE );<br />			$this->setVersion(str_replace(array('(',')',';'),'',$aresult[1]));<br />			return true;<br />		}<br />		// Test for Pocket IE<br />		else if( stripos($this->_agent,'mspie') !== false || stripos($this->_agent,'pocket') !== false ) {<br />			$aresult = explode(' ',stristr($this->_agent,'mspie'));<br />			$this->setPlatform( self::PLATFORM_WINDOWS_CE );<br />			$this->setBrowser( self::BROWSER_POCKET_IE );<br />			$this->setMobile(true);<br /><br />			if( stripos($this->_agent,'mspie') !== false ) {<br />				$this->setVersion($aresult[1]);<br />			}<br />			else {<br />				$aversion = explode('/',$this->_agent);<br />				$this->setVersion($aversion[1]);<br />			}<br />			return true;<br />		}<br />			return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is Opera or not (last updated 1.7)<br />	 * @return boolean True if the browser is Opera otherwise false<br />	 */<br />	protected function checkBrowserOpera() {<br />		if( stripos($this->_agent,'opera mini') !== false ) {<br />			$resultant = stristr($this->_agent, 'opera mini');<br />			if( preg_match('/\//',$resultant) ) {<br />				$aresult = explode('/',$resultant);<br />				$aversion = explode(' ',$aresult[1]);<br />				$this->setVersion($aversion[0]);<br />				}<br />			else {<br />				$aversion = explode(' ',stristr($resultant,'opera mini'));<br />				$this->setVersion($aversion[1]);<br />			}<br />			$this->_browser_name = self::BROWSER_OPERA_MINI;<br />				$this->setMobile(true);<br />				return true;<br />		}<br />		else if( stripos($this->_agent,'opera') !== false ) {<br />			$resultant = stristr($this->_agent, 'opera');<br />			if( preg_match('/Version\/(10.*)$/',$resultant,$matches) ) {<br />				$this->setVersion($matches[1]);<br />			}<br />			else if( preg_match('/\//',$resultant) ) {<br />				$aresult = explode('/',str_replace("("," ",$resultant));<br />				$aversion = explode(' ',$aresult[1]);<br />				$this->setVersion($aversion[0]);<br />			}<br />			else {<br />				$aversion = explode(' ',stristr($resultant,'opera'));<br />				$this->setVersion(isset($aversion[1])?$aversion[1]:"");<br />			}<br />			$this->_browser_name = self::BROWSER_OPERA;<br />			return true;<br />		}<br />			return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is Chrome or not (last updated 1.7)<br />	 * @return boolean True if the browser is Chrome otherwise false<br />	 */<br />	protected function checkBrowserChrome() {<br />		if( stripos($this->_agent,'Chrome') !== false ) {<br />			$aresult = explode('/',stristr($this->_agent,'Chrome'));<br />			$aversion = explode(' ',$aresult[1]);<br />			$this->setVersion($aversion[0]);<br />			$this->setBrowser(self::BROWSER_CHROME);<br />			return true;<br />		}<br />		return false;<br />	}<br /><br /><br />	/**<br />	 * Determine if the browser is WebTv or not (last updated 1.7)<br />	 * @return boolean True if the browser is WebTv otherwise false<br />	 */<br />	protected function checkBrowserWebTv() {<br />		if( stripos($this->_agent,'webtv') !== false ) {<br />			$aresult = explode('/',stristr($this->_agent,'webtv'));<br />			$aversion = explode(' ',$aresult[1]);<br />			$this->setVersion($aversion[0]);<br />			$this->setBrowser(self::BROWSER_WEBTV);<br />			return true;<br />		}<br />		return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is NetPositive or not (last updated 1.7)<br />	 * @return boolean True if the browser is NetPositive otherwise false<br />	 */<br />	protected function checkBrowserNetPositive() {<br />		if( stripos($this->_agent,'NetPositive') !== false ) {<br />			$aresult = explode('/',stristr($this->_agent,'NetPositive'));<br />			$aversion = explode(' ',$aresult[1]);<br />			$this->setVersion(str_replace(array('(',')',';'),'',$aversion[0]));<br />			$this->setBrowser(self::BROWSER_NETPOSITIVE);<br />			return true;<br />		}<br />		return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is Galeon or not (last updated 1.7)<br />	 * @return boolean True if the browser is Galeon otherwise false<br />	 */<br />	protected function checkBrowserGaleon() {<br />		if( stripos($this->_agent,'galeon') !== false ) {<br />			$aresult = explode(' ',stristr($this->_agent,'galeon'));<br />			$aversion = explode('/',$aresult[0]);<br />			$this->setVersion($aversion[1]);<br />			$this->setBrowser(self::BROWSER_GALEON);<br />			return true;<br />		}<br />		return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is Konqueror or not (last updated 1.7)<br />	 * @return boolean True if the browser is Konqueror otherwise false<br />	 */<br />	protected function checkBrowserKonqueror() {<br />		if( stripos($this->_agent,'Konqueror') !== false ) {<br />			$aresult = explode(' ',stristr($this->_agent,'Konqueror'));<br />			$aversion = explode('/',$aresult[0]);<br />			$this->setVersion($aversion[1]);<br />			$this->setBrowser(self::BROWSER_KONQUEROR);<br />			return true;<br />		}<br />		return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is iCab or not (last updated 1.7)<br />	 * @return boolean True if the browser is iCab otherwise false<br />	 */<br />	protected function checkBrowserIcab() {<br />		if( stripos($this->_agent,'icab') !== false ) {<br />			$aversion = explode(' ',stristr(str_replace('/',' ',$this->_agent),'icab'));<br />			$this->setVersion($aversion[1]);<br />			$this->setBrowser(self::BROWSER_ICAB);<br />			return true;<br />		}<br />		return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is OmniWeb or not (last updated 1.7)<br />	 * @return boolean True if the browser is OmniWeb otherwise false<br />	 */<br />	protected function checkBrowserOmniWeb() {<br />		if( stripos($this->_agent,'omniweb') !== false ) {<br />			$aresult = explode('/',stristr($this->_agent,'omniweb'));<br />			$aversion = explode(' ',isset($aresult[1])?$aresult[1]:"");<br />			$this->setVersion($aversion[0]);<br />			$this->setBrowser(self::BROWSER_OMNIWEB);<br />			return true;<br />		}<br />		return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is Phoenix or not (last updated 1.7)<br />	 * @return boolean True if the browser is Phoenix otherwise false<br />	 */<br />	protected function checkBrowserPhoenix() {<br />		if( stripos($this->_agent,'Phoenix') !== false ) {<br />			$aversion = explode('/',stristr($this->_agent,'Phoenix'));<br />			$this->setVersion($aversion[1]);<br />			$this->setBrowser(self::BROWSER_PHOENIX);<br />			return true;<br />		}<br />		return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is Firebird or not (last updated 1.7)<br />	 * @return boolean True if the browser is Firebird otherwise false<br />	 */<br />	protected function checkBrowserFirebird() {<br />		if( stripos($this->_agent,'Firebird') !== false ) {<br />			$aversion = explode('/',stristr($this->_agent,'Firebird'));<br />			$this->setVersion($aversion[1]);<br />			$this->setBrowser(self::BROWSER_FIREBIRD);<br />				return true;<br />		}<br />		return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is Netscape Navigator 9+ or not (last updated 1.7)<br />		 * NOTE: (http://browser.netscape.com/ - Official support ended on March 1st, 2008)<br />	 * @return boolean True if the browser is Netscape Navigator 9+ otherwise false<br />	 */<br />	protected function checkBrowserNetscapeNavigator9Plus() {<br />		if( stripos($this->_agent,'Firefox') !== false && preg_match('/Navigator\/([^ ]*)/i',$this->_agent,$matches) ) {<br />			$this->setVersion($matches[1]);<br />			$this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR);<br />			return true;<br />		}<br />		else if( stripos($this->_agent,'Firefox') === false && preg_match('/Netscape6?\/([^ ]*)/i',$this->_agent,$matches) ) {<br />			$this->setVersion($matches[1]);<br />			$this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR);<br />			return true;<br />		}<br />		return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is Shiretoko or not (https://wiki.mozilla.org/Projects/shiretoko) (last updated 1.7)<br />	 * @return boolean True if the browser is Shiretoko otherwise false<br />	 */<br />	protected function checkBrowserShiretoko() {<br />		if( stripos($this->_agent,'Mozilla') !== false && preg_match('/Shiretoko\/([^ ]*)/i',$this->_agent,$matches) ) {<br />			$this->setVersion($matches[1]);<br />			$this->setBrowser(self::BROWSER_SHIRETOKO);<br />			return true;<br />		}<br />		return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is Ice Cat or not (http://en.wikipedia.org/wiki/GNU_IceCat) (last updated 1.7)<br />	 * @return boolean True if the browser is Ice Cat otherwise false<br />	 */<br />	protected function checkBrowserIceCat() {<br />		if( stripos($this->_agent,'Mozilla') !== false && preg_match('/IceCat\/([^ ]*)/i',$this->_agent,$matches) ) {<br />			$this->setVersion($matches[1]);<br />			$this->setBrowser(self::BROWSER_ICECAT);<br />			return true;<br />		}<br />		return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is Nokia or not (last updated 1.7)<br />	 * @return boolean True if the browser is Nokia otherwise false<br />	 */<br />	protected function checkBrowserNokia() {<br />		if( preg_match("/Nokia([^\/]+)\/([^ SP]+)/i",$this->_agent,$matches) ) {<br />			$this->setVersion($matches[2]);<br />				if( stripos($this->_agent,'Series60') !== false || strpos($this->_agent,'S60') !== false ) {<br />					$this->setBrowser(self::BROWSER_NOKIA_S60);<br />				}<br />				else {<br />					$this->setBrowser( self::BROWSER_NOKIA );<br />				}<br />			$this->setMobile(true);<br />			return true;<br />		}<br />			return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is Firefox or not (last updated 1.7)<br />	 * @return boolean True if the browser is Firefox otherwise false<br />	 */<br />	protected function checkBrowserFirefox() {<br />		if( stripos($this->_agent,'safari') === false ) {<br />				if( preg_match("/Firefox[\/ \(]([^ ;\)]+)/i",$this->_agent,$matches) ) {<br />					$this->setVersion($matches[1]);<br />					$this->setBrowser(self::BROWSER_FIREFOX);<br />					return true;<br />				}<br />				else if( preg_match("/Firefox$/i",$this->_agent,$matches) ) {<br />					$this->setVersion("");<br />					$this->setBrowser(self::BROWSER_FIREFOX);<br />					return true;<br />				}<br />			}<br />		return false;<br />	}<br /><br />		/**<br />	 * Determine if the browser is Firefox or not (last updated 1.7)<br />	 * @return boolean True if the browser is Firefox otherwise false<br />	 */<br />	protected function checkBrowserIceweasel() {<br />			if( stripos($this->_agent,'Iceweasel') !== false ) {<br />				$aresult = explode('/',stristr($this->_agent,'Iceweasel'));<br />				$aversion = explode(' ',$aresult[1]);<br />				$this->setVersion($aversion[0]);<br />				$this->setBrowser(self::BROWSER_ICEWEASEL);<br />				return true;<br />			}<br />			return false;<br />		}<br />	/**<br />	 * Determine if the browser is Mozilla or not (last updated 1.7)<br />	 * @return boolean True if the browser is Mozilla otherwise false<br />	 */<br />	protected function checkBrowserMozilla() {<br />		if( stripos($this->_agent,'mozilla') !== false  && preg_match('/rv:[0-9].[0-9][a-b]?/i',$this->_agent) && stripos($this->_agent,'netscape') === false) {<br />			$aversion = explode(' ',stristr($this->_agent,'rv:'));<br />			preg_match('/rv:[0-9].[0-9][a-b]?/i',$this->_agent,$aversion);<br />			$this->setVersion(str_replace('rv:','',$aversion[0]));<br />			$this->setBrowser(self::BROWSER_MOZILLA);<br />			return true;<br />		}<br />		else if( stripos($this->_agent,'mozilla') !== false && preg_match('/rv:[0-9]\.[0-9]/i',$this->_agent) && stripos($this->_agent,'netscape') === false ) {<br />			$aversion = explode('',stristr($this->_agent,'rv:'));<br />			$this->setVersion(str_replace('rv:','',$aversion[0]));<br />			$this->setBrowser(self::BROWSER_MOZILLA);<br />			return true;<br />		}<br />		else if( stripos($this->_agent,'mozilla') !== false  && preg_match('/mozilla\/([^ ]*)/i',$this->_agent,$matches) && stripos($this->_agent,'netscape') === false ) {<br />			$this->setVersion($matches[1]);<br />			$this->setBrowser(self::BROWSER_MOZILLA);<br />			return true;<br />		}<br />			return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is Lynx or not (last updated 1.7)<br />	 * @return boolean True if the browser is Lynx otherwise false<br />	 */<br />	protected function checkBrowserLynx() <br />	{<br />		if( stripos($this->_agent,'lynx') !== false ) {<br />			$aresult = explode('/',stristr($this->_agent,'Lynx'));<br />			$aversion = explode(' ',(isset($aresult[1])?$aresult[1]:""));<br />			$this->setVersion($aversion[0]);<br />			$this->setBrowser(self::BROWSER_LYNX);<br />			return true;<br />		}<br />		return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is Amaya or not (last updated 1.7)<br />	 * @return boolean True if the browser is Amaya otherwise false<br />	 */<br />	protected function checkBrowserAmaya() <br />	{<br />		if( stripos($this->_agent,'amaya') !== false ) {<br />			$aresult = explode('/',stristr($this->_agent,'Amaya'));<br />			$aversion = explode(' ',$aresult[1]);<br />			$this->setVersion($aversion[0]);<br />			$this->setBrowser(self::BROWSER_AMAYA);<br />			return true;<br />		}<br />		return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is Safari or not (last updated 1.7)<br />	 * @return boolean True if the browser is Safari otherwise false<br />	 */<br />	protected function checkBrowserSafari() <br />	{<br />		if( stripos($this->_agent,'Safari') !== false && stripos($this->_agent,'iPhone') === false && stripos($this->_agent,'iPod') === false ) {<br />			$aresult = explode('/',stristr($this->_agent,'Version'));<br />			if( isset($aresult[1]) ) {<br />				$aversion = explode(' ',$aresult[1]);<br />				$this->setVersion($aversion[0]);<br />			}<br />			else $this->setVersion(self::VERSION_UNKNOWN);<br />			$this->setBrowser(self::BROWSER_SAFARI);<br />			return true;<br />		}<br />		return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is iPhone or not (last updated 1.7)<br />	 * @return boolean True if the browser is iPhone otherwise false<br />	 */<br />	protected function checkBrowseriPhone() <br />	{<br />		if( stripos($this->_agent,'iPhone') !== false ) {<br />			$aresult = explode('/',stristr($this->_agent,'Version'));<br />			if( isset($aresult[1]) ) {<br />				$aversion = explode(' ',$aresult[1]);<br />				$this->setVersion($aversion[0]);<br />			}<br />			else $this->setVersion(self::VERSION_UNKNOWN);<br />			$this->setMobile(true);<br />			$this->setBrowser(self::BROWSER_IPHONE);<br />			return true;<br />		}<br />		return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is iPod or not (last updated 1.7)<br />	 * @return boolean True if the browser is iPod otherwise false<br />	 */<br />	protected function checkBrowseriPad() <br />	{<br />		if( stripos($this->_agent,'iPad') !== false ) {<br />			$aresult = explode('/',stristr($this->_agent,'Version'));<br />			if( isset($aresult[1]) ) {<br />				$aversion = explode(' ',$aresult[1]);<br />				$this->setVersion($aversion[0]);<br />			}<br />			else $this->setVersion(self::VERSION_UNKNOWN);<br />			$this->setMobile(true);<br />			$this->setBrowser(self::BROWSER_IPAD);<br />			return true;<br />		}<br />		return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is iPod or not (last updated 1.7)<br />	 * @return boolean True if the browser is iPod otherwise false<br />	 */<br />	protected function checkBrowseriPod() <br />	{<br />		if( stripos($this->_agent,'iPod') !== false ) {<br />			$aresult = explode('/',stristr($this->_agent,'Version'));<br />			if( isset($aresult[1]) ) {<br />				$aversion = explode(' ',$aresult[1]);<br />				$this->setVersion($aversion[0]);<br />			}<br />			else $this->setVersion(self::VERSION_UNKNOWN);<br />			$this->setMobile(true);<br />			$this->setBrowser(self::BROWSER_IPOD);<br />			return true;<br />		}<br />		return false;<br />	}<br /><br />	/**<br />	 * Determine if the browser is Android or not (last updated 1.7)<br />	 * @return boolean True if the browser is Android otherwise false<br />	 */<br />	protected function checkBrowserAndroid() <br />	{<br />		if( stripos($this->_agent,'Android') !== false ) {<br />			$aresult = explode(' ',stristr($this->_agent,'Android'));<br />			if( isset($aresult[1]) ) {<br />				$aversion = explode(' ',$aresult[1]);<br />				$this->setVersion($aversion[0]);<br />			}<br />			else $this->setVersion(self::VERSION_UNKNOWN);<br />			$this->setMobile(true);<br />			$this->setBrowser(self::BROWSER_ANDROID);<br />			return true;<br />		}<br />		return false;<br />	}<br /><br />	/**<br />	 * Determine the user's platform (last updated 1.7)<br />	 */<br />	protected function checkPlatform() <br />	{<br />		if( stripos($this->_agent, 'windows') !== false ) $this->_platform = self::PLATFORM_WINDOWS;<br />		else if( stripos($this->_agent, 'iPad') !== false ) $this->_platform = self::PLATFORM_IPAD;<br />		else if( stripos($this->_agent, 'iPod') !== false ) $this->_platform = self::PLATFORM_IPOD;<br />		else if( stripos($this->_agent, 'iPhone') !== false ) $this->_platform = self::PLATFORM_IPHONE;<br />		elseif( stripos($this->_agent, 'mac') !== false ) $this->_platform = self::PLATFORM_APPLE;<br />		elseif( stripos($this->_agent, 'android') !== false ) $this->_platform = self::PLATFORM_ANDROID;<br />		elseif( stripos($this->_agent, 'linux') !== false ) $this->_platform = self::PLATFORM_LINUX;<br />		else if( stripos($this->_agent, 'Nokia') !== false ) $this->_platform = self::PLATFORM_NOKIA;<br />		else if( stripos($this->_agent, 'BlackBerry') !== false ) $this->_platform = self::PLATFORM_BLACKBERRY;<br />		elseif( stripos($this->_agent,'FreeBSD') !== false ) $this->_platform = self::PLATFORM_FREEBSD;<br />		elseif( stripos($this->_agent,'OpenBSD') !== false ) $this->_platform = self::PLATFORM_OPENBSD;<br />		elseif( stripos($this->_agent,'NetBSD') !== false ) $this->_platform = self::PLATFORM_NETBSD;<br />		elseif( stripos($this->_agent, 'OpenSolaris') !== false ) $this->_platform = self::PLATFORM_OPENSOLARIS;<br />		elseif( stripos($this->_agent, 'SunOS') !== false ) $this->_platform = self::PLATFORM_SUNOS;<br />		elseif( stripos($this->_agent, 'OS\/2') !== false ) $this->_platform = self::PLATFORM_OS2;<br />		elseif( stripos($this->_agent, 'BeOS') !== false ) $this->_platform = self::PLATFORM_BEOS;<br />		elseif( stripos($this->_agent, 'win') !== false ) $this->_platform = self::PLATFORM_WINDOWS;<br />	}<br /><p>}

这个类的使用方法也很简单,如下:

<p>$obj_browser = new Browser; //创建一个此类的一个实例</p>$obj_browser->getBrowser(); //调用相关函数,获取浏览器名称<br />$obj_browser->getPlatform(); //调用相关函数,获取系统名称<br /><p>$obj_browser->isMobile(); //判断来访者所用设备是iPhone、iPad或者电脑(PC) </p>

ok,至此通过 php 判断浏览器类型的方法已经总结完了,三种办法,但如果要求精度不是那么高的话,第一种完全可以了,第二种,第三种办法实在有点太过精细了而且靠谱度未能确定复杂度却显而易见。


Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
How to hash strings in PHP?How to hash strings in PHP?May 15, 2025 pm 08:54 PM

Efficient hashing strings in PHP can use the following methods: 1. Use the md5 function for fast hashing, but is not suitable for password storage. 2. Use the sha256 function to improve security. 3. Use the password_hash function to process passwords to provide the highest security and convenience.

How to implement array sliding window in PHP?How to implement array sliding window in PHP?May 15, 2025 pm 08:51 PM

Implementing an array sliding window in PHP can be done by functions slideWindow and slideWindowAverage. 1. Use the slideWindow function to split an array into a fixed-size subarray. 2. Use the slideWindowAverage function to calculate the average value in each window. 3. For real-time data streams, asynchronous processing and outlier detection can be used using ReactPHP.

How to use the __clone method in PHP?How to use the __clone method in PHP?May 15, 2025 pm 08:48 PM

The __clone method in PHP is used to perform custom operations when object cloning. When cloning an object using the clone keyword, if the object has a __clone method, the method will be automatically called, allowing customized processing during the cloning process, such as resetting the reference type attribute to ensure the independence of the cloned object.

How to use goto statements in PHP?How to use goto statements in PHP?May 15, 2025 pm 08:45 PM

In PHP, goto statements are used to unconditionally jump to specific tags in the program. 1) It can simplify the processing of complex nested loops or conditional statements, but 2) Using goto may make the code difficult to understand and maintain, and 3) It is recommended to give priority to the use of structured control statements. Overall, goto should be used with caution and best practices are followed to ensure the readability and maintainability of the code.

How to implement data statistics in PHP?How to implement data statistics in PHP?May 15, 2025 pm 08:42 PM

In PHP, data statistics can be achieved by using built-in functions, custom functions, and third-party libraries. 1) Use built-in functions such as array_sum() and count() to perform basic statistics. 2) Write custom functions to calculate complex statistics such as medians. 3) Use the PHP-ML library to perform advanced statistical analysis. Through these methods, data statistics can be performed efficiently.

How to use anonymous functions in PHP?How to use anonymous functions in PHP?May 15, 2025 pm 08:39 PM

Yes, anonymous functions in PHP refer to functions without names. They can be passed as parameters to other functions and as return values ​​of functions, making the code more flexible and efficient. When using anonymous functions, you need to pay attention to scope and performance issues.

How to get the keys randomly in array_rand in PHP?How to get the keys randomly in array_rand in PHP?May 15, 2025 pm 08:36 PM

In PHP, you can use the array_rand function to get keys randomly from an array. 1) Use array_rand($array) to get a single random key. 2) Use array_rand($array,n) to get n random keys. This function is efficient and flexible, but attention should be paid to the limitation of key count and performance issues of large-scale data.

How to implement hot update of function in PHP?How to implement hot update of function in PHP?May 15, 2025 pm 08:33 PM

There are three ways to implement hot updates for functions in PHP: 1. Rewrite the function and use runkit to dynamically rewrite the function; 2. Use OPcache to realize hot updates by restarting OPcache; 3. Use external tools such as deployer or ansible to automatically deploy and update code.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment