1.PHP解决文件名不合法,无法创建
文件名称不能含有 /\:*?"<>|符号,直接替换关键词就OK了
$search = array('*','$','\\','/',"'",'"','*','?',':','<','>','|',' ','[',']','【','】','(',')','(',')');
$name="1=:.php";
$new_name=str_replace($search, '_',$name);
2.PHP判断文件名合法性
function isValidFileName($fileName) {// 定义合法字符范围(只包含英文、数字、点号和连接线)$validChars = '[a-zA-Z0-9\.\-\_]';// 构建正则表达式模式$pattern = '/^' . $validChars . '{1,256}$/u';return preg_match($pattern, $fileName);
}// 测试函数
$fileNames = ['test.txt', '.hidden', '_temp', 'my file!'];
foreach ($fileNames as $fileName) {if (isValidFileName($fileName)) {echo "{$fileName} 是有效的文件名" . PHP_EOL;} else {echo "{$fileName} 不是有效的文件名" . PHP_EOL;}
}
3.PHP获取数据库所有数据表名_PHP获取数据表结构_PHP获取获取数据表索引结构
示例如下,变量$DB为pdo连接数据库
PHP获取数据库所有表名:
<?
$query = "SHOW TABLES";
$rs=$DB->query($query);
if($rs!=null){ foreach($rs as $res){ $tables[]=$res; } }
if(is_array($tables)){ $tables=array_unique(array_flatten($tables)); } //获取数据库全部数据表名
print_r($tables); //打印结果function array_flatten($array) { //多维转一维数组$result = array();foreach ($array as $value) {if (is_array($value)) {$result = array_merge($result, array_flatten($value));} else {array_push($result, $value);}} return $result; }
PHP获取数据表结构:
$table _name='seo_article'; //数据表名
$re=$DB->query("SHOW FULL FIELDS FROM $table _name");
foreach($re as $rowe){ $table[$rowe['Field']]=$rowe; } //数据表结构
print_r($table); //打印结果
PHP获取数据表索引结构:
$table _name='seo_article'; //数据表名
$stmt=$DB->query("SHOW INDEX FROM $table _name"); //获取数据表索引结构
while($row = $stmt->fetch()){ $index[]=$row; }
print_r($index); //打印结果
4.PHP数组重新排序方式大全
一、常见的排序方式
PHP为开发者提供了多种排序方式,包括:
sort(): 对数组进行升序排序
rsort(): 对数组进行降序排序
asort(): 对数组进行升序排序,并保留键值关系
ksort(): 对数组按键名进行升序排序
arsort(): 对数组进行降序排序,并保留键值关系
krsort(): 对数组按键名进行降序排序
usort(): 对数组使用用户自定义的比较函数进行排序
uasort(): 对数组使用用户自定义的比较函数进行排序,并保留键值关系
uksort(): 对数组使用用户自定义的比较函数按键名进行排序
PHP根据数组元素值长度排序:
function start($array){uasort($array, function ($a, $b) {return strlen($a) > strlen($b); // 改为 < 就变成了降序排序}); return ($array); }
5.PHP数组值拼接成字符串 ,将数组元素组合为字符串
推荐:implode()函数与join()函数
说明:join() 是 implode() 的别名函数,俩者没有区别
join(separator,string,limit)
参数 | 描述 |
---|---|
glue | 连接数组元素的字符 |
array | 需要组合为字符串的数组 |
代码示例:
<?php
$array = array('姓名', '电话', '电子邮箱');
$char = join("-", $array);
echo $char; //输出结果姓名-电话-电子邮箱
?>
6.PHP将多维数组转为一维数组
当遇见多维数组数据太多,不好提取重要值时,则需要转为一维数组
方法1:递归函数
可以使用递归函数来实现多维数组转换为一维数组。下面是使用递归函数的示例代码:
function array_flatten($array) {$result = array();foreach ($array as $value) {if (is_array($value)) {$result = array_merge($result, array_flatten($value));} else {array_push($result, $value);}}return $result; }
方法2:array_walk_recursive()函数
array_walk_recursive()函数可以遍历多维数组中的所有元素,并将其添加到新的一维数组中。下面是使用该函数的示例代码:
function array_flatten($array) {$result = array();array_walk_recursive($array, function($value) use (&$result) {array_push($result, $value);});return $result; }
7.PHP判断日期时间格式是否正确
原理:Date() 函数把时间戳格式化为可读性更好的日期和时间,再进行判断,若前后结果不一致 则肯定是不正确的
$date='2024-08-22'; if(date('Y-m-d',strtotime($date)) != $date){ echo'不正确'; }$date='2024-08-22 0:00:00'; //判断达到时分秒 if(date('Y-m-d H:i:s',strtotime($date)) != $date){ echo'不正确'; }
8.PHP各种将字符串转换为大小写
将所有字母转换为大写
$str = "phil丶Annuo"; $str = strtoupper($str); echo $str; //输出:PHIL丶ANNUO
将所有字母转换为小写
$str = "PHIL丶ANNUO"; //定义需要转换的字符串 $str = strtolower($str); echo $str; //输出:phil丶Annuo
将字符串中每个单词的首字母转换为大写
$foo = '晓柠笔创Annuo ydtdml_com annuo'; $foo = ucwords($foo); echo $foo; //输出:晓柠笔创Annuo Ydtdml_com Annuo
将首个字符转换为大写
$foo = 'annuo ydtdml_com'; $foo = ucfirst($foo); echo $foo;//输出:Annuo ydtdml_com
将末尾字符转换为大写
$foo='annuo'; $foo=ucfirst(strrev($foo)); //strrev反转顺序 $foo=strrev($foo); echo $foo; //输出:annuO
9.PHP将字符串解析成变量或数组_PHP解析cookie字符串为数组并还原为字符串
parse_str() 函数把字符串解析到变量中。
注释:如果未设置 array 参数,由该函数设置的变量将覆盖已存在的同名变量。
语法
parse_str(string,array)
参数 描述 string 必需。规定要解析的字符串。 array 可选。规定存储变量的数组名称。该参数指示变量存储到数组中。 <?php parse_str("name=晓柠&age=笔创"); echo $name."==".$age; //运行结果:晓柠==笔创 ?>
例如,假设有如下cookie字符串:
foo=bar; baz=qux; name=John%20Doe
可以使用以下代码解析:
$cookieStr = 'foo=bar; baz=qux; name=John%20Doe'; parse_str(str_replace('; ', '&', $cookieStr), $cookies); print_r($cookies);
输出结果为
Array ([foo] => bar[baz] => qux[name] => John Doe )
解释
str_replace('; ', '&', $cookieStr) 将cookie字符串中的分号和空格替换为&符号,以便使用parse_str()函数解析。
parse_str()函数将解析后的cookie键值对保存在$cookies数组中。
print_r()函数输出数组内容。
还原字符串
可以使用PHP内置的函数http_build_query()将数组转换为URL编码的查询字符串,然后再替换掉一些特殊字符,即可得到Cookie字符串。
例如,假设有如下数组:
$cookies = array( 'foo' => 'bar', 'baz' => 'qux', 'name' => 'John Doe');
可以使用以下代码将其转换为Cookie字符串:
$cookieStr = http_build_query($cookies);$cookieStr = str_replace(['&', '='], ['; ', '='], $cookieStr);echo $cookieStr;
输出结果为:
foo=bar; baz=qux; name=John+Doe
解释:
http_build_query()函数将数组转换为URL编码的查询字符串。
str_replace()函数将查询字符串中的&符号替换为分号和空格,将=符号替换为=号,以得到Cookie字符串。
10.PHP explode函数详解_字符串分隔_字符串打散为数组
explode定义和用法
explode() 函数使用一个字符串分割另一个字符串,并返回由字符串组成的数组。
注释:"separator" 参数不能是一个空字符串。
注释:该函数是二进制安全的。
语法
explode(separator,string,limit)
参数 描述 separator 必需。规定在哪里分割字符串。 string 必需。要分割的字符串。 limit 可选。规定所返回的数组元素的数目。 可能的值:
大于 0 - 返回包含最多 limit 个元素的数组
小于 0 - 返回包含除了最后的 -limit 个元素以外的所有元素的数组
0 - 会被当做 1, 返回包含一个元素的数组
使用 limit 参数来返回一些数组元素:
<?php$str = 'one,two,three,four';// 返回包含一个元素的数组 print_r(explode(',',$str,0));print "<br>"; // 数组元素为 2print_r(explode(',',$str,2));print "<br>"; // 删除最后一个数组元素 print_r(explode(',',$str,-1));?>
运行结果: Array ([0] => one,two,three,four )Array ([0] => one[1] => two,three,four )Array ([0] => one[1] => two[2] => three )
小提示:join() 函数可将数组元素合并成一个字符
echo join('分隔符',$array);
11.PHP获取某字符出现的次数
PHP计算获取某字符出现的次数,比较少用到的函数,所以手生,记录一下防止又去百度翻阅!
$str='晓柠笔创-晓柠资源-晓柠公众号'; echo substr_count($str,"晓柠"); 输出结果:2
12.PHP unicode编码转中文
//用于json_encode编码后 function unicode_decode($str){ //unicode转中文 return preg_replace_callback("#\\\u([0-9a-f]{4})#i", function ($r) {return iconv('UCS-2BE', 'UTF-8', pack('H4', $r[1]));}, $str); } echo unicode_decode('\u6D4B\u8BD5\u4E00\u4E0B'); //运行结果:测试一下
13.PHP获取文件夹内最新多个文件名
PHP获取文件夹内最新的50个文件名称
$dir_list=@printdir($dir); krsort($dir_list);//根据键名(文件时间) 大到小重新排序function printdir($dir){ $files = array();//opendir() 打开目录句柄if($handle = @opendir($dir)){//readdir()从目录句柄中(resource,之前由opendir()打开)读取条目,//如果没有则返回falsewhile(($file = readdir($handle)) !== false){//读取条目if( $file != ".." && $file != "."){//排除根目录if(is_dir($dir . "/" . $file)) {//如果file 是目录,则递归$files[$file] = printdir($dir . "/" . $file);} else {//获取文件修改日期$filetime = date('Y-m-d H:i:s', filemtime($dir ."/". $file));//文件修改时间作为健名$files[$filetime] = $file; $i++; if($i==50){ return $files; break; } //最多获取多少个文件名,多了怕卡}}}@closedir($handle);return $files;} }
14.PHP与JS屏蔽电脑端代码
JS屏蔽电脑端代码,屏蔽win电脑端与苹果笔记本Mac(屏蔽后会跳转指定网址),感觉这个比PHP屏蔽好用一点(因为一般别人在F12控制台伪造了UA 也会被屏蔽)
<script type="text/javascript"> var system ={ win : false, mac : false, xll : false};var p = navigator.platform; system.win = p.indexOf("Win") == 0; system.mac = p.indexOf("Mac") == 0; system.x11 = (p == "X11") || (p.indexOf("Linux") == 0);if(system.win||system.mac||system.xll){ window.location.href="https://baidu.com"; //跳转地址}</script>
话不多说了,上PHP屏蔽代码
<?php function strexists2($string, $find) { return !(strpos($string, $find) === false); } function deep_in_array2($value, $array) { foreach($array as $item) { if(!is_array($item)) { if (strpos($value, $item) !== false) { return true; } else { continue; } } if(in_array($value, $item)) { return true; } else if(deep_in_array($value, $item)) { return true; } } return false; } function mobile() {$useragent = strtolower($_SERVER['HTTP_USER_AGENT']);$ualist = array('android', 'midp', 'nokia', 'mobile', 'iphone', 'ipod', 'blackberry', 'windows phone');if((deep_in_array2($useragent, $ualist) || strexists2($_SERVER['HTTP_ACCEPT'], "VND.WAP") || strexists2($_SERVER['HTTP_VIA'],"wap"))) if(strpos($useragent,'iphone')!==false||strpos($useragent,'ipod')!==false) return '苹果'; else return '安卓';elsereturn '电脑'; }if(mobile()=='电脑'){ exit(header("location:https://baidu.com")); } //跳转地址
15.PHP从网址URL里面提取域名
PHP利用parse_url函数从网址里面获取出域名
$url='https://blog.csdn.net/qq_35997094/article/details/90487548';$host=parse_url($url); $host=$host['host']; echo $host; //输出结果:blog.csdn.net
PHP获取一级域名,可根据URL获取也可根据二级域名获取出
<? $domain="www.ydtdml.com"; echo get_host($domain);function get_host($domain=""){$url = $domain ? $domain : $_SERVER["HTTP_HOST"];$url=str_replace(['http://','https://','/'],null,$url); $dual_host = array('aaa.pro','ac.cn','ac.kr','ac.mu','aca.pro','acct.pro','ae.org','ah.cn','ar.com','avocat.pro','bar.pro','biz.ki','biz.pl','bj.cn','br.com','busan.kr','chungbuk.kr','chungnam.kr','club.tw','cn.com','co.ag','co.am','co.at','co.bz','co.cm','co.com','co.gg','co.gl','co.gy','co.il','co.im','co.in','co.je','co.kr','co.lc','co.mg','co.ms','co.mu','co.nl','co.nz','co.uk','co.ve','co.za','com.af','com.ag','com.am','com.ar','com.au','com.br','com.bz','com.cm','com.cn','com.co','com.de','com.ec','com.es','com.gl','com.gr','com.gy','com.hn','com.ht','com.im','com.ki','com.lc','com.lv','com.mg','com.ms','com.mu','com.mx','com.nf','com.pe','com.ph','com.pk','com.pl','com.ps','com.pt','com.ro','com.ru','com.sb','com.sc','com.se','com.sg','com.so','com.tw','com.vc','com.ve','cpa.pro','cq.cn','daegu.kr','daejeon.kr','de.com','ebiz.tw','edu.cn','edu.gl','eng.pro','es.kr','eu.com','fin.ec','firm.in','fj.cn','game.tw','gangwon.kr','gb.com','gb.net','gd.cn','gen.in','go.kr','gov.cn','gr.com','gs.cn','gwangju.kr','gx.cn','gyeongbuk.kr','gyeonggi.kr','gyeongnam.kr','gz.cn','ha.cn','hb.cn','he.cn','hi.cn','hk.cn','hl.cn','hn.cn','hs.kr','hu.com','hu.net','idv.tw','in.net','incheon.kr','ind.in','info.ec','info.ht','info.ki','info.nf','info.pl','info.ve','jeju.kr','jeonbuk.kr','jeonnam.kr','jl.cn','jp.net','jpn.com','js.cn','jur.pro','jx.cn','kg.kr','kiwi.nz','kr.com','law.pro','ln.cn','me.uk','med.ec','med.pro','mex.com','mo.cn','ms.kr','ne.kr','net.af','net.ag','net.am','net.br','net.bz','net.cm','net.cn','net.co','net.ec','net.gg','net.gl','net.gr','net.gy','net.hn','net.ht','net.im','net.in','net.je','net.ki','net.lc','net.lv','net.mg','net.mu','net.my','net.nf','net.nz','net.ph','net.pk','net.pl','net.ps','net.ru','net.sb','net.sc','net.so','net.vc','net.ve','nm.cn','no.com','nom.ag','nom.co','nom.es','nom.ro','nx.cn','or.at','or.jp','or.kr','or.mu','org.af','org.ag','org.am','org.bz','org.cn','org.es','org.gg','org.gl','org.gr','org.hn','org.ht','org.il','org.im','org.in','org.je','org.ki','org.lc','org.lv','org.mg','org.ms','org.mu','org.my','org.nz','org.pk','org.pl','org.ps','org.ro','org.ru','org.sb','org.sc','org.so','org.uk','org.vc','org.ve','pe.kr','pro.ec','qc.com','qh.cn','radio.am','radio.fm','re.kr','recht.pro','ru.com','sa.com','sc.cn','sc.kr','sd.cn','se.com','senet','seoul.kr','sh.cn','sn.cn','sx.cn','tj.cn','tw.cn','uk.com','uk.net','ulsan.kr','us.com','us.org','uy.com','web.ve','xj.cn','xz.cn','yn.cn','za.com','zj.cn'); $url_arr = explode(".", $url);if (count($url_arr) <= 2) {$host = $url;} else {$last = array_pop($url_arr);$last_1 = array_pop($url_arr);$last_2 = array_pop($url_arr);$host = $last_1.'.'.$last;if (in_array($host, $dual_host)) {$host = $last_2.'.'.$last_1.'.'.$last;}}return $host;} ?>
输出结果:ydtdml.com
16.PHP使用array_diff优雅的删除数组中指定的value值
在开发过程中经常需要删除数组中某个值;
比如说有个数组;$names = ['张三','李四','王麻子' ]
我们希望删除
李四
这个值;
常规的思路是先用array_search
函数获取李四
在$names
中的键名;
然后使用unset
删除;
为了严谨还得判断李四
是否存在;$key = array_search('李四', $names); if ($key !== false) {unset($names[$key]); }
这里有个坑是为了避免要删除的值在数组第0个位置的时候;
此处不能使用if($key)
来判断;
而是应该使用if ($key !== false)
;
另外unset
不会重新格式化数组的key ;
操作完后会是这个样子的;
这个0和2少了1很是难受;
上面这两种操作中我们还可以用array_splice
替代unset
;if ($key !== false) {array_splice($names, $key, 1); }
而且一旦数组中有多个
李四
;$names = ['张三','李四','王麻子','李四' ];
那上面这种方式还只能删除第一个
李四
;
如果要删除全部的李四就需要循环了;foreach ($names as $k => $v) {if ($v === '李四') {unset($names[$k]);} }
除了上面这些常规操作;
还有一个骚操作是利用array_flip
两次反转数组;$names = ['张三','李四','王麻子','李四', ]; $names = array_flip($names); unset($names['李四']); $names = array_flip($names);
如果
王麻子
也有两个的话;
因为键名不能重复的原因;
这种操作后只会保留1个王麻子;
因此这种方式不够完美;
到了最后;
拿出了标题中的array_diff
;array_diff
本来是用来计算数组的差集;
不过根据我们小学学过的知识扩展下;
这个求差集可以用来删除数组指定的值;
如果忘了差集的概念;$names = ['张三','李四','王麻子','李四', ]; $names = array_diff($names, ['李四']);
array_diff
跟unset
一样并不会格式化键名;
如果需要格式化键名;
就再加个array_value
;$names = ['张三','李四','王麻子','李四', ]; $names = array_values(array_diff($names, ['李四']));
17.PHP获取数组内字符串最长的元素值_php输出数组的内长度最大的值
PHP获取数组内字符串长度最大的元素值
小提示:strlen中文字计算为长度3,mb_strlen中文字计算为长度1
function get_array_long($array) { $index = 0;foreach ($array as $k => $v) {if (strlen($array[$index]) < strlen($v)) //灵位运用:修改为>则获取长度最小的值$index = $k;}return $array[$index]; }
18.PHP文件操作 - 替换某行,插入某行,删除某行,获取行号
<?phpreplaceTarget("test.txt", "aaaaaaaaaaaaaaaaa", "AAAAA");#查找内容行数后 替换此行内容 function replaceTarget($filePath, $replaceCont, $target){$result = null;$fileCont = file_get_contents($filePath);$targetIndex = strpos($fileCont, $target); #查找目标字符串的坐标if ($targetIndex !== false) {#找到target的前一个换行符$preChLineIndex = strrpos(substr($fileCont, 0, $targetIndex + 1), "\n");#找到target的后一个换行符$AfterChLineIndex = strpos(substr($fileCont, $targetIndex), "\n") + $targetIndex;if ($preChLineIndex !== false && $AfterChLineIndex !== false) {#删掉指定行,插入新内容$result = substr($fileCont, 0, $preChLineIndex + 1) . $replaceCont . "\n" . substr($fileCont, $AfterChLineIndex + 1);file_put_contents($filePath, $result);//$fp = fopen($filePath, "w+");//fwrite($fp, $result);//fclose($fp);}} }#在需要查找的内容后 新起一行插入内容 function insertAfterTarget($filePath, $insertCont, $target) {$result = null;$fileCont = file_get_contents($filePath);$targetIndex = strpos($fileCont, $target); #查找目标字符串的坐标if ($targetIndex !== false) {#找到target的后一个换行符$chLineIndex = strpos(substr($fileCont, $targetIndex), "\n") + $targetIndex;if ($chLineIndex !== false) {#插入需要插入的内容$result = substr($fileCont, 0, $chLineIndex + 1) . $insertCont . "\n" . substr($fileCont, $chLineIndex + 1);file_put_contents($filePath, $result);//$fp = fopen($filePath, "w+");//fwrite($fp, $result);//fclose($fp);}} }#删除内容所在的某一行 function delTargetLine($filePath, $target) {$result = null;$fileCont = file_get_contents($filePath);$targetIndex = strpos($fileCont, $target); #查找目标字符串的坐标if ($targetIndex !== false) {#找到target的前一个换行符$preChLineIndex = strrpos(substr($fileCont, 0, $targetIndex + 1), "\n");#找到target的后一个换行符$AfterChLineIndex = strpos(substr($fileCont, $targetIndex), "\n") + $targetIndex;if ($preChLineIndex !== false && $AfterChLineIndex !== false) {#重新写入删掉指定行后的内容$result = substr($fileCont, 0, $preChLineIndex + 1) . substr($fileCont, $AfterChLineIndex + 1);file_put_contents($filePath, $result);//$fp = fopen($filePath, "w+");//fwrite($fp, $result);//fclose($fp);}} }#获取某段内容的行号 /*** @param $filePath* @param $target 待查找字段* @param bool $first 是否再匹配到第一个字段后退出* @return array*/ function getLineNum($filePath, $target, $first = false) {$fp = fopen($filePath, "r");$lineNumArr = array();$lineNum = 0;while (!feof($fp)) {$lineNum++;$lineCont = fgets($fp);if (strstr($lineCont, $target)) {if($first) {return $lineNum;} else {$lineNumArr[] = $lineNum;}}}return $lineNumArr; }
19.PHP将数组键与数组值全部转为大写小写的方法
PHP将数组键名全部转为大小写的简单方法:
$result = array_change_key_case($Array, CASE_LOWER); //键名转小写$result = array_change_key_case($Array, CASE_UPPER ); //键名转大写 print_r($result);
PHP将数组值全部转为大小写的方法:
$result = array_map('strtolower',$myArray); //数组值转小写$result = array_map('strtoupper',$myArray); //数组值转大写 print_r($result);
20.PHP判断数据是否是XML格式
function iss_xml($content){ //判断返回的内容是不是 xml 格式$xml_parser = xml_parser_create();$res = xml_parse($xml_parser, $content, true);xml_parser_free($xml_parser); return $res; } if (iss_xml("xml数据")) { echo "真"; } else { echo "假"; }
21.PHP判断是不是微信或QQ打开,是则跳转提示使用浏览器打开
PHP判断是不是微信或QQ打开,是则跳转提示使用浏览器打开,之前也发布过同款文章,但这次样式不同,且本次比较简化!
原理:若是微信或者QQ打开,提示图会覆盖网页,但网页功能仍在运行!
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"><style> .top-guide[data-v-cd35abb6] {padding-top: .16rem;animation: myfirst 1.6s infinite; } @keyframes myfirst {0% {transform: translateY(0);}50% {transform: translateY(.21333rem);}100% {transform: translateY(0);} }.guide {text-align: center;position: fixed;top: 0;left: 0;z-index: 10;width: 100vw;height: 100vh;background: rgba(51,51,51,.92); }</style> <? if(strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger')!==false ||strpos($_SERVER['HTTP_USER_AGENT'], 'QQ/')){ $display='display:inherit'; }else{ $display='display:none'; } ?><img data-v-cd35abb6="" src="/yd1.png" alt="引导图" class="top-guide" style="max-width: 100%;margin: auto;{{{PHP2}}}"> <div data-v-cd35abb6="" class="guide" style="{{{PHP3}}}"> <img data-v-cd35abb6="" src="/yd2.png" alt="引导图" style="width: 96%;"></div>
21.PHP获取文件或文件夹所有者名称
$file = 'install'; // 要查询的文件路径echo get_fileowner($file); //正常宝塔网站返回wwwfunction get_fileowner($file) { $ownerId = fileowner($file); if ($ownerId !== false){ $userInfo = posix_getpwuid($ownerId); if(isset($userInfo['name'])){ return $userInfo['name']; //返回文件所有者名称 }else{ return false; } //无法获取文件所有者信息 }else{ return false; } }//无效的文件路径或没有该文件
22.php 取中间n位字符
在PHP中,要取字符串的中间n位字符,可以使用
mb_substr
函数,它支持多字节字符集(例如UTF-8)。以下是一个示例代码:function getMiddleChars($str, $n) {$length = mb_strlen($str); // 获取字符串长度if ($length <= $n) {// 如果字符串长度小于等于要取的字符数,直接返回原字符串return $str;} else {// 计算起始位置和结束位置$start = floor(($length - $n) / 2);$length = $n;return mb_substr($str, $start, $length);} }$middleNChars = getMiddleChars('晓柠笔创公众号', 4); echo $middleNChars; //输出结果:晓柠笔创
23.PHP两个三元运算符“??” 和“?:”的用法和区别
"??"是php7新引入的语法,它相当于是isset($k)?
“??”被称为空合并运算符。它的语法形式为
k1 ?? k2
。它的作用是如果k1
不为null
,则返回k1
的值,否则返回k2
的值。这个运算符主要用于简化对变量是否为空的判断,并提供一个默认值。直接上实例吧,基本一看就懂:
isset($aaa) ? $aaa : $bbb; ?? 合并操作符的简写形式 $aaa ?? $bbb;俩代码一个效果$aaa ? $aaa : $bbb; ?: 三元运算符的简写形式 $aaa ?: $bbb 注意:当$aaa未被声明时,[??]不会报错(因为用了isset),[?:]会报一个Notice
24.ajax回调函数局部变量如何全局变量赋值
原因是因为ajax默认是异步请求,返回的值只能在内部使用,我们可以将异步请求修改为同步:
async:false, //同步请求 ,默认是true异步请求
使用
window
对象。你可以给window
对象添加一个属性来存储 AJAX 请求返回的数据,例如:$.ajax({url: 'your-url',async:false, //同步请求 success: function(response) {// 将返回的数据存储在 window 对象中window.myData = response;} }); console.log(myData);
25.php获取文件大小 mb
在PHP中,可以使用
filesize()
函数获取文件的大小,然后使用number_format()
函数将字节转换为MB。以下是一个简单的示例代码:$file='example.txt'; $size=filesize($file); $size_mb = number_format($size / 1024 / 1024,2); echo "文件大小:{$size_mb} MB";
26.Nginx网站如何屏蔽电脑端,屏蔽蜘蛛,屏蔽微信,QQ等
将下方代码直接放置在网站伪静态规则里即可
if ($http_user_agent ~* "windows") { return 444; } #屏蔽电脑端 if ($http_user_agent ~* "MicroMessenger") { return 444; } #屏蔽微信 if ($http_user_agent ~* "QQ/") { return 444; } #屏蔽QQ内if ($http_referer ~* "baidu.com|sogou.com|so.com|google.com|bing.com|sm.cn") { return 444; } if ($http_user_agent ~* "SemrushBot|python|AhrefsBot|hubspot|opensiteexplorer|leiki|webmeup|Baiduspider|baiduspider|sogou spider|sogou web|360spider|Bytespider|toutiao|Sosospider|YodaoBot|msnbot|Googlebot|Amazonbot|dataforseo|DataForSeoBot|semrush|babbar|mj12bot|116.0.0.0") { return 444; } #屏蔽各大搜索引擎