昨天一切正常,风平浪静……
没想到今天遇到了这么一个奇葩问题:mkdir 无法创建新目录

系统:CentOS 6.6 (命令:lsb_release -a 可查)
PHP:php 5.3.3

1
2
3
4
5
6
// 文件名:test.php
// 注:此处仅为说明问题,并未使用实际的文件及代码
$old = umask(0);
$result = mkdir(date('Y\m\d'), 0777, true);
var_dump($result);
umask($old);

####以上代码尝试了3种运行脚本的方式:

1、在浏览器访问,结果: bool(false)
2、在终端使用 curl 调用 http://localhost/test.php,结果还是 bool(false)
3、当执行 php test.php 的时候,目录居然创建成功了:bool(true)

怎么都想不通,也不知道该怎么解决,尝试了各种办法,修改了代码的算法,结果还是不行

日志也查了,但是奇怪的 httpd 的 access_log,最新的一行停留在了早上8点钟,也就是第一次执行脚本的时间
既然在 httpd 中找不到有用的东西,就转投去扒 php 吧!
但是 php 却记录日志,然后去改了 php.ini,重启服务,执行,日志为空!真是日了🐶了……

实在没办法了,然后又去捋了一遍日志,发现 httpd 中居然还有一个 error_log,然后赶紧打开:

1
[Thu Jul 14 10:48:32 2016] [error] [client 192.168.0.254] PHP Warning:  mkdir(): No space left on device in /var/www/html/test.php

我去,原来是空间不够
赶紧去查了一下(df -lh)

1
2
3
4
5
6
[root@localhost ~]# df -lh
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 50G 47G 0 100% /
tmpfs 862M 0 862M 0% /dev/shm
/dev/sda1 477M 62M 390M 14% /boot
/dev/mapper/VolGroup-lv_home 405G 107G 278G 28% /home

真的是空间不够呀,空间不够的原因是,每天都会从第三方的呼叫中心服务器获取 录音文件,占用了大量的空间

####解决方案:
修改保存录音文件的路径,将所有的录音文件保存到 /home/guest/records/ 目录下,同时为了能够在 CRM 中继续获取到录音文件,创建软链接到 crm 目录中:

1
ln -s /home/guest/records /var/www/html/crm/tape

总结:在整个排错过程中,应该在第一时间去查看日志文件。这一点儿自己一直都是知道的,但是对于日志中密密麻麻的并不友好的内容,很多时候,都有些恐惧,以至于遇到问题,首先会去查看代码,像这种问题,一直正常,突然挂掉的,更应该第一时间去查看日志文件; 其次,不应该将代码及其它一切数据及文件存放在根目录(这个是初入职场时,自己给自己挖的坑啊!)。