Home Backend Development PHP Tutorial php代码兑现aes加密

php代码兑现aes加密

Jun 13, 2016 am 10:58 AM
function

php代码实现aes加密
发现php4的加密模块在php5的不被支持了,硬要加上这个模块会导致启动时候出现警告对话框。
于是花了一天时间将as3的加密类翻译成了php的,该加密类是google的开源项目
http://code.google.com/p/as3crypto/


<?phprequire_once ("PKCS5.php");require_once("AESKey.php");require_once("ECBMode.php");require_once("Hex.php");class Aes{	private $_pad;//填充方式	private $_mode;//加密类	/**	 * 构造函数	 * @param	base64keyString   密钥base64编码字符串	 */	public function Aes($base64keyString) 	{		$this->_pad = new PKCS5(); //为了与java保持一致,所以采用PKCS5填充		$key = Hex::string2ByteArray(base64_decode($base64keyString));		$this->_mode = new ECBMode(new AESKey($key), $this->_pad);		$this->_pad->setBlockSize($this->_mode->getBlockSize());	}			/**	 * 将明文加密为密文base64编码字符串	 * @param	plainSrc		 明文	 * @return	密文base64编码	 */	public function encrypt($plainSrc)	{		$src = Hex::string2ByteArray($plainSrc);		$src = $this->_mode->encrypt($src);				return base64_encode(Hex::ByteArray2String($src));	}		/**	 * 将base64编码字符串(密文)解密成 明文	 * @param	base64Src  密文base64编码字符串	 * @return	明文	 */	public function decrypt($base64Src)	{		$src = base64_decode($base64Src);		$src = $this->_mode->decrypt(Hex::string2ByteArray($src));		return Hex::byteArray2String($src);	}		/**	 * 释放内存	 */	public function dispose()	{		$this->_mode->dispose();	}}//var_dump(Hex::string2ByteArray(base64_decode("MK2X82eL6jkKbzvlJU1ZMR6rcKO+SBhmbPOmFD/2Mxw=")));$_aes = new Aes("MK2X82eL6jkKbzvlJU1ZMR6rcKO+SBhmbPOmFD/2Mxw=");//echo "=================<br>";$ret = $_aes->encrypt("1234567890abcdef1234567890abcdefaaafdsfsdffasfasfasfasdf");echo $ret;var_dump($_aes->decrypt($ret));?>
Copy after login


<?phprequire_once ("IPad.php");class PKCS5 implements IPad{	private $blockSize = 0;		public function PKCS5($blockSize=0) {		$this->blockSize = $blockSize;	}		public function pad($a)	{		$c = $this->blockSize-count($a)%$this->blockSize;		for ($i=0;$iblockSize;		if ($c!=0) throw new Exception("PKCS#5::unpad: ByteArray.length isn't a multiple of the blockSize");		$c = $a[$len-1];		array_splice($a,$len-$c,$c);		return $a;	}	public function setBlockSize($bs) 	{		$this->blockSize = $bs;	}}?>
Copy after login




<?phprequire_once ("ISymmetricKey.php");require_once("AESKeyInclude.php");require_once("Hex.php");class AESKey implements ISymmetricKey{		private $_keyByte;	private $_keyLength;	private $_nNr;	private $_stateByte;	private $_tempByte;	public function AESKey($key/*:ByteArray*/) {		$this->_tempByte = array();		$this->_stateByte = array();		$this->_keyLength = count($key);		$this->_keyByte = $key;		$this->expandKey();	}		// produce Nb bytes for each round	private function expandKey() 	{		$tmp0=0;		$tmp1=0;		$tmp2=0;		$tmp3=0;		$tmp4=0;		$idx=0;		$Nk = $this->_keyLength/4;		//echo("count:".$Nk."<br>".count($this->_keyByte)."<br>");		$this->_nNr = $Nk+6;		$_keyByte = $this->_keyByte;		$_nNr = $this->_nNr;		$Nb = AESKeyInclude::$Nb;		$Sbox = AESKeyInclude::$_Sbox;		$Rcon = AESKeyInclude::$_Rcon;				for( $idx = $Nk; $idx  6 && $idx % $Nk == 4 ) {				$tmp0 = $Sbox[$tmp0];				$tmp1 = $Sbox[$tmp1];				$tmp2 = $Sbox[$tmp2];				$tmp3 = $Sbox[$tmp3];			}				$_keyByte[4*$idx+0] = $_keyByte[4*$idx - 4*$Nk + 0] ^ $tmp0;			$_keyByte[4*$idx+1] = $_keyByte[4*$idx - 4*$Nk + 1] ^ $tmp1;			$_keyByte[4*$idx+2] = $_keyByte[4*$idx - 4*$Nk + 2] ^ $tmp2;			$_keyByte[4*$idx+3] = $_keyByte[4*$idx - 4*$Nk + 3] ^ $tmp3;		}		$this->_keyByte = $_keyByte;	}	public function getBlockSize()	{		return 16;	}		// encrypt one 128 bit block	public function encrypt($block, $index=0)	{		$_stateByte = &$this->_stateByte;		$_keyByte = &$this->_keyByte;		$Nb = AESKeyInclude::$Nb;		$_nNr = $this->_nNr;				$_stateByte = array();		$_stateByte = array_merge($_stateByte,array_slice($block,$index,$Nb*4));		$this->addRoundKey($_keyByte, 0);		for ( $round = 1; $round mixSubColumns();			} else {				$this->shiftRows();			}			$this->addRoundKey($_keyByte, $round * $Nb * 4);		}		return $_stateByte;	}		public function decrypt($block, $index=0)	{		$_stateByte = &$this->_stateByte;		$_keyByte = &$this->_keyByte;		$Nb = AESKeyInclude::$Nb;		$_nNr = $this->_nNr;				$_stateByte = array();		$_stateByte = array_merge($_stateByte,array_slice($block,$index,$Nb*4));				$this->addRoundKey($_keyByte, $_nNr*$Nb*4);		$this->invShiftRows();		for( $round = $_nNr; $round--; )		{			$this->addRoundKey( $_keyByte, $round*$Nb*4);			if ($round) {				$this->invMixSubColumns();			}		}		return $_stateByte;	}		public function dispose() {			}	// exchanges columns in each of 4 rows	// row0 - unchanged, row1- shifted left 1, 	// row2 - shifted left 2 and row3 - shifted left 3	protected function shiftRows()	{		$tmp = 0;			$_stateByte = &$this->_stateByte;		$Sbox = AESKeyInclude::$_Sbox;				// just substitute row 0		$_stateByte[0] = $Sbox[$_stateByte[0]]; $_stateByte[4] = $Sbox[$_stateByte[4]];		$_stateByte[8] = $Sbox[$_stateByte[8]]; $_stateByte[12] = $Sbox[$_stateByte[12]];			// rotate row 1		$tmp = $Sbox[$_stateByte[1]]; $_stateByte[1] = $Sbox[$_stateByte[5]];		$_stateByte[5] = $Sbox[$_stateByte[9]]; $_stateByte[9] = $Sbox[$_stateByte[13]]; $_stateByte[13] = $tmp;			// rotate row 2		$tmp = $Sbox[$_stateByte[2]]; $_stateByte[2] = $Sbox[$_stateByte[10]]; $_stateByte[10] = $tmp;		$tmp = $Sbox[$_stateByte[6]]; $_stateByte[6] = $Sbox[$_stateByte[14]]; $_stateByte[14] = $tmp;			// rotate row 3		$tmp = $Sbox[$_stateByte[15]]; $_stateByte[15] = $Sbox[$_stateByte[11]];		$_stateByte[11] = $Sbox[$_stateByte[7]]; $_stateByte[7] = $Sbox[$_stateByte[3]]; $_stateByte[3] = $tmp;			}		// restores columns in each of 4 rows	// row0 - unchanged, row1- shifted right 1, 	// row2 - shifted right 2 and row3 - shifted right 3	protected function invShiftRows ()	{		$tmp = 0;			$_stateByte = $this->_stateByte;		$InvSbox = AESKeyInclude::$_InvSbox;		// restore row 0		$_stateByte[0] = $InvSbox[$_stateByte[0]]; $_stateByte[4] = $InvSbox[$_stateByte[4]];		$_stateByte[8] = $InvSbox[$_stateByte[8]]; $_stateByte[12] = $InvSbox[$_stateByte[12]];			// restore row 1		$tmp = $InvSbox[$_stateByte[13]]; $_stateByte[13] = $InvSbox[$_stateByte[9]];		$_stateByte[9] = $InvSbox[$_stateByte[5]]; $_stateByte[5] = $InvSbox[$_stateByte[1]]; $_stateByte[1] = $tmp;			// restore row 2		$tmp = $InvSbox[$_stateByte[2]]; $_stateByte[2] = $InvSbox[$_stateByte[10]]; $_stateByte[10] = $tmp;		$tmp = $InvSbox[$_stateByte[6]]; $_stateByte[6] = $InvSbox[$_stateByte[14]]; $_stateByte[14] = $tmp;			// restore row 3		$tmp = $InvSbox[$_stateByte[3]]; $_stateByte[3] = $InvSbox[$_stateByte[7]];		$_stateByte[7] = $InvSbox[$_stateByte[11]]; $_stateByte[11] = $InvSbox[$_stateByte[15]]; $_stateByte[15] = $tmp;				$this->_stateByte = $_stateByte;	}		// recombine and mix each row in a column	protected function mixSubColumns ()	{		$_tempByte = array();//.length=0;		$Xtime2Sbox = AESKeyInclude::$_Xtime2Sbox;		$Xtime3Sbox = AESKeyInclude::$_Xtime3Sbox;		$_stateByte = &$this->_stateByte;		$Sbox = AESKeyInclude::$_Sbox;		// mixing column 0		$_tempByte[0] = $Xtime2Sbox[$_stateByte[0]] ^ $Xtime3Sbox[$_stateByte[5]] ^ $Sbox[$_stateByte[10]] ^ $Sbox[$_stateByte[15]];		$_tempByte[1] = $Sbox[$_stateByte[0]] ^ $Xtime2Sbox[$_stateByte[5]] ^ $Xtime3Sbox[$_stateByte[10]] ^ $Sbox[$_stateByte[15]];		$_tempByte[2] = $Sbox[$_stateByte[0]] ^ $Sbox[$_stateByte[5]] ^ $Xtime2Sbox[$_stateByte[10]] ^ $Xtime3Sbox[$_stateByte[15]];		$_tempByte[3] = $Xtime3Sbox[$_stateByte[0]] ^ $Sbox[$_stateByte[5]] ^ $Sbox[$_stateByte[10]] ^ $Xtime2Sbox[$_stateByte[15]];			// mixing column 1		$_tempByte[4] = $Xtime2Sbox[$_stateByte[4]] ^ $Xtime3Sbox[$_stateByte[9]] ^ $Sbox[$_stateByte[14]] ^ $Sbox[$_stateByte[3]];		$_tempByte[5] = $Sbox[$_stateByte[4]] ^ $Xtime2Sbox[$_stateByte[9]] ^ $Xtime3Sbox[$_stateByte[14]] ^ $Sbox[$_stateByte[3]];		$_tempByte[6] = $Sbox[$_stateByte[4]] ^ $Sbox[$_stateByte[9]] ^ $Xtime2Sbox[$_stateByte[14]] ^ $Xtime3Sbox[$_stateByte[3]];		$_tempByte[7] = $Xtime3Sbox[$_stateByte[4]] ^ $Sbox[$_stateByte[9]] ^ $Sbox[$_stateByte[14]] ^ $Xtime2Sbox[$_stateByte[3]];			// mixing column 2		$_tempByte[8] = $Xtime2Sbox[$_stateByte[8]] ^ $Xtime3Sbox[$_stateByte[13]] ^ $Sbox[$_stateByte[2]] ^ $Sbox[$_stateByte[7]];		$_tempByte[9] = $Sbox[$_stateByte[8]] ^ $Xtime2Sbox[$_stateByte[13]] ^ $Xtime3Sbox[$_stateByte[2]] ^ $Sbox[$_stateByte[7]];		$_tempByte[10]  = $Sbox[$_stateByte[8]] ^ $Sbox[$_stateByte[13]] ^ $Xtime2Sbox[$_stateByte[2]] ^ $Xtime3Sbox[$_stateByte[7]];		$_tempByte[11]  = $Xtime3Sbox[$_stateByte[8]] ^ $Sbox[$_stateByte[13]] ^ $Sbox[$_stateByte[2]] ^ $Xtime2Sbox[$_stateByte[7]];			// mixing column 3		$_tempByte[12] = $Xtime2Sbox[$_stateByte[12]] ^ $Xtime3Sbox[$_stateByte[1]] ^ $Sbox[$_stateByte[6]] ^ $Sbox[$_stateByte[11]];		$_tempByte[13] = $Sbox[$_stateByte[12]] ^ $Xtime2Sbox[$_stateByte[1]] ^ $Xtime3Sbox[$_stateByte[6]] ^ $Sbox[$_stateByte[11]];		$_tempByte[14] = $Sbox[$_stateByte[12]] ^ $Sbox[$_stateByte[1]] ^ $Xtime2Sbox[$_stateByte[6]] ^ $Xtime3Sbox[$_stateByte[11]];		$_tempByte[15] = $Xtime3Sbox[$_stateByte[12]] ^ $Sbox[$_stateByte[1]] ^ $Sbox[$_stateByte[6]] ^ $Xtime2Sbox[$_stateByte[11]];			/*		_stateByte.position=0;		_stateByte.writeBytes(_tempByte, 0, Nb*4);*/				$_stateByte = $_tempByte;				$this->_tempByte = $_tempByte;	}		// restore and un-mix each row in a column	protected function invMixSubColumns ()	{		$_tempByte = array();//.length=0;		$_stateByte = &$this->_stateByte;		$XtimeE = AESKeyInclude::$_XtimeE;		$XtimeB = AESKeyInclude::$_XtimeB;		$Xtime9 = AESKeyInclude::$_Xtime9;		$XtimeD = AESKeyInclude::$_XtimeD;		$InvSbox = AESKeyInclude::$_InvSbox;		$Nb = AESKeyInclude::$Nb;				// restore column 0		$_tempByte[0] = $XtimeE[$_stateByte[0]] ^ $XtimeB[$_stateByte[1]] ^ $XtimeD[$_stateByte[2]] ^ $Xtime9[$_stateByte[3]];		$_tempByte[5] = $Xtime9[$_stateByte[0]] ^ $XtimeE[$_stateByte[1]] ^ $XtimeB[$_stateByte[2]] ^ $XtimeD[$_stateByte[3]];		$_tempByte[10] = $XtimeD[$_stateByte[0]] ^ $Xtime9[$_stateByte[1]] ^ $XtimeE[$_stateByte[2]] ^ $XtimeB[$_stateByte[3]];		$_tempByte[15] = $XtimeB[$_stateByte[0]] ^ $XtimeD[$_stateByte[1]] ^ $Xtime9[$_stateByte[2]] ^ $XtimeE[$_stateByte[3]];			// restore column 1		$_tempByte[4] = $XtimeE[$_stateByte[4]] ^ $XtimeB[$_stateByte[5]] ^ $XtimeD[$_stateByte[6]] ^ $Xtime9[$_stateByte[7]];		$_tempByte[9] = $Xtime9[$_stateByte[4]] ^ $XtimeE[$_stateByte[5]] ^ $XtimeB[$_stateByte[6]] ^ $XtimeD[$_stateByte[7]];		$_tempByte[14] = $XtimeD[$_stateByte[4]] ^ $Xtime9[$_stateByte[5]] ^ $XtimeE[$_stateByte[6]] ^ $XtimeB[$_stateByte[7]];		$_tempByte[3] = $XtimeB[$_stateByte[4]] ^ $XtimeD[$_stateByte[5]] ^ $Xtime9[$_stateByte[6]] ^ $XtimeE[$_stateByte[7]];			// restore column 2		$_tempByte[8] = $XtimeE[$_stateByte[8]] ^ $XtimeB[$_stateByte[9]] ^ $XtimeD[$_stateByte[10]] ^ $Xtime9[$_stateByte[11]];		$_tempByte[13] = $Xtime9[$_stateByte[8]] ^ $XtimeE[$_stateByte[9]] ^ $XtimeB[$_stateByte[10]] ^ $XtimeD[$_stateByte[11]];		$_tempByte[2]  = $XtimeD[$_stateByte[8]] ^ $Xtime9[$_stateByte[9]] ^ $XtimeE[$_stateByte[10]] ^ $XtimeB[$_stateByte[11]];		$_tempByte[7]  = $XtimeB[$_stateByte[8]] ^ $XtimeD[$_stateByte[9]] ^ $Xtime9[$_stateByte[10]] ^ $XtimeE[$_stateByte[11]];			// restore column 3		$_tempByte[12] = $XtimeE[$_stateByte[12]] ^ $XtimeB[$_stateByte[13]] ^ $XtimeD[$_stateByte[14]] ^ $Xtime9[$_stateByte[15]];		$_tempByte[1] = $Xtime9[$_stateByte[12]] ^ $XtimeE[$_stateByte[13]] ^ $XtimeB[$_stateByte[14]] ^ $XtimeD[$_stateByte[15]];		$_tempByte[6] = $XtimeD[$_stateByte[12]] ^ $Xtime9[$_stateByte[13]] ^ $XtimeE[$_stateByte[14]] ^ $XtimeB[$_stateByte[15]];		$_tempByte[11] = $XtimeB[$_stateByte[12]] ^ $XtimeD[$_stateByte[13]] ^ $Xtime9[$_stateByte[14]] ^ $XtimeE[$_stateByte[15]];			for( $i=0; $i _stateByte;		for( $idx = 0; $idx _keyLength);	}}?>
Copy after login


<?phprequire_once ("IMode.php");require_once("ICipher.php");require_once("ISymmetricKey.php");require_once("PKCS5.php");class ECBMode implements IMode{	private $_key;	private $_padding;		public function ECBMode($key/*:ISymmetricKey*/, $padding/*:IPad*/ = NULL) 	{		$this->_key = $key;		if ($padding == NULL) {			$padding = new PKCS5($key->getBlockSize());		} else {			$padding->setBlockSize($key->getBlockSize());		}		$this->_padding = $padding;	}		public function getBlockSize() {		return $this->_key->getBlockSize();	}		public function encrypt($src) 	{		$src = $this->_padding->pad($src);		$blockSize = $this->_key->getBlockSize();		$dst = array();		$len = count($src);		for ($i=0;$i_key->encrypt($tmp);			$dst = array_merge($dst,$ret);		}		return $dst;	}		public function decrypt($src) 	{		$blockSize = $this->_key->getBlockSize();				$len = count($src);		// sanity check.		if ($len % $blockSize!=0) {			throw new Exception("ECB mode cipher length must be a multiple of blocksize ".$blockSize);		}				$tmp = array();		$dst = array();				for ($i=0;$i_key->decrypt($tmp);			$dst = array_merge($dst,$ret);		}		$dst = $this->_padding->unpad($dst);		return $dst;	}		public function dispose() 	{			}		public function toString() {		return $this->_key->toString()."-ecb";	}}?>
Copy after login



<?phpclass Hex{	static function string2ByteArray($src)	{		//$hex = bin2hex($src);		$ret = array();		$len = strlen($src);		for($i = 0; $i<$len; ++$i)		{			$ret[] = ord($src[$i]);		}		return $ret;	}		static function byteArray2String($src)	{		$ret = "";		$len = count($src);		for($i = 0; $i<$len; ++$i)		{			$ret .= chr($src[$i]);		}				return $ret;	}}?>
Copy after login



<?phpinterface ICipher{	function getBlockSize();	function encrypt($src);	function decrypt($src);	function dispose();	function toString();}?>
Copy after login



<?phprequire_once ("ICipher.php");interface IMode extends ICipher{}?>
Copy after login



<?phpinterface IPad{	/**	 * Add padding to the array	 */	function pad($a);	/**	 * Remove padding from the array.	 * @throws Error if the padding is invalid.	 */	function unpad($a);	/**	 * Set the blockSize to work on	 */	function setBlockSize($bs);}?>
Copy after login


<?phpinterface ISymmetricKey{	/**	 * Returns the block size used by this particular encryption algorithm	 */	function getBlockSize();	/**	 * Encrypt one block of data in "block", starting at "index", of length "getBlockSize()"	 */	function encrypt($block, $index);	/**	 * Decrypt one block of data in "block", starting at "index", of length "getBlockSize()"	 */	function decrypt($block, $index);	/**	 * Attempts to destroy sensitive information from memory, such as encryption keys.	 * Note: This is not guaranteed to work given the Flash sandbox model.	 */	function dispose();		function toString();}?>
Copy after login
Statement of this Website
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

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

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What does function mean? What does function mean? Aug 04, 2023 am 10:33 AM

Function means function. It is a reusable code block with specific functions. It is one of the basic components of a program. It can accept input parameters, perform specific operations, and return results. Its purpose is to encapsulate a reusable block of code. code to improve code reusability and maintainability.

What is the purpose of the 'enumerate()' function in Python? What is the purpose of the 'enumerate()' function in Python? Sep 01, 2023 am 11:29 AM

In this article, we will learn about enumerate() function and the purpose of “enumerate()” function in Python. What is the enumerate() function? Python's enumerate() function accepts a data collection as a parameter and returns an enumeration object. Enumeration objects are returned as key-value pairs. The key is the index corresponding to each item, and the value is the items. Syntax enumerate(iterable,start) Parameters iterable - The passed in data collection can be returned as an enumeration object, called iterablestart - As the name suggests, the starting index of the enumeration object is defined by start. if we ignore

Detailed explanation of the role and function of the MySQL.proc table Detailed explanation of the role and function of the MySQL.proc table Mar 16, 2024 am 09:03 AM

Detailed explanation of the role and function of the MySQL.proc table. MySQL is a popular relational database management system. When developers use MySQL, they often involve the creation and management of stored procedures (StoredProcedure). The MySQL.proc table is a very important system table. It stores information related to all stored procedures in the database, including the name, definition, parameters, etc. of the stored procedures. In this article, we will explain in detail the role and functionality of the MySQL.proc table

The usage and function of Vue.use function The usage and function of Vue.use function Jul 24, 2023 pm 06:09 PM

Usage and Function of Vue.use Function Vue is a popular front-end framework that provides many useful features and functions. One of them is the Vue.use function, which allows us to use plugins in Vue applications. This article will introduce the usage and function of the Vue.use function and provide some code examples. The basic usage of the Vue.use function is very simple, just call it before Vue is instantiated, passing in the plugin you want to use as a parameter. Here is a simple example: //Introduce and use the plug-in

What is the usage of js function What is the usage of js function Oct 07, 2023 am 11:25 AM

The usage of js function function is: 1. Declare function; 2. Call function; 3. Function parameters; 4. Function return value; 5. Anonymous function; 6. Function as parameter; 7. Function scope; 8. Recursive function.

file_exists() function in PHP file_exists() function in PHP Sep 14, 2023 am 08:29 AM

The file_exists method checks whether a file or directory exists. It accepts as argument the path of the file or directory to be checked. Here's what it's used for - it's useful when you need to know if a file exists before processing it. This way, when creating a new file, you can use this function to know if the file already exists. Syntax file_exists($file_path) Parameters file_path - Set the path of the file or directory to be checked for existence. Required. Return file_exists() method returns. Returns TrueFalse if the file or directory exists, if the file or directory does not exist Example let us see a check for "candidate.txt" file and even if the file

How to use SOA functions in PHP How to use SOA functions in PHP May 18, 2023 pm 01:10 PM

With the development of the Internet, SOA (service-oriented architecture) has become an important technical architecture in today's enterprise-level systems. Services in the SOA architecture can be reused, reorganized and extended, while also simplifying the system development and maintenance process. As a widely used Web programming language, PHP also provides some function libraries for implementing SOA. Next, we will detail how to use SOA functions in PHP. 1. The basic concept of SOA. SOA is a distributed system development idea and architecture.

clearstatcache() function in PHP clearstatcache() function in PHP Sep 07, 2023 am 09:33 AM

The clearstatcache() function is used to clear the file status cache. PHP caches the information returned by the following functions −stat()lstat()file_exists()is_writable()is_readable()is_executable()is_file()is_dir()filegroup()fileowner()filesize()filetype()fileperms() What to do To provide better performance. Syntax voidclearstatecache() Parameter NA Return value clearstatcache(

See all articles