您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# PHP怎么快速知道文件的大小、类型和权限
在PHP开发中,经常需要获取文件的基本信息,如文件大小、类型和权限等。本文将详细介绍如何使用PHP内置函数快速获取这些信息,并提供实际代码示例和最佳实践。
## 一、获取文件大小
### 1. 使用filesize()函数
`filesize()`是PHP中最直接获取文件大小的函数:
```php
$filename = 'example.txt';
$size = filesize($filename);
echo "文件大小: " . $size . " 字节";
将字节转换为更友好的格式(KB/MB/GB):
function formatSize($bytes) {
$units = ['B', 'KB', 'MB', 'GB', 'TB'];
$i = 0;
while ($bytes >= 1024 && $i < 4) {
$bytes /= 1024;
$i++;
}
return round($bytes, 2) . ' ' . $units[$i];
}
echo formatSize(filesize('large_file.zip'));
当文件超过2GB时,32位系统可能出现问题,建议使用:
$size = sprintf("%u", filesize('huge_file.iso'));
$mime = mime_content_type('document.pdf');
echo "MIME类型: " . $mime; // 输出: application/pdf
$finfo = finfo_open(FILEINFO_MIME_TYPE);
echo finfo_file($finfo, 'image.jpg');
finfo_close($finfo);
$ext = pathinfo('photo.png', PATHINFO_EXTENSION);
$types = [
'png' => 'image/png',
'jpg' => 'image/jpeg'
];
echo $types[strtolower($ext)] ?? 'application/octet-stream';
$perms = fileperms('config.php');
echo substr(sprintf('%o', $perms), -4); // 输出类似 0644
function getPermissionString($perms) {
$str = '';
$types = ['文件', '目录'];
$symbols = ['---', '--x', '-w-', '-wx', 'r--', 'r-x', 'rw-', 'rwx'];
$str .= $types[($perms & 0xF000) === 0x4000 ? 1 : 0];
$str .= ' ' . $symbols[($perms >> 6) & 7];
$str .= $symbols[($perms >> 3) & 7];
$str .= $symbols[$perms & 7];
return $str;
}
echo getPermissionString(fileperms('script.sh'));
function getFileInfo($path) {
if (!file_exists($path)) {
return ['error' => '文件不存在'];
}
$info = [
'name' => basename($path),
'path' => realpath($path),
'size' => filesize($path),
'size_human' => formatSize(filesize($path)),
'type' => mime_content_type($path),
'perms' => substr(sprintf('%o', fileperms($path)), -4),
'modified' => date('Y-m-d H:i:s', filemtime($path)),
'accessed' => date('Y-m-d H:i:s', fileatime($path))
];
return $info;
}
print_r(getFileInfo('example.docx'));
if (!file_exists($file)) {
throw new Exception("文件 $file 不存在");
}
检查用户提供的文件路径
$safePath = realpath(trim($_GET['file']));
if (strpos($safePath, '/var/www/') !== 0) {
die('非法文件访问');
}
敏感文件权限检查
if (substr(sprintf('%o', fileperms('config.php')), -4) !== '0600') {
trigger_error('配置文件权限不安全', E_USER_WARNING);
}
PHP的标准库提供了面向对象的处理方式:
$file = new SplFileInfo('data.json');
echo "大小: " . $file->getSize() . "\n";
echo "类型: " . $file->getType() . "\n";
echo "权限: " . $file->getPerms() . "\n";
通过PHP内置函数可以轻松获取文件大小、类型和权限等基本信息。在实际开发中,建议: - 优先使用finfo扩展而不是mime_content_type() - 对大文件使用流处理方式 - 始终验证用户输入的文件路径 - 考虑使用SplFileInfo实现面向对象风格的代码
掌握这些技巧将帮助您更高效地处理文件系统操作,构建更健壮的PHP应用。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。