## **文件管理**
> 文件管理对于企业站来说,仅仅是为了方便日常的站点维护
1.垃圾文件(如:非正常的图片上传)
2.文件的编辑(模板的编辑)
## **文件的遍历**
函数的介绍:
1. chdir 改变目录
2. getcwd 获取当前路径
3. opendir 打开目录,返回句柄资源
4. readdir(dir\_handel) 返回目录中下一个文件名
5. dirname 返回一个全路径字符串
6. filesize (filename) 文件大小(不含目录)
7. filemtime/filectime (filename) 返回被修改时间/创建时间
8. scandir(dir,sort,context)
## **文件的删除和重命名**
用到的函数
unlink
dirname 取目录名
basename 取文件名
rename 重命名
stripslashes 非法字符串过滤,(去掉反斜线字符)
### **文件排序**
用到的函数
array_column
array_multisort 后面的数组排序,会按照第一个数组排序进行
### **中文乱码的解决**
用到的函数
iconv("gb2312","utf-8",$str)字符串按要求的字符编码来转换
### **PHP fputcsv() 函数**
定义:fputcsv() 函数将行格式化为 CSV 并写入一个打开的文件。
该函数返回写入字符串的长度。若出错,则返回 false。
方法一:
function export()
{
set_time_limit(0);
ini_set('memory_limit', '256M');
header('Content-Description: File Transfer');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="' . 'aa.csv' . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
//打开php数据输入缓冲区
$fp = fopen('php://output', 'a');
$heade = ['姓名', '性别', '手机号'];
//将数据编码转换成GBK格式
mb_convert_variables('GBK', 'UTF-8', $heade);
//将数据格式化为CSV格式并写入到output流中
fputcsv($fp, $heade);
$data = [
['小明', '男', 17699019191],
['小红', '男', 17699019191],
['小黑', '女', 17699019191],
['小白', '女', 17699019191],
];
//如果在csv中输出一个空行,向句柄中写入一个空数组即可实现
foreach ($data as $row) {
//将数据编码转换成GBK格式
mb_convert_variables('GBK', 'UTF-8', $row);
fputcsv($fp, $row);
//将已经存储到csv中的变量数据销毁,释放内存
unset($row);
}
//关闭句柄
fclose($fp);
die;
}
方法二:
/*
* 该方法是把数据库读出的数据进行CSV文件输出,能接受百万级别的数据输出,因为用生成器,不用担心内存溢出。
* @param string $sql 需要导出的数据SQL
* @param string $mark 生成文件的名字前缀
*
*/
function putCsv($data, $mark)
{
set_time_limit(0);
header('Content-Type: application/vnd.ms-excel;charset=utf-8');
header('Content-Disposition: attachment;filename="' . $mark . '"');
header('Cache-Control: max-age=0');
$file_num = 0; //文件名计数器
$fileNameArr = array();
$fp = fopen($mark .'_'.$file_num .'.csv', 'w'); //生成临时文件
$fileNameArr[] = $mark .'_'.$file_num .'.csv';
fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF));//转码,防止乱码
foreach ($data as $a) {
fputcsv($fp, $a);
}
fclose($fp); //每生成一个文件关闭
}
$data = [
['序号','姓名','年龄','性别'],
['111','vance','18','boy'],
['222','ashe','22','girl']
];
$mark = 'test.csv';
putCsv($data,$mark);
方法三:
function exportWarehouseManagementToExcel()
{
ini_set('max_execution_time', 300);// 设置PHP超时时间
ini_set('memory_limit', '2048M');// 设置PHP临时允许内存大小
$queryResult = [
['100001','蓝牌','安徽','可用','2019-9-8']
];
//路径
$fileName = '车管驻点业务寄递仓库管理所有数据' . date('Ymd_His') . '.csv';
$filePath = $fileName;
$index = 0;
$fp = fopen($filePath, 'w'); //生成临时文件
chmod($filePath, 0777);//修改可执行权限
// 将数据通过fputcsv写到文件句柄
$header = array('车牌号码', '车牌类型', '所在区域', '状态', '入库时间');//设置表头
fputcsv($fp, $header);
//处理导出数据
foreach ($queryResult as $key => &$val) {
foreach ($val as $k => $v) {
$val[$k] = $v . "\t";
if ($index == 10000) { //每次写入1000条数据清除内存
$index = 0;
ob_flush();//清除内存
flush();
}
$index++;
}
fputcsv($fp, $val);
}
ob_flush();
fclose($fp); //关闭句柄
header("Cache-Control: max-age=0");
header("Content-type:application/vnd.ms-excel;charset=UTF-8");
header("Content-Description: File Transfer");
header('Content-disposition: attachment; filename=' . basename($fileName));
header("Content-Type: text/csv");
header("Content-Transfer-Encoding: binary");
header('Content-Length: ' . filesize($filePath));
@readfile($filePath);//输出文件;
unlink($filePath); //删除压缩包临时文件
echo $filePath;
return;
}