欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

fopen问题?

程序员文章站 2022-06-06 21:57:49
...
$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 一个新目录就可以了,谢谢了

相关标签: fopen