【PHP常见问题001】
1、扫描一个文件夹下的所有文件夹和文件
<?php function my_scandir($dir) { $files = array(); if (is_dir($dir)) { if ($handle = opendir($dir)) { while (($file = readdir($handle)) !== false) { if ($file != "." && $file != "..") { if (is_dir($dir . '/' . $file)) { $files[$file] = my_scandir($dir . '/' . $file); } else { $files[] = $dir . '/' . $file; } } } closedir($handle); return $files; } } } $dir = 'D:/wwwroot/test/alipay'; var_dump(my_scandir($dir));
2、删除非空文件夹
<?php function del_dir($path) { $res = @opendir($path); if (!$res) { echo '文件或文件夹不存在'; exit(); } while ($file = readdir($res)) { if ($file != '.' && $file != '..') { $fullpath = $path . '/' . $file; if (!is_dir($fullpath)) { unlink($fullpath); } else { del_dir($fullpath); } } } } $dir = 'D:/wwwroot/test/alipay'; if (del_dir($dir)) { echo "删除成功!"; } else { echo "删除失败!"; }
3、无限极分类
//无限极函数 function treelist($data, $cid, $deep = 1) { static $tree = array(); foreach ($data as $row) { if ($row ['cid'] == $cid) { $row ['lever'] = $deep; $tree [] = $row; $this->treelist($data, $row ['id'], $deep + 1); } } return $tree; }
4、创建多级目录 PHP函数
/** * 创建多级目录 * @param $path 要创建的目录 * @param int $mode 创建目录的模式,在windows下忽略 */ function create_dir($path, $mode = 0777) { if (is_dir($path)) { echo '该目录已经存在'; } else { if (mkdir($path, $mode, true)) { echo '创建目录成功'; } else { echo '创建目录失败'; } } }
5、确保多个进程同时写入同一个文件成功
$fp = fopen("lock.txt", "w+"); if (flock($fp, LOCK_EX)) { //获得写锁,写数据 fwrite($fp, "write something"); //解除锁定 flock($fp, LOCK_UN); } else { echo "file is locking..."; } fclose($fp);
6、从一个标准的url里取出文件的拓展名
//例如:http://www.baidu.com/abc/de/f.html?id=1 function getExt($url) { $arr = parse_url($url); $file = basename($arr['path']); $ext = explode('.', $file); return $ext[count($ext) - 1]; } $url = "http://www.baidu.com/abc/de/f.html?id=1"; var_dump(getExt($url));
7、php 把数字1-1亿换成汉字表述,例如 150 转成 一百五十
function numToString($num) { $chineseNum = array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九'); $chinesePos = array('', '十', '百', '千', '万', '十', '百', '千', '亿'); $uniPro = array(4, 8); if (!is_numeric($num)) return false; //非数字返回false $numStr = (string)$num; //待转换的数字字符串 $count = strlen($numStr); //字符串的长度 $last_flag = true; //上一个是否为0 $zero_flag = true; //是否第一个 $tmp_num = null; //临时数字 $uni_index = 0; $chineseStr = ''; //待拼接的字符串,返回的结果 if ($count == 1) { //1位数 $chineseStr = $chineseNum[$numStr[0]]; } elseif ($count == 2) { //2位数 $tmp_num = $numStr[0]; //十位的数字 $chineseStr = $tmp_num == 1 ? $chinesePos[1] : $chineseNum[$tmp_num] . $chinesePos[1]; $tmp_num = $numStr[1]; //个位的数字 $chineseStr .= $tmp_num == 0 ? '' : $chineseNum[$tmp_num]; } else { //大于2位数字 $index = 0; for ($i = $count - 1; $i >= 0; $i--) { $tmp_num = $numStr[$i]; if ($tmp_num == 0) { $uni_index = $index % 8; if (in_array($uni_index, $uniPro)) { $chineseStr = $chinesePos[$uni_index] . $chineseStr; $last_flag = true; } else if (!$zero_flag && !$last_flag) { $chineseStr = $chineseNum[$tmp_num] . $chineseStr; $last_flag = true; } } else { $chineseStr = $chineseNum[$tmp_num] . $chinesePos[$index % 9] . $chineseStr; $last_flag = false; $zero_flag = false; } $index++; } } return $chineseStr; } var_dump(numToString(102305670)); //string(42) "一亿零二百三十万五千六百七十"
浙公网安备 33010602011771号