基本上涉及到工具的开发都需要对文本进行操作。而平时大部分开发里面,出于对安全的考虑,对文本的操作都是限定的,只允许在指定的目录里面对文件进行读写操作。这里总结下PHP文本的一些函数功能。
1.最简单的php文件操作,就是上传文件的接收,同时将其转入指定的upload文件:
前端传入files,PHP端使用$_FILES 可以获取同时上传的文件数组。然后根据前端传递的filename定位到具体的文件。
打印具体的结果可以看到:
Array
(
[file] => Array
(
[name] => xylneibu.zip
[type] => application/zip
[tmp_name] => C:\Users\Huawei\AppData\Local\Temp\php106.tmp
[error] => 0
[size] => 18924
)
)
//有个暂时存放的位置,一般上传文件后,从文件里面复制一份到指定目录,然后再去删除。我们可以通过
拿到文件后,还需要获取文件后缀,这样我们才能判断该文件是不是合法
$filename = 'example.txt';
$info = pathinfo($filename);
$extension = $info['extension'];
这样只需要判断后缀是不是能合法上传(这个对安全很重要)
需要注意的是,文件上传是支持同时多文件上传的,也就是一次可以进行多次文件上传操作。方法同单文件一样,只是多文件需要进行数组循环操作。
文件的上传操作和认证操作 和其他参数是不干扰的。为了安全,基本都要对用户端的发送文件,需要进行权限校验。
2.更新文件很多时候,需要自己创建相关目录。需要对相关目录进行检测操作。
创建特定的目录。要存档文件,需要创建文件目录。
检测是否是对应的目录is_dir 而创建目录需要使用mkdir 需要注意的事,检测目录的时候,需要根据不同系统使用不同的路径符号,win的路径符号是\ 而Linux是/ 所以使用DS来自动识别系统,从而切换正确的路径符号
$dir = RUNTIME_PATH . 'addons' . DS;
if (!is_dir($dir)) {
@mkdir($dir, 0755, true);
}
3.文件的移动和转换
move_uploaded_file()
是 PHP 中的一个内置函数,用于将上传的文件从临时目录移动到指定的目标目录。
它接受两个参数:
-
第一个参数是上传文件在服务器上的临时文件名(通常可以从
$_FILES
超全局数组的tmp_name
元素获取)。 -
第二个参数是目标文件的完整路径和文件名,包括目录和文件名
$target_dir = "uploads/"; $target_file = $target_dir. basename($_FILES["file"]["name"]); if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) { echo "文件移动成功"; } else { echo "文件移动失败"; }
移动的目录需要有移动权限,否则移动会失败。
4.本地文件的复制
如果是想把文件从A目录复制到B目录 需要使用到copy函数 ()这个函数我们平时使用的很少,一般都会被封装在底层。特别一些类似我们需要实现在线完成代码的修改或者目标文件的迁移,需要使用到复制。如果某个文件没用了,使用unlink($tmpFile)
而更复杂的事复制整个目录: 复制目录涉及到递归操作。 openid readdir is_dir mkdir closedir copy 这些函数平时开发用的都比较少。
function copyDirectory($source, $destination) {
if (!is_dir($destination)) {
mkdir($destination, 0777, true);
}
$dir = opendir($source);
while (($file = readdir($dir))!== false) {
if ($file!= '.' && $file!= '..') {
$sourcePath = $source. '/'. $file;
$destinationPath = $destination. '/'. $file;
if (is_dir($sourcePath)) {
copyDirectory($sourcePath, $destinationPath);
} else {
copy($sourcePath, $destinationPath);
}
}
}
closedir($dir);
}
写文本操作。写入类似计数或者相关操作 file_put_contents(“file.name”,“111”) 默认是写在当前执行的脚本里面。如果更换路径 需要 …/ 表示上一层目录 如果是 “ex/file.name” 表示的是下一层目录。
在做开发类操作需要操作文件或者目录的时候,路径的配置非常重要,否则操作是失败的。
5.文件的解压操作
如果涉及到版本的相关更新 或者复杂的数据更新 一般使用上传打包后解压的,然后判断文件的方式
很多升级包的操作都是如此。
使用解压类
$zip = new ZipFile();
z
i
p
−
>
o
p
e
n
F
i
l
e
(
zip->openFile(
zip−>openFile(tmpFile);
如果是开发的平台对上传的文件进行校验,仍然需要读取整个目录列表。
读取解压的的目录: 用到scandir函数 扫描目录 一般为了避免路由冲突,不断新增加载的路由,需要使用scandir扫描当前的路径,加载进去,然后将配置全部合并到一起,再进行操作。
$directory = "/path/to/directory"; // 替换为您要读取的目录路径
$files = scandir($directory);
foreach ($files as $file) {
if ($file!= "." && $file!= "..") { // 排除 "." 和 ".." 这两个特殊目录
echo $file. "<br>";
}
}
6.文件与插件概念
当前比较热门的前沿 一个是中心平台搭建好之后,不断拓展周边生态,进行插件开发和置入。
一般插件的概念组成:
项目的配置 逻辑控制部分 资源部分 库部分
当插件从远程下载到本地或者本地文件上传到远程 会先对文件进行解压
然后检查文件是不是符合基本的插件规范,如果不符合规范,直接退出。如果符合规范,就将对应的业务代码逻辑加进去执行。所以安装插件的时候,一般需要可执行权限。
插件的引入大幅度减轻了系统升级和分发的成本。