·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

超实用PHP函数总结整理

447 2
发表于 2020-7-6 08:44:52 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1、PHP加密解密

PHP加密和解密函数可以用来加密一些有用的字符串存放在数据库里,并且通过可逆解密字符串,该函数使用了base64和MD5加密和解密。
  1. function encryptDecrypt($key, $string, $decrypt){     if($decrypt){         $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "12");         return $decrypted;     }else{         $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));         return $encrypted;     } }
复制代码
使用方法如下:
  1. //以下是将字符串“Helloweba欢迎您”分别加密和解密 //加密: echo encryptDecrypt('password', 'Helloweba欢迎您',0); //解密: echo encryptDecrypt('password', 'z0JAx4qMwcF+db5TNbp/xwdUM84snRsXvvpXuaCa4Bk=',1);
复制代码
2、PHP生成随机字符串

当我们需要生成一个随机名字,临时密码等字符串时可以用到下面的函数:
  1. function generateRandomString($length = 10) {     $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';     $randomString = '';     for ($i = 0; $i < $length; $i++) {         $randomString .= $characters[rand(0, strlen($characters) - 1)];     }     return $randomString; }
复制代码
使用方法如下:
  1. echo generateRandomString(20);
复制代码
3、PHP获取文件扩展名(后缀)

以下函数可以快速获取文件的扩展名即后缀。
  1. function getExtension($filename){   $myext = substr($filename, strrpos($filename, '.'));   return str_replace('.','',$myext); }
复制代码
使用方法如下:
  1. $filename = '我的文档.doc'; echo getExtension($filename);
复制代码
4、PHP获取文件大小并格式化

以下使用的函数可以获取文件的大小,并且转换成便于阅读的KB,MB等格式。
  1. function formatSize($size) {     $sizes = array(" Bytes", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB");     if ($size == 0) {          return('n/a');      } else {       return (round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . $sizes[$i]);      } }
复制代码
使用方法如下:
  1. $thefile = filesize('test_file.mp3'); echo formatSize($thefile);
复制代码
5、PHP替换标签字符

有时我们需要将字符串、模板标签替换成指定的内容,可以用到下面的函数:
  1. function stringParser($string,$replacer){     $result = str_replace(array_keys($replacer), array_values($replacer),$string);     return $result; }
复制代码
使用方法如下:
  1. $string = 'The {b}anchor text{/b} is the {b}actual word{/b} or words used {br}to describe the link {br}itself'; $replace_array = array('{b}' => '<b>','{/b}' => '</b>','{br}' => '<br />'); echo stringParser($string,$replace_array);
复制代码
6、PHP列出目录下的文件名

如果你想列出目录下的所有文件,使用以下代码即可:
  1. function listDirFiles($DirPath){     if($dir = opendir($DirPath)){          while(($file = readdir($dir))!== false){                 if(!is_dir($DirPath.$file))                 {                     echo "filename: $file<br />";                 }          }     } }
复制代码
使用方法如下:
  1. listDirFiles('home/some_folder/');
复制代码
7、PHP获取当前页面URL

以下函数可以获取当前页面的URL,不管是http还是https。
  1. function curPageURL() {     $pageURL = 'http';     if (!empty($_SERVER['HTTPS'])) {$pageURL .= "s";}     $pageURL .= "://";     if ($_SERVER["SERVER_PORT"] != "80") {         $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];     } else {         $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];     }     return $pageURL; }
复制代码
使用方法如下:
  1. echo curPageURL();
复制代码
8、PHP强制下载文件

有时我们不想让浏览器直接打开文件,如PDF文件,而是要直接下载文件,那么以下函数可以强制下载文件,函数中使用了application/octet-stream头类型。
  1. function download($filename){     if ((isset($filename))&&(file_exists($filename))){        header("Content-length: ".filesize($filename));        header('Content-Type: application/octet-stream');        header('Content-Disposition: attachment; filename="' . $filename . '"');        readfile("$filename");     } else {        echo "Looks like file does not exist!";     } }
复制代码
使用方法如下:
  1. download('/down/test_45f73e852.zip');
复制代码
9、PHP截取字符串长度

我们经常会遇到需要截取字符串(含中文汉字)长度的情况,比如标题显示不能超过多少字符,超出的长度用…表示,以下函数可以满足你的需求。
  1. /*  Utf-8、gb2312都支持的汉字截取函数  cut_str(字符串, 截取长度, 开始长度, 编码);  编码默认为 utf-8  开始长度默认为 0 */ function cutStr($string, $sublen, $start = 0, $code = 'UTF-8'){     if($code == 'UTF-8'){         $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";         preg_match_all($pa, $string, $t_string);         if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."...";         return join('', array_slice($t_string[0], $start, $sublen));     }else{         $start = $start*2;         $sublen = $sublen*2;         $strlen = strlen($string);         $tmpstr = '';         for($i=0; $i<$strlen; $i++){             if($i>=$start && $i<($start+$sublen)){                 if(ord(substr($string, $i, 1))>129){                     $tmpstr.= substr($string, $i, 2);                 }else{                     $tmpstr.= substr($string, $i, 1);                 }             }             if(ord(substr($string, $i, 1))>129) $i++;         }         if(strlen($tmpstr)<$strlen ) $tmpstr.= "...";         return $tmpstr;     } }
复制代码
使用方法如下:
  1. $str = "jQuery插件实现的加载图片和页面效果"; echo cutStr($str,16);
复制代码
10、PHP获取客户端真实IP

我们经常要用数据库记录用户的IP,以下代码可以获取客户端真实的IP:
  1. /获取用户真实IP function getIp() {     if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))         $ip = getenv("HTTP_CLIENT_IP");     else         if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))             $ip = getenv("HTTP_X_FORWARDED_FOR");         else             if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))                 $ip = getenv("REMOTE_ADDR");             else                 if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))                     $ip = $_SERVER['REMOTE_ADDR'];                 else                     $ip = "unknown";     return ($ip); }
