
該函數(shù)通過(guò)輔音與元音的交替組合,生成接近自然語(yǔ)言的隨機(jī)字符串,相較于純隨機(jī)字符更易于用戶記憶與識(shí)別,常用于密碼驗(yàn)證、臨時(shí)標(biāo)識(shí)碼等場(chǎng)景。函數(shù)支持自定義長(zhǎng)度(需為偶數(shù)),內(nèi)部預(yù)定義輔音數(shù)組(b,c,d,f等)與元音數(shù)組(a,e,i,o,u),通過(guò)循環(huán)交替拼接字符,確保輸出結(jié)果兼具隨機(jī)性與可讀性。
```php
/
生成可閱讀的隨機(jī)字符串
@param int $length 字符串長(zhǎng)度(需為偶數(shù))
@return string 可閱讀的隨機(jī)字符串
/
function readable_random_string($length = 6) {
$conso = array("b","c","d","f","g","h","j","k","l","m","n","p","r","s","t","v","w","x","y","z");
$vocal = array("a","e","i","o","u");
$password = "";
srand ((double)microtime()1000000);
$max = $length/2;
for($i=1; $i<=$max; $i++) {
$password .= $conso[rand(0,19)];
$password .= $vocal[rand(0,4)];
}
return $password;
}
```
當(dāng)需要高強(qiáng)度隨機(jī)字符(如用戶密碼、令牌)時(shí),該函數(shù)通過(guò)字母與數(shù)字的組合生成指定長(zhǎng)度的隨機(jī)字符串。字符集包含大小寫(xiě)字母及數(shù)字,通過(guò)循環(huán)隨機(jī)選取字符,確保輸出的隨機(jī)性適用于安全場(chǎng)景。
```php
/
生成通用隨機(jī)字符串
@param int $l 字符串長(zhǎng)度
@return string 隨機(jī)字符串
/
function generate_rand($l) {
$c = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
srand((double)microtime()1000000);
for($i=0; $i<$l; $i++) {
$rand .= $c[rand()%strlen($c)];
}
return $rand;
}
```
為防止電子郵件被爬蟲(chóng)抓取,該函數(shù)將郵箱地址轉(zhuǎn)換為HTML字符實(shí)體,并結(jié)合JavaScript動(dòng)態(tài)渲染,有效避免垃圾郵件收集。支持自定義鏈接文本與HTML屬性,適用于網(wǎng)站聯(lián)系表單等場(chǎng)景。
```php
/
編碼電子郵件地址為HTML字符實(shí)體
@param string $email 郵箱地址
@param string $linkText 鏈接顯示文本
@param string $attrs HTML屬性
@return string 編碼后的HTML代碼
/
function encode_email($email='info@domain.com', $linkText='Contact Us', $attrs='class="emailencoder"') {
$email = str_replace('@', '@', $email);
$email = str_replace('.', '.', $email);
$email = str_split($email, 5);
$linkText = str_replace('@', '@', $linkText);
$linkText = str_replace('.', '.', $linkText);
$linkText = str_split($linkText, 5);
$part1 = '';
$part4 = '';
$encoded = '';
$encoded .= "document.write('$part1');";
$encoded .= "document.write('$part2');";
foreach($email as $e) {
$encoded .= "document.write('$e');";
}
$encoded .= "document.write('$part3');";
foreach($linkText as $l) {
$encoded .= "document.write('$l');";
}
$encoded .= "document.write('$part4');";
$encoded .= '';
return $encoded;
}
```
該函數(shù)不僅驗(yàn)證郵箱格式是否符合正則規(guī)則,還可選檢查域名的MX記錄,確保郵箱地址的真實(shí)存在性。通過(guò)正則表達(dá)式匹配郵箱結(jié)構(gòu),結(jié)合`getmxrr()`函數(shù)查詢DNS記錄,適用于表單提交前的數(shù)據(jù)校驗(yàn)。
```php
/
驗(yàn)證郵箱地址有效性
@param string $email 郵箱地址
@param bool $test_mx 是否檢查MX記錄
@return bool 是否有效
/
function is_valid_email($email, $test_mx = false) {
if(eregi("^([_a-z0-9-]+)(\.[_a-z0-9-]+)@([a-z0-9-]+)(\.[a-z0-9-]+)(\.[a-z]{2,4})$", $email)) {
if($test_mx) {
list($username, $domain) = split("@", $email);
return getmxrr($domain, $mxrecords);
} else {
return true;
}
} else {
return false;
}
}
```
該函數(shù)遍歷指定目錄,過(guò)濾掉系統(tǒng)文件(如`.`、`..`、`Thumbs.db`),并以超鏈接形式輸出文件列表,支持在新窗口中打開(kāi)文件。適用于文件管理、資源展示等場(chǎng)景,需確保目錄存在且可讀。
```php
/
列出目錄內(nèi)容
@param string $dir 目錄路徑
@return void 輸出文件列表
/
function list_files($dir) {
if(is_dir($dir)) {
if($handle = opendir($dir)) {
while(($file = readdir($handle)) !== false) {
if($file != "." && $file != ".." && $file != "Thumbs.db") {
echo ''.$file.''."\n";
}
}
closedir($handle);
}
}
}
```
該函數(shù)通過(guò)遞歸遍歷目錄,逐個(gè)刪除文件及子目錄,最終刪除目標(biāo)目錄本身。支持虛擬路徑轉(zhuǎn)換,適用于臨時(shí)文件清理、目錄卸載等場(chǎng)景,需謹(jǐn)慎使用以避免誤刪重要數(shù)據(jù)。
```php
/
遞歸銷毀目錄
@param string $dir 目錄路徑
@param bool $virtual 是否為虛擬路徑
@return bool 是否成功
/
function destroyDir($dir, $virtual = false) {
$ds = DIRECTORY_SEPARATOR;
$dir = $virtual ? realpath($dir) : $dir;
$dir = substr($dir, -1) == $ds ? substr($dir, 0, -1) : $dir;
if (is_dir($dir) && $handle = opendir($dir)) {
while ($file = readdir($handle)) {
if ($file == '.' || $file == '..') {
continue;
} elseif (is_dir($dir.$ds.$file)) {
destroyDir($dir.$ds.$file);
} else {
unlink($dir.$ds.$file);
}
}
closedir($handle);
rmdir($dir);
return true;
} else {
return false;
}
}
```
JSON作為Web服務(wù)常用數(shù)據(jù)格式,該函數(shù)通過(guò)`json_decode()`將JSON字符串轉(zhuǎn)換為PHP對(duì)象,支持嵌套數(shù)據(jù)訪問(wèn)。適用于API數(shù)據(jù)解析、配置文件讀取等場(chǎng)景,需注意處理JSON解析失敗的情況。
```php
// 示例JSON字符串
$json_string = '{"id":1,"name":"foo","email":"foo@foobar.com","interest":["wordpress","php"]}';
$obj = json_decode($json_string);
echo $obj->name; // 輸出: foo
echo $obj->interest[1]; // 輸出: php
```
通過(guò)`simplexml_load_string()`函數(shù)將XML字符串轉(zhuǎn)換為SimpleXML對(duì)象,支持屬性訪問(wèn)與子節(jié)點(diǎn)遍歷。適用于配置文件解析、API響應(yīng)處理等場(chǎng)景,需確保XML格式正確。
```php
// 示例XML字符串
$xml_string = 'Foofoo@bar.comFoobarfoobar@foo.com';
$xml = simplexml_load_string($xml_string);
foreach ($xml->user as $user) {
echo $user['id'], ' '; // 輸出屬性
echo $user->name, ' '; // 輸出子節(jié)點(diǎn)
echo $user->email, '';
}
```
該函數(shù)通過(guò)正則表達(dá)式將字符串中的非字母數(shù)字字符替換為短橫線,生成URL友好的縮略名(如文章標(biāo)題轉(zhuǎn)URL)。適用于博客系統(tǒng)、CMS中的文章鏈接生成,需注意重復(fù)處理邏輯。
```php
/
創(chuàng)建URL友好的縮略名
@param string $string 原始字符串
@return string 縮略名
/
function create_slug($string) {
$slug = preg_replace('/[^A-Za-z0-9-]+/', '-', $string);
return $slug;
}
```
該函數(shù)通過(guò)依次檢查`HTTP_CLIENT_IP`、`HTTP_X_FORWARDED_FOR`和`REMOTE_ADDR`,獲取用戶的真實(shí)IP地址,即使通過(guò)代理服務(wù)器也能準(zhǔn)確識(shí)別。適用于用戶定位、訪問(wèn)統(tǒng)計(jì)等場(chǎng)景。
```php
/
獲取客戶端真實(shí)IP地址
@return string IP地址
/
function getRealIpAddr() {
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
```
該函數(shù)通過(guò)設(shè)置HTTP頭信息,使瀏覽器直接下載文件而非打開(kāi),適用于文件下載功能實(shí)現(xiàn)。需確保文件存在且可讀,支持自定義文件名與文件類型。
```php
/
強(qiáng)制文件下載
@param string $file 文件路徑
@return void 輸出文件內(nèi)容
/
function force_download($file) {
if ((isset($file)) && (file_exists($file))) {
header("Content-length: ".filesize($file));
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $file . '"');
readfile("$file");
} else {
echo "No file selected";
}
}
```
該函數(shù)根據(jù)標(biāo)簽的出現(xiàn)頻率動(dòng)態(tài)調(diào)整字體大小,生成視覺(jué)層次分明的標(biāo)簽云。支持自定義最小/最大字體大小,適用于博客標(biāo)簽、關(guān)鍵詞展示等場(chǎng)景,需傳入標(biāo)簽與計(jì)數(shù)的關(guān)聯(lián)數(shù)組。
```php
/
生成標(biāo)簽云
@param array $data 標(biāo)簽及計(jì)數(shù)數(shù)組
@param int $minFontSize 最小字體大小
@param int $maxFontSize 最大字體大小
@return string 標(biāo)簽云HTML
/
function getCloud($data = array(), $minFontSize = 12, $maxFontSize = 30) {
$minimumCount = min(array_values($data));
$maximumCount = max(array_values($data));
$spread = $maximumCount - $minimumCount;
$cloudHTML = '';
$cloudTags = array();
$spread == 0 && $spread = 1;
foreach($data as $tag => $count) {
$size = $minFontSize + ($count - $minimumCount) ($maxFontSize - $minFontSize) / $spread;
$cloudTags[] = '' . htmlspecialchars(stripslashes($tag)) . '';
}
return join("\n", $cloudTags) . "\n";
}
```
PHP內(nèi)置的`similar_text()`函數(shù)可計(jì)算兩個(gè)字符串的相似度百分比,適用于文本匹配、重復(fù)內(nèi)容檢測(cè)等場(chǎng)景。需傳入兩個(gè)字符串及用于存儲(chǔ)相似度百分比的變量。
```php
$string1 = "Hello World";
$string2 = "Hello PHP";
similar_text($string1, $string2, $percent);
echo $percent; // 輸出相似度百分比
```
Gravatar作為全球通用頭像系統(tǒng),該函數(shù)通過(guò)郵箱地址生成頭像鏈接,支持自定義大小、默認(rèn)圖片與評(píng)級(jí)。適用于用戶系統(tǒng)、評(píng)論頭像等場(chǎng)景,需調(diào)用Gravatar API。
```php
/
顯示Gravatar頭像
@param string $email 郵箱地址
@param int $size 頭像大小
@param string $default 默認(rèn)頭像URL
@param string $rating 評(píng)級(jí)(G, PG, R, X)
@return void 輸出頭像HTML
/
function show_gravatar($email, $size, $default, $rating) {
echo '';
}
```
該函數(shù)在指定位置查找最近的單詞斷點(diǎn),避免單詞被截?cái)啵m用于文章摘要、標(biāo)題截取等場(chǎng)景。支持自定義斷點(diǎn)字符(如空格)與后綴填充。
```php
/
按單詞截?cái)嘧址?/p>
@param string $string 原始字符串
@param int $limit 最大長(zhǎng)度
@param string $break 斷點(diǎn)字符
@param string $pad 后綴
@return string 截?cái)嗪蟮淖址?/p>
/
function myTruncate($string, $limit, $break=".", $pad="...") {
if(strlen($string) <= $limit) return $string;
if(false !== ($breakpoint = strpos($string, $break, $limit))) {
if($breakpoint < strlen($string) - 1) {
$string = substr($string, 0, $breakpoint) . $pad;
}
}
return $string;
}
```
該函數(shù)使用`ZipArchive`類將多個(gè)文件壓縮為ZIP包,支持自定義壓縮路徑與覆蓋選項(xiàng)。適用于文件打包、備份導(dǎo)出等場(chǎng)景,需確保目標(biāo)目錄可寫(xiě)。
```php
/
創(chuàng)建ZIP壓縮文件
@param array $files 待壓縮文件列表
@param string $destination ZIP文件路徑
@param bool $overwrite 是否覆蓋已有文件
@return bool 是否成功
/
function create_zip($files = array(), $destination = '', $overwrite = false) {
if(file_exists($destination) && !$overwrite) return false;
$valid_files = array();
if(is_array($files)) {
foreach($files as $file) {
if(file_exists($file)) $valid_files[] = $file;
}
}
if(count($valid_files)) {
$zip = new ZipArchive();
if($zip->open($destination, $overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
return false;
}
foreach($valid_files as $file) {
$zip->addFile($file, $file);
}
$zip->close();
return file_exists($destination);
} else {
return false;
}
}
```
該函數(shù)通過(guò)`ZipArchive`類打開(kāi)ZIP文件并解壓至指定目錄,適用于文件解壓、資源釋放等場(chǎng)景。需確保目標(biāo)目錄存在且可寫(xiě),處理過(guò)程中需檢查文件打開(kāi)狀態(tài)。
```php
/
解壓ZIP文件
@param string $file ZIP文件路徑
@param string $destination 解壓目標(biāo)目錄
@return void 輸出解壓結(jié)果
/
function unzip_file($file, $destination) {
$zip = new ZipArchive();
if ($zip->open($file) !== TRUE) {
die('Could not open archive');
}
$zip->extractTo($destination);
$zip->close();
echo 'Archive extracted to directory';
}
```
用戶輸入U(xiǎn)RL時(shí)常缺少`http://`前綴,該函數(shù)通過(guò)正則檢查并自動(dòng)補(bǔ)全,確保鏈接可正常訪問(wèn)。適用于表單提交中的URL處理,避免無(wú)效鏈接。
```php
if (!preg_match("/^(http|ftp):/", $_POST['url'])) {
$_POST['url'] = 'http://'.$_POST['url'];
}
```
該函數(shù)將文本中的URL、郵箱地址轉(zhuǎn)換為可點(diǎn)擊的超鏈接,支持http、https、ftp及mailto協(xié)議,適用于評(píng)論系統(tǒng)、內(nèi)容展示中的鏈接自動(dòng)識(shí)別。
```php
/
將URL和郵箱轉(zhuǎn)換為可點(diǎn)擊鏈接
@param string $text 原始文本
@return string 處理后的文本
/
function makeClickableLinks($text) {
$text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_+.~#?&//=]+)', '\1', $text);
$text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_+.~#?&//=]+)', '\1\2', $text);
$text = eregi_replace('([_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3})', '\1', $text);
return $text;
}
```
該函數(shù)通過(guò)GD庫(kù)生成圖像縮略圖,支持jpg、png、gif格式,自動(dòng)按比例縮放以保持圖像清晰度。適用于圖片壓縮、頭像生成等場(chǎng)景,需確保GD庫(kù)已啟用。
```php
/
調(diào)整圖像尺寸
@param string $filename 原圖路徑
@param string $tmpname 臨時(shí)文件路徑
@param int $xmax 最大寬度
@param int $ymax 最大高度
@return resource 縮略圖資源
/
function resize_image($filename, $tmpname, $xmax, $ymax) {
$ext = explode(".", $filename);
$ext = $ext[count($ext)-1];
if($ext == "jpg" || $ext == "jpeg") $im = imagecreatefromjpeg($tmpname);
elseif($ext == "png") $im = imagecreatefrompng($tmpname);
elseif($ext == "gif") $im = imagecreatefromgif($tmpname);
$x = imagesx($im);
$y = imagesy($im);
if($x <= $xmax && $y <= $ymax) return $im;
if($x >= $y) {
$newx = $xmax;
$newy = $newx $y / $x;
} else {
$newy = $ymax;
$newx = $x / $y $newy;
}
$im2 = imagecreatetruecolor($newx, $newy);
imagecopyresized($im2, $im, 0, 0, 0, 0, floor($newx), floor($newy), $x, $y);
return $im2;
}
```
現(xiàn)代JavaScript框架發(fā)送AJAX請(qǐng)求時(shí),會(huì)附帶`HTTP_X_REQUESTED_WITH`頭部信息,該函數(shù)通過(guò)檢查該頭部識(shí)別AJAX請(qǐng)求,適用于區(qū)分普通請(qǐng)求與AJAX請(qǐng)求,實(shí)現(xiàn)不同的響應(yīng)邏輯。
```php
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
// AJAX請(qǐng)求處理邏輯
} else {
// 普通請(qǐng)求處理邏輯
}
```