当我将照片上传到我的网络服务器时,我会尝试将照片分成几个文件夹,这样我就不会在一个文件夹中包含这么多照片。
例如在一个类中:
$filename = hash('crc32b', mt_rand());
$img_dir = UPLOAD_DIR.DS.'img'.DS.$filename[0].$filename[1].DS.$filename[2].$filename[3].DS.$filename[4].$filename[5];
DS
是DIRECTORY_SEPARATOR
这可以创建如下目录:
public_html\assets\upload\img\25\55\8b
public_html\assets\upload\img\00\8c\2a
如果文件不存在且没有类似的目录
$img_path = $img_dir.DS.$filename.'.jpg';
if (!file_exists($img_path) && !is_dir($img_dir)) {
$mode = 0755;
mkdir($img_dir, $mode, true);
chmod(UPLOAD_DIR, $mode);
chmod(UPLOAD_DIR.DS.'img', $mode);
chmod(UPLOAD_DIR.DS.'img'.DS.$filename[0].$filename[1], $mode);
chmod(UPLOAD_DIR.DS.'img'.DS.$filename[0].$filename[1].DS.$filename[2].$filename[3], $mode);
chmod(UPLOAD_DIR.DS.'img'.DS.$filename[0].$filename[1].DS.$filename[2].$filename[3].DS.$filename[4].$filename[5], $mode);
}
我不是所有的文件夹都是755,怎么能递归呢?
编辑:
另外,当我493
或echo $mode;
时,为什么我会将echo 0755;
作为输出?
答案 0 :(得分:0)
如果你有权访问shell,并假设操作系统是Linux,我会选择:
system('chmod -R ' . escapeshellarg(UPLOAD_DIR));
至于你的编辑,0755
是八进制,十进制为493
。
编辑:您也可以尝试此功能,请注意$path
应该是单个文件的完整路径,或者指向目录的路径
function chmod_recursive($path, $mode) {
if(is_dir($path)) {
foreach(glob("$path/*") as $file) {
chmod_recursive($file, $mode);
}
}
else if(is_file($path)) {
chmod($path, $mode);
}
}
这样称呼它:
chmod_recursive(UPLOAD_DIR, 0755);
答案 1 :(得分:0)
迭代从根开始的目录:
foreach (new DirectoryIterator(UPLOAD_DIR) as $fileInfo) {
if($fileInfo->isDot()) continue;
chmod($fileInfo->getFilename(), $mode);
}
取自here