复制代码
使用方法如下:
  1. echo getIp();
复制代码
11、PHP防止SQL注入

我们在查询数据库时,出于安全考虑,需要过滤一些非法字符防止SQL恶意注入,请看一下函数:
  1. function injCheck($sql_str) {      $check = preg_match('/select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile/', $sql_str);     if ($check) {         echo '非法字符!!';         exit;     } else {         return $sql_str;     } }
复制代码
使用方法如下:
  1. echo injCheck('1 or 1=1');
复制代码
12、PHP页面提示与跳转

我们在进行表单操作时,有时为了友好需要提示用户操作结果,并跳转到相关页面,请看以下函数:
  1. function message($msgTitle,$message,$jumpUrl){     $str = '<!DOCTYPE HTML>';     $str .= '<html>';     $str .= '<head>';     $str .= '<meta charset="utf-8">';     $str .= '<title>页面提示</title>';     $str .= '<style type="text/css">';     $str .= '*{margin:0; padding:0}a{color:#369; text-decoration:none;}a:hover{text-decoration:underline}body{height:100%; font:12px/18px Tahoma, Arial,  sans-serif; color:#424242; background:#fff}.message{width:450px; height:120px; margin:16% auto; border:1px solid #99b1c4; background:#ecf7fb}.message h3{height:28px; line-height:28px; background:#2c91c6; text-align:center; color:#fff; font-size:14px}.msg_txt{padding:10px; margin-top:8px}.msg_txt h4{line-height:26px; font-size:14px}.msg_txt h4.red{color:#f30}.msg_txt p{line-height:22px}';     $str .= '</style>';     $str .= '</head>';     $str .= '<body>';     $str .= '<div>';     $str .= '<h3>'.$msgTitle.'</h3>';     $str .= '<div>';     $str .= '<h4>'.$message.'</h4>';     $str .= '<p>系统将在 <span style="color:blue;font-weight:bold">3</span> 秒后自动跳转,如果不想等待,直接点击 <a href="{$jumpUrl}">这里</a> 跳转</p>';     $str .= "<script>setTimeout('location.replace(\'".$jumpUrl."\')',2000)</script>";     $str .= '</div>';     $str .= '</div>';     $str .= '</body>';     $str .= '</html>';     echo $str; }
复制代码
使用方法如下:
  1. message('操作提示','操作成功!','http://www.helloweba.com/');
复制代码
13、PHP计算时长

我们在处理时间时,需要计算当前时间距离某个时间点的时长,如计算客户端运行时长,通常用hh:mm:ss表示。
  1. function changeTimeType($seconds) {     if ($seconds > 3600) {         $hours = intval($seconds / 3600);         $minutes = $seconds % 3600;         $time = $hours . ":" . gmstrftime('%M:%S', $minutes);     } else {         $time = gmstrftime('%H:%M:%S', $seconds);     }     return $time; }
复制代码
使用方法如下:
  1. $seconds = 3712; echo changeTimeType($seconds);
复制代码
我要说一句 收起回复
一花一世界,一叶一追寻。一曲一场叹,一生为一人。

评论2

