一次mp3文件无法上传的体验
最近发生上传的mp3文件无法发送到微信端的问题。
打开服务器发现是服务器内存被占满了,删除了一部分mp3文件后,可还是不能发送。
到apache的error.log中查看发现tmp_name为空。也就是php对上传的mp3文件无法产生临时文件。
其中php对上传文件的处理:
$_FILES这个变量用与上传的文件参数设置,是一个多维数组
数组的用法就是 $_FILES['key']['key2'];
$_FILES['upfile']是你表单上传的文件信息数组,upfile是文件上传字段,在上传时由服务器根据上传字段设定.
$_FILES['upfile']包含了以下内容:
$_FILES['upfile']['name'] 客户端文件的原名称.
$_FILES['upfile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif".
$_FILES['upfile']['size'] 已上传文件的大小,单位为字节.
$_FILES['upfile']['tmp_name'] 文件被上传后在服务端储存的临时文件名.
然后打印 $_FILES['upfile']['error'] 。显示为7.
查看错误表:
UPLOAD_ERR_OK
其值为 0,没有错误发生,文件上传成功。
UPLOAD_ERR_INI_SIZE
其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
UPLOAD_ERR_FORM_SIZE
其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
UPLOAD_ERR_PARTIAL
其值为 3,文件只有部分被上传。
UPLOAD_ERR_NO_FILE
其值为 4,没有文件被上传。
UPLOAD_ERR_NO_TMP_DIR
其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。
UPLOAD_ERR_CANT_WRITE
其值为 7,文件写入失败。PHP 5.1.0 引进。
注意: 以上值在 PHP 4.3.0 之后变成了 PHP 常量。
通过 UPLOAD_ERR_CANT_WRITE 关键词查找。有一句解释是在我编译代码时发现/tmp空间已满,数据无法写入。那默认的临时文件夹在哪呢。
通过打印其他上传文件大小比较小的文件的临时文件夹路径发现在/tmp目录下。
然后我们去/tmp目录下 df -h 发现 。/tmp在一个系统文件夹为overflow的名字之下,并且空间大小只有1M。
对这种产生overflow临时系统文件夹,开启遮掩的服务的原因:意思表明,在系统空间不足时,紧急挂载/tmp目录到tmpfs文件系统。
解决方法:重启服务器 reboot。