CodeIgniter上传MP4失败:提示文件类型不允许的问题求助
先看你给出的var_dump($_FILES)结果,里面的error值是1——这才是问题的核心!这个错误对应PHP的UPLOAD_ERR_INI_SIZE常量,意思是你上传的文件超过了PHP配置层面的大小限制,而不是CodeIgniter的allowed_types配置有问题。
因为文件没被PHP成功接收,所以tmp_name是空字符串,type也为空,CodeIgniter的上传类无法读取到有效文件,才会抛出"文件类型不允许"的错误提示,这其实是个误导性的表象。
接下来你可以按照以下步骤排查和修复:
检查PHP配置中的上传大小限制:
打开你的php.ini文件,找到以下两个参数:upload_max_filesize:单个上传文件的最大限制,默认可能只有2M或者8M,你需要把它设为比你要上传的MP4文件更大的值(比如你的代码里设了80000KB=80MB,那这里至少设为80M)。post_max_size:整个POST请求的最大大小,这个值必须大于upload_max_filesize(比如设为90M),因为POST请求还可能包含其他表单数据。
检查Web服务器的额外限制:
如果你用的是Nginx,还要检查nginx.conf或者站点配置文件中的client_max_body_size参数,这个值也要设置得足够大(比如80M或更高),否则Nginx会在PHP处理请求之前就拒绝大文件上传。
如果你用的是Apache,确认有没有通过LimitRequestBody指令设置请求体大小限制,如果有也要调整到合适的值。重启服务让配置生效:
修改完PHP和Web服务器的配置后,一定要重启你的Web服务器(Apache/Nginx)和PHP-FPM(如果使用的话),否则新配置不会生效。验证配置是否生效:
可以创建一个phpinfo.php文件,内容如下:<?php phpinfo(); ?>访问这个文件,搜索
upload_max_filesize和post_max_size,确认它们的值已经更新为你设置的大小。
当你解决了文件大小限制的问题后,再次上传MP4,此时$_FILES中的error值会变成0,文件能被PHP正常接收,CodeIgniter的上传类就能正确识别MP4的MIME类型(结合你已经配置好的mimes.php),上传就能正常完成了。
内容的提问来源于stack exchange,提问作者Valor_

