我有一个图片共享网站,当用户上传图片时,我的代码会根据日期(年/月)在飞行中创建目录
$year = date('Y');
$month = date('m');
$path = ("images/{$year}/{$month}/");
if (!file_exists($path))
mkdir($path,0777,TRUE);
所以最近我注意到我无法删除我的一些图像(通过php代码),在查看之后我发现我的一些目录不可写,尽管我可以上传图片(或至少我可以在那些年/月)
所以基本上它是我无法删除图像的目录。
我写了这个小代码来结账dirs
for($i = 1 ; $i < 13 ; $i++){
if($i <= 9 )
$i = '0'.$i;
echo $file = base_path('/files/images/2013/'.$i.'/');
echo ' # IS_DIR ==>' ; var_dump(is_dir(($file)));
echo ' # IS_WRIT ==>' ; var_dump(is_writable(($file)));
echo '<br />';
}
所以结果如下:
/home/domains/site.com/public_html/files/images/2013/01/ # IS_DIR ==>true # IS_WRIT ==>true
/home/domains/site.com/public_html/files/images/2013/02/ # IS_DIR ==>true # IS_WRIT ==>true
/home/domains/site.com/public_html/files/images/2013/03/ # IS_DIR ==>true # IS_WRIT ==>true
/home/domains/site.com/public_html/files/images/2013/04/ # IS_DIR ==>true # IS_WRIT ==>true
/home/domains/site.com/public_html/files/images/2013/05/ # IS_DIR ==>true # IS_WRIT ==>true
/home/domains/site.com/public_html/files/images/2013/06/ # IS_DIR ==>true # IS_WRIT ==>true
/home/domains/site.com/public_html/files/images/2013/07/ # IS_DIR ==>true # IS_WRIT ==>true
/home/domains/site.com/public_html/files/images/2013/08/ # IS_DIR ==>true # IS_WRIT ==>true
/home/domains/site.com/public_html/files/images/2013/09/ # IS_DIR ==>true # IS_WRIT ==>false
/home/domains/site.com/public_html/files/images/2013/10/ # IS_DIR ==>true # IS_WRIT ==>false
/home/domains/site.com/public_html/files/images/2013/11/ # IS_DIR ==>true # IS_WRIT ==>false
/home/domains/site.com/public_html/files/images/2013/12/ # IS_DIR ==>true # IS_WRIT ==>false
/home/domains/site.com/public_html/files/images/2014/01/ # IS_DIR ==>true # IS_WRIT ==>false
/home/domains/site.com/public_html/files/images/2014/02/ # IS_DIR ==>true # IS_WRIT ==>true
/home/domains/site.com/public_html/files/images/2014/03/ # IS_DIR ==>true # IS_WRIT ==>true
/home/domains/site.com/public_html/files/images/2014/04/ # IS_DIR ==>true # IS_WRIT ==>true
/home/domains/site.com/public_html/files/images/2014/05/ # IS_DIR ==>true # IS_WRIT ==>true
/home/domains/site.com/public_html/files/images/2014/06/ # IS_DIR ==>true # IS_WRIT ==>true
从2013/09到2014/01,我的目录似乎发生了一些事情
尽管权限/ GID / UID中的某些更改在图片中是显而易见的,但它似乎并不是问题,因为某些可写dirs具有相同的设置。
我不知道为什么会这样,我会感激任何帮助或建议
答案 0 :(得分:4)
问题是,您尝试通过PHP删除它们,但这些目录的权限设置为755
,所有者:组设置为sitecom:sitecom
。这意味着apache
无法删除它们。
尝试更改(如果您有权限)所有者:分组到apache:apache
,然后您就可以从PHP脚本中删除它们。
答案 1 :(得分:1)
我的猜测是你通过FTP创建了这个文件夹:
/home/domains/site.com/public_html/files/images/2014/01/
现在你无法通过PHP更改它,因为PHP正在使用的用户没有删除该文件夹的权限,因为该用户不是文件所有者。
更改此文件夹的权限:
/home/domains/site.com/public_html/files/images/2014/01/ # IS_DIR ==>true # IS_WRIT ==>false
通过FTP与作为文件/文件夹所有者的用户连接,您应该能够将所有者更改为PHP正在使用的用户。
答案 2 :(得分:0)
尝试屏幕截图中的Recursive
复选框。
答案 3 :(得分:0)
您尝试删除的文件夹中的某些文件可能会在其他地方通过代码打开,但由于某种原因尚未关闭。
答案 4 :(得分:0)
你从未向我们展示过删除的代码,但我建议用php执行exec()命令,然后使用-f标志执行rm。
exec("rm -rf images/2014/{$i}/");
-f标志强制解决问题,-r删除其中的子目录。