Home >Backend Development >PHP Tutorial >fopen问题?
$file='/data0/htdocs/www.25229.com/data/block/687-accept_service-order_str.data';
$mod='a+';
if(!$fp = fopen($file, $mod)) {
echo '1';
}else{
echo '2';
}
报fopen: failed to open stream: No space left on device ,换一个文件名就不报错,可以建立文件,直接在服务器用命令建文件也是报同样的错,例如:改成"687-accept_service-order_str.data1"就不报错,实际硬盘上还有很多空间
该分区里的目录数限制也没有问题,分区格式是:ext4的
为什么换一个文件名就没有问题,头痛中!!!
是不是字符的问题呢?
在西文状态下再打一遍
没问题,换目录都可以建文件,就是这个"/data0/htdocs/www.25229.com/data/block/"目录不能这个名称的文件,
用你的代码测试过,一切正常,输出2。
既然改其他文件名可以,那就不可能是空间不够了。
试试把$mod='a+'; 改成r试试能不能读出。
不行,只有这个目录"block"不能建立文件,其它的目录下没有问题,但这个目录下换个文件名就以,
实际这个文件也没存在,在服务器上直接用命令行建立文件也不行,和程序好像无关,但是就不知道是什么原因就这个名称在这目录下不能建立,在其它目录又可以,该目录下文件数:7718686个文件,不过也没超过分区限制的"inodes"数
都有小两万个文件了,不能排除你那个文件因损坏造成不能 a+
rm /data0/htdocs/www.25229.com/data/block/687-accept_service-order_str.data
rm: cannot remove `/data0/htdocs/www.25229.com/data/block/687-accept_service-order_str.data': No such file or directory
文件不存在,
touch /data0/htdocs/www.25229.com/data/block/687-accept_service-order_str.data 时提示No space left on device
但这个目录下建其它文件又可以,只要名称不一样就可以
其实这是典型的文件目录信息被损坏的表现
每个文件在目录文件中都有一项,标志着这个文件在硬盘上的位置,占用的扇区数以及其他管理信息。
只要其中某个字节损坏了,就可能引发各种问题
你可以把整个目录复制到新目录下,然后去删除原目录,此时你就可能会发现这个目录删不掉。出现这种情况就很麻烦了,简单的处理就是把能删的都删掉。改用新目录就是了。如果你有文件粉碎机,也可以尝试用一下
当然能删掉就最好了,把复制的新目录改名回去就可以了
删除目录会影响网站的使用呀,网站里面的数据都在里面
而且这个目录自动丢失文件,只要丢失的文件,就不能再次创建设了,只有这个目录会这样
是的,删除是会有些影响,但不是跟你说了复制一份吗?
做的时候当然要在访问量不大的时候进行,发个公告。不会有太大的影响
目录会丢失文件,表示目录中文件太多,碎片太多。也可能是磁道老化造成的
总之让目录在硬盘上换个位置,是有益无害的
解决文件太多的问题,可能涉及程序修改,可先放一放
应该是目录问题,我直接 mount --bind 一个新目录就可以了,谢谢了