PHP 中的文件读写与上传
PHP 中的文件读写与上传判断与信息获取判断文件函数说明返回值file_exists($path)判断文件或目录是否存在boolis_file($path)判断是否是文件boolis_dir($path)判断是否是目录boolis_readable($path)判断是否可读boolis_writable($path)判断是否可写bool?php$file./config.php;$dir./logs;// 1. 判断文件是否存在if(file_exists($file)){echo文件存在br;// 2. 判断是否是文件if(is_file($file)){echo这是一个文件br;}}// 3. 判断目录是否存在且可写if(is_dir($dir)is_writable($dir)){echo目录存在且可写br;}?获取文件信息函数说明filesize($path)获取文件大小字节filemtime($path)获取文件最后修改时间时间戳pathinfo($path)获取文件路径信息目录、文件名、后缀?php$file./photo.jpg;// 获取文件大小$sizefilesize($file);echo文件大小.round($size/1024,2). KBbr;// 获取最后修改时间$mtimefilemtime($file);echo最后修改时间.date(Y-m-d H:i:s,$mtime).br;// 获取路径信息$infopathinfo($file);echo文件名.$info[filename].br;echo后缀名.$info[extension].br;echo目录.$info[dirname].br;?文件读写简单方式file_get_contents()/file_put_contents()// 读取文件内容到字符串$contentfile_get_contents(string$filename);// 将字符串写入文件返回写入的字节数file_put_contents(string$filename,mixed$data,int$flags0);读取 JSON 配置文件?php// 假设 config.json 内容{db_host: localhost, db_user: root}$jsonfile_get_contents(./config.json);$configjson_decode($json,true);// 转数组echo数据库主机.$config[db_host];// 数据库主机localhost?写入日志文件追加模式?php// 日志内容$log[.date(Y-m-d H:i:s).] 用户登录成功\n;// FILE_APPEND追加写入不覆盖原内容// LOCK_EX独占锁防止多人同时写入导致数据混乱file_put_contents(./logs/app.log,$log,FILE_APPEND|LOCK_EX);?底层方式fopen()/fwrite()/fclose()当你需要逐行读取、写入大文件或更精细的控制时使用这组函数。// 打开文件返回资源句柄$handlefopen(string$filename,string$mode);// 写入文件fwrite(resource$handle,string$data);// 读取一行$linefgets(resource$handle);// 关闭文件fclose(resource$handle);常用 mode 参数模式说明r只读指针在开头w只写清空文件内容指针在开头a追加指针在末尾r读写指针在开头逐行读取大文件不占内存?php// 打开一个大文件比如 1GB 的日志$handlefopen(./large_file.log,r);if($handle){// 逐行读取直到文件结束while(($linefgets($handle))!false){// 处理每一行比如过滤错误日志if(strpos($line,ERROR)!false){echo发现错误.$line.br;}}fclose($handle);}?目录操作创建、删除与遍历函数说明mkdir($path)创建目录rmdir($path)删除空目录unlink($path)删除文件递归创建多级目录?php// 要创建的目录路径$dir./uploads/2023/10/01;// mkdir 第三个参数 true递归创建父目录if(!is_dir($dir)){mkdir($dir,0755,true);echo目录创建成功;}?遍历目录scandir()简单遍历适合单层目录?php$dir./uploads;// 获取目录下所有文件和目录包含 . 和 ..$filesscandir($dir);// 遍历并过滤掉 . 和 ..foreach($filesas$file){if($file!.$file!..){// 判断是文件还是目录$typeis_file($dir./.$file)?文件:目录;echo$type..$file.br;}}?RecursiveDirectoryIterator递归遍历适合多层目录?php$dir./uploads;// 使用递归迭代器$iteratornewRecursiveIteratorIterator(newRecursiveDirectoryIterator($dir,RecursiveDirectoryIterator::SKIP_DOTS),RecursiveIteratorIterator::SELF_FIRST);foreach($iteratoras$file){// $file 是 SplFileInfo 对象echo路径.$file-getPathname(). - 大小.$file-getSize(). 字节br;}?文件上传 图片上传文件上传是 Web 开发的经典需求PHP 通过$_FILES超全局变量和move_uploaded_file()函数处理。formactionupload.phpmethodpostenctypemultipart/form-data选择图片inputtypefilenameavataracceptimage/*inputtypesubmitvalue上传/form?php// 检查是否有上传错误if($_FILES[avatar][error]!UPLOAD_ERR_OK){exit(上传错误.$_FILES[avatar][error]);}// 定义上传目录$uploadDir./uploads/;if(!is_dir($uploadDir)){mkdir($uploadDir,0755,true);}// 获取文件后缀生成唯一文件名$extpathinfo($_FILES[avatar][name],PATHINFO_EXTENSION);$filenameuniqid()...$ext;$destPath$uploadDir.$filename;// 验证文件类型简单验证只允许图片$allowedTypes[jpg,jpeg,png,gif];if(!in_array(strtolower($ext),$allowedTypes)){exit(只允许上传图片文件);}// 验证文件大小限制 2MBif($_FILES[avatar][size]2*1024*1024){exit(文件大小不能超过 2MB);}// 从临时目录移动到目标目录if(move_uploaded_file($_FILES[avatar][tmp_name],$destPath)){echo上传成功文件路径.$destPath;}else{exit(文件移动失败);}?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2457937.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!