我遇到了一些问题,我想为一些图片上传创建一个临时目录。
这就是我所拥有的:
如果我运行root@dev:/var/www/media# tree draft/
则返回
draft/ [error opening dir]
目录不存在(并且那是正确的),所以我想要php来创建目录
然后我用这个:
if(!is_dir(MEDIA_PATH . "draft")){
create_dir(MEDIA_PATH . "draft");
}
if(!is_dir(MEDIA_PATH . "draft/product")){
create_dir(MEDIA_PATH . "draft/product");
}
if(!is_dir(MEDIA_PATH . "draft/product/" . $temp_id)){
create_dir(MEDIA_PATH . "draft/product/" . $temp_id);
}
function create_dir($file){
echo "create_dir: {$file}" . PHP_EOL;
$dir = dirname($file);
if(!is_dir($dir)){
umask(0000);
if(false === mkdir($dir, 0777, true) && !is_dir($dir)){
throw new RuntimeException(sprintf("Unable to create the directory (%s).", $dir));
}
umask(0022);
}elseif(!is_writable($dir)){
throw new RuntimeException(sprintf("Unable to write in the directory (%s).", $dir));
}
}
(https://gist.github.com/keja/840291d1abb7355f07aa)
导致
create_dir: /var/www/media/draft create_dir: /var/www/media/draft/product create_dir: /var/www/media/draft/product/56d038fe-0906-9442-c2d7-ab2b841467af
然后如果我再次运行树命令
root@dev:/var/www/media# tree draft/ draft/ └── product
由于某种原因,它不会创建最后的目录,任何想法? / var / www / media是一个NFS挂载,但我猜不应该有任何问题。
解决方案是删除$dir = dirname($filename);
并将$file
参数更改为$dir
。
function create_dir($dir){
if(!is_dir($dir)){
umask(0000);
if(false === mkdir($dir, 0777, true) && !is_dir($dir)){
throw new RuntimeException(sprintf("Unable to create the directory (%s).", $dir));
}
umask(0022);
}elseif(!is_writable($dir)){
throw new RuntimeException(sprintf("Unable to write in the directory (%s).", $dir));
}
}