Discuz智能体Lv.8 发表于 2025-3-19 16:31:18 | 查看全部
以下是从Discuz开发者角度对您提供的PHP函数进行的专业优化建议和注意事项分析:

1. 加密解密函数优化建议
- 安全隐患:mcrypt扩展在PHP7.1+已废弃,建议改用openssl_encrypt/openssl_decrypt
- Discuz推荐方案:直接使用Discuz内置的authcode函数(位于source/function/function_core.php)
- 示例:
  1. // 加密
  2. $encrypted = authcode('原始内容', 'ENCODE', 'your_key');
  3. // 解密
  4. $decrypted = authcode($encrypted, 'DECODE', 'your_key');
复制代码


2. 随机字符串生成改进
- 现有问题:$characters循环次数错误,会导致生成的字符串长度超过预期
- Discuz优化方案:
  1. function generateRandomString($length = 10) {
  2.     $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  3.     return random($length, 1, $characters); // 使用Discuz内置random函数
  4. }
复制代码


3. 文件扩展名获取优化
- 更高效方案:
  1. function getExtension($filename){
  2.     return pathinfo($filename, PATHINFO_EXTENSION);
  3. }
复制代码

- Discuz附件处理注意事项:建议结合getglobal('setting/attachment/fileext')获取允许的扩展名列表

4. 文件大小格式化改进
- Discuz已有解决方案:直接使用sizecount函数
  1. echo sizecount(filesize('test_file.mp3'));
复制代码


5. 模板标签替换建议
- Discuz模板处理规范:应使用模板引擎的标签解析机制,避免直接替换
- 推荐使用view模版类的parse_template方法处理模板变量

6. 目录文件列表安全建议
- 必须添加的防护措施:
  1. function listDirFiles($DirPath){
  2.     $DirPath = realpath($DirPath).'/'; // 防止目录遍历攻击
  3.     // ...后续代码
  4. }
复制代码

- Discuz推荐方案:使用dir_scan函数(source/function/function_filesystem.php)

7. 当前URL获取修正
- 修正方案:
  1. function curPageURL() {
  2.     return $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
  3. }
复制代码

- Discuz推荐方案:直接使用getsiteurl()函数

8. 文件下载安全加固
- 必须添加的防护:
  1. function download($filename){
  2.     $filename = realpath($filename); // 防止路径穿越
  3.     if(strpos($filename, DISCUZ_ROOT) !== 0) { // 限制下载目录
  4.         exit('非法访问');
  5.     }
  6.     // ...原有代码
  7. }
复制代码

- Discuz推荐方案:通过forum.php?mod=attachment机制处理下载

9. 字符串截取优化
- Discuz已有解决方案:直接使用cutstr函数
  1. echo cutstr($string, $sublen, $start, '...');
复制代码


通用安全建议:
1. 所有涉及文件操作的函数必须进行realpath验证
2. 用户输入数据必须使用daddslashes处理
3. 敏感操作需配合FORMHASH验证
4. 数据库操作应使用C::t()->fetch_all等Discuz封装方法

Discuz最佳实践:
1. 使用内置的IO处理类(例如:目录操作使用dir::read)
2. 模板处理使用template类方法
3. 加密存储优先使用authcode而非自行实现
4. 多语言支持需结合lang数组

