当前位置: 首页 > news >正文

PHP开发过程中常见问题快速解决

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为开发者提供了多种排序方式,包括:

  1. sort(): 对数组进行升序排序
  2. rsort(): 对数组进行降序排序
  3. asort(): 对数组进行升序排序,并保留键值关系
  4. ksort(): 对数组按键名进行升序排序
  5. arsort(): 对数组进行降序排序,并保留键值关系
  6. krsort(): 对数组按键名进行降序排序
  7. usort(): 对数组使用用户自定义的比较函数进行排序
  8. uasort(): 对数组使用用户自定义的比较函数进行排序,并保留键值关系
  9. uksort(): 对数组使用用户自定义的比较函数按键名进行排序
  10. 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
)

解释

  1. str_replace('; ', '&', $cookieStr) 将cookie字符串中的分号和空格替换为&符号,以便使用parse_str()函数解析。

  2. parse_str()函数将解析后的cookie键值对保存在$cookies数组中。

  3. 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

解释:

  1. http_build_query()函数将数组转换为URL编码的查询字符串。

  2. 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; } #屏蔽各大搜索引擎

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Kakfa的核心概念-Replica副本(kafka创建topic并指定分区和副本的两种方式)
  • 136.使用Redis 解决分布式系统下的并发问题
  • 全球卫星星座规划
  • transformers调用llama的方式
  • Transformer系列-10丨一文理解透Transformer
  • webpack打包优化方案
  • 深度学习一(Datawhale X 李宏毅苹果书 AI夏令营)
  • WHAT - graphql 系列(二)- graphql-codegen
  • 【Linux篇】Linux命令基础
  • 大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
  • 【Spring技术】
  • 校友会系统小程序的设计
  • 从web.xml动态读取sunspringmvc.xml文件
  • 重复的DNA序列(LeetCdoe)
  • 【Android】adb devices 出现devices offline的问题
  • ----------
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • Brief introduction of how to 'Call, Apply and Bind'
  • dva中组件的懒加载
  • Flex布局到底解决了什么问题
  • JavaScript 基本功--面试宝典
  • leetcode386. Lexicographical Numbers
  • linux安装openssl、swoole等扩展的具体步骤
  • Redux系列x:源码分析
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Swoft 源码剖析 - 代码自动更新机制
  • 前端路由实现-history
  • 手写一个CommonJS打包工具(一)
  • 小李飞刀:SQL题目刷起来!
  • 学习JavaScript数据结构与算法 — 树
  • 异常机制详解
  • 用mpvue开发微信小程序
  • 栈实现走出迷宫(C++)
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #HarmonyOS:Web组件的使用
  • (55)MOS管专题--->(10)MOS管的封装
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (多级缓存)多级缓存
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (算法)大数的进制转换
  • (转)Sublime Text3配置Lua运行环境
  • .bat批处理(六):替换字符串中匹配的子串
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net 使用ajax控件后如何调用前端脚本
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [20160807][系统设计的三次迭代]
  • [AIGC] Java List接口详解
  • [android] 练习PopupWindow实现对话框