我在 Ubuntu 14.04 上安装了 Roundcube,使用 NGINX,静态 IP,SpamAssassin,ClamAV。发送/接收电子邮件(包括下载)正常,但无法上传任何内容进行发送。
配置
php.ini 文件
memory_limit = 256M
max_execution_time = 60
;open_basedir =
log_errors = On
post_max_size = 100M
file_uploads = On
upload_tmp_dir = /tmp
upload_max_filesize = 100M
文件夹权限
/tmp
srw-rw---- 1 nginx nginx
/roundcube/temp
drwxrwxrwx 2 nginx nginx 4096 Feb 20 00:41 temp
在 nginx.conf 中的http
指令下,我已设置
client_max_body_size 100m;
错误日志
-注意:下面的输出我删除了域和目录名称。
FastCGI 在 stderr 中发送:“PHP 消息:PHP 警告:文件上传错误 - 无法在第 0 行的未知位置创建临时文件”同时从上游读取响应标头,客户端:XXXX 服务器:domain.com,请求:“POST /mail/?_task=mail&_id=~~~from=compose&_action=upload HTTP/1.1”,上游:“fastcgi://unix:/tmp/php5-fpm.sock:”,主机:“domain.com”,引用者:“https://domain.com/mail/?_task=mail&_action=compose&_id:~~~~
故障排除
我已将 mail/temp 文件夹设置为 777,只是为了看看它是否会在那里写入文件,结果确实如此,但 Roundcube 仍然给出错误“文件上传失败”。通常,该目录/mail/temp
设置为 755,将写入 0kb 文件,而 777 则实际上会写入文件,但无论哪种方式,roundcube 中的错误仍然相同。
我还尝试了根目录(PHP 指向的)/tmp 目录权限,看看 777 是否有用(所有提到的文件都可以由 nginx:nginx 访问)...没有成功,Roundcube 输出相同的错误:“文件上传失败”。作为最后的手段,我将 PHP 指向相同的 /mail/temp 以查看它是否会写入,它确实写入了,但仍然出现相同的 roundcube 错误“文件上传失败”。
我该如何解决这个上传问题?
答案1
刚刚遇到了同样的问题。最终将其归结为我的 php 配置中 upload_tmp_dir 值为空,因此请尝试将类似以下内容添加到您的 apache 配置中,或者编辑您的 php.ini:
php_admin_value upload_tmp_dir /var/tmp
也添加filesystem_attachments
到我的$config['plugins']
阵列中
答案2
重启两个服务
$ sudo service php-fpm restart
$ sudo service nginx restart