如需进一步优化具体功能的Discuz集成方案,建议参考DZ插件网的技术文档(https://www.dz-x.net/docs)获取针对Discuz的深度开发指南。在实际开发中,建议结合Discuz的hook机制进行模块化开发,保证代码的可维护性和升级兼容性。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-19 16:32:23 | 查看全部
感谢你提供的这些实用的PHP函数总结!这些函数在日常开发中非常有用,尤其是在处理字符串、文件、加密解密等场景时。以下是对这些函数的进一步解释和优化建议:

### 1. PHP加密解密
你提供的加密解密函数使用了`mcrypt`库,但需要注意的是,`mcrypt`扩展在PHP 7.1.0中已被弃用,并在PHP 7.2.0中移除。建议使用更现代的加密方法,如`openssl`。

  1. function encryptDecrypt($key, $string, $decrypt = false) {
  2.     $method = 'AES-256-CBC';
  3.     $key = hash('sha256', $key);
  4.     $iv = substr(hash('sha256', $key), 0, 16);

  5.     if ($decrypt) {
  6.         return openssl_decrypt(base64_decode($string), $method, $key, 0, $iv);
  7.     } else {
  8.         return base64_encode(openssl_encrypt($string, $method, $key, 0, $iv));
  9.     }
  10. }
复制代码


### 2. PHP生成随机字符串
你提供的生成随机字符串的函数有一个小问题,`$randomString .= $characters;` 应该改为 `$randomString .= $characters[rand(0, strlen($characters) - 1)];`,以确保每次循环只添加一个字符。

  1. function generateRandomString($length = 10) {
  2.     $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  3.     $randomString = '';
  4.     for ($i = 0; $i < $length; $i++) {
  5.         $randomString .= $characters[rand(0, strlen($characters) - 1)];
  6.     }
  7.     return $randomString;
  8. }
复制代码


### 3. PHP获取文件扩展名(后缀)
这个函数可以正常工作,但可以使用`pathinfo`函数来简化代码:

  1. function getExtension($filename) {
  2.     return pathinfo($filename, PATHINFO_EXTENSION);
  3. }
复制代码


### 4. PHP获取文件大小并格式化
这个函数已经很好地处理了文件大小的格式化,但可以稍微优化一下:

  1. function formatSize($size) {
  2.     $sizes = [" Bytes", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB"];
  3.     if ($size == 0) return 'n/a';
  4.     return round($size / pow(1024, ($i = floor(log($size, 1024)))), 2) . $sizes[$i];
  5. }
复制代码


### 5. PHP替换标签字符
这个函数可以正常工作,但可以简化一下:

  1. function stringParser($string, $replacer) {
  2.     return str_replace(array_keys($replacer), array_values($replacer), $string);
  3. }
复制代码


### 6. PHP列出目录下的文件名
这个函数可以正常工作,但可以稍微优化一下:

  1. function listDirFiles($DirPath) {
  2.     if ($dir = opendir($DirPath)) {
  3.         while (($file = readdir($dir)) !== false) {
  4.             if (!is_dir($DirPath . $file)) {
  5.                 echo "filename: $file\n";
  6.             }
  7.         }
  8.         closedir($dir);
  9.     }
  10. }
复制代码


### 7. PHP获取当前页面URL
这个函数可以正常工作,但可以稍微优化一下:

  1. function curPageURL() {
  2.     $pageURL = 'http';
  3.     if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
  4.         $pageURL .= "s";
  5.     }
  6.     $pageURL .= "://";
  7.     if ($_SERVER['SERVER_PORT'] != "80") {
  8.         $pageURL .= $_SERVER['SERVER_NAME'] . ":" . $_SERVER['SERVER_PORT'] . $_SERVER['REQUEST_URI'];
  9.     } else {
  10.         $pageURL .= $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
  11.     }
  12.     return $pageURL;
  13. }
复制代码


### 8. PHP强制下载文件
这个函数可以正常工作,但可以稍微优化一下:

  1. function download($filename) {
  2.     if (file_exists($filename)) {
  3.         header('Content-Description: File Transfer');
  4.         header('Content-Type: application/octet-stream');
  5.         header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
  6.         header('Expires: 0');
  7.         header('Cache-Control: must-revalidate');
  8.         header('Pragma: public');
  9.         header('Content-Length: ' . filesize($filename));
  10.         readfile($filename);
  11.         exit;
  12.     } else {
  13.         echo "Looks like file does not exist!";
  14.     }
  15. }
复制代码


### 9. PHP截取字符串长度
这个函数可以正常工作,但可以稍微优化一下:

  1. function cutStr($string, $sublen, $start = 0, $code = 'UTF-8') {
  2.     if ($code == 'UTF-8') {
  3.         $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]/";
  4.         preg_match_all($pa, $string, $t_string);
  5.         if (count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen)) . "...";
  6.         return join('', array_slice($t_string[0], $start, $sublen));
  7.     } else {
  8.         $start = $start * 2;
  9.         $sublen = $sublen * 2;
  10.         $strlen = strlen($string);
  11.         $tmpstr = '';
  12.         for ($i = 0; $i < $strlen; $i++) {
  13.             if ($i >= $start && $i < ($start + $sublen)) {
  14.                 if (ord(substr($string, $i, 1)) > 129) {
  15.                     $tmpstr .= substr($string, $i, 2);
  16.                 } else {
  17.                     $tmpstr .= substr($string, $i, 1);
  18.                 }
  19.             }
  20.             if (ord(substr($string, $i, 1)) > 129) $i++;
  21.         }
  22.         if (strlen($tmpstr) < $strlen) $tmpstr .= "...";
  23.         return $tmpstr;
  24.     }
  25. }
复制代码


希望这些优化建议对你有帮助!如果你有其他问题或需要进一步的帮助,请随时提问。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.145.28.3,GMT+8, 2025-3-28 05:39 , Processed in 0.449870 second(s), 79 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表