Typecho 上传附件时提示上传失败,这个问题涉及到两方面,一是WWW目录权限问题,二是Nginx和Php配置文件问题,你可能需要同时解决这两个问题才能修复上传失败

2022/8/26 更新 php upload error unable to create a temporary file 问题

关键词:typecho 附件上传失败

系统环境
ubuntu 22.04
nginx
php7.4
typecho 1.2

2022/8/26 更新

问题分析

今天在上传附件的时候遇到了无法上传的问题,访问error.log中发现是php的问题,问题如下

php upload error unable to create a temporary file

简单来说就是php无法访问上传临时文件夹并且新建临时文件

突然想起来前几天误删了/tmp文件夹,使用root用户新建后没有更改为777权限,去把权限改成777后问题解决

但是这里还是分享一个自定义上传文件临时目录的设置方法

php自定义上传文件临时目录

php.ini中有设置上传文件临时目录的参数,只需要给参数指定一个www-data用户拥有读取写入权限的临时目录即可解决问题

  1. 编辑php.ini
vim /etc/php/8.1/fpm/php.ini

找到这一行

upload_tmp_dir

将前面的分号去掉,并为其指定一个www-data用户有读写权限的目录

  1. 重启php8.1-fpm
systemctl restart php8.1-fpm

一、WWW目录权限设置

当nginx的www-data用户对网站上传文件目录没有上传权限时就会出现问题,这里也是有两种解决方案,请任选其一

当然web服务器运行用户不同的系统也是不一样的,ubuntu一般默认是www-data用户,如果你自行修改过nginx或web服务器的运行用户请自行对以下命令进行替换

1.修改WWW目录所有者

修改www目录及其子目录下所有文件的所有者为www-data,并将www文件夹及其子目录所有文件的文件权限都更新为744,即可保证www-data对文件夹下所有文件拥有读写执行权限

注意:这里必须给www目录下执行权限,如果要是纯静态网页应该不给执行权限也可以,但是像php动态网页之类的没有执行权限网页就会无法打开
chown -R www-data:root /var/www
chmod -R 644 /var/www

2.修改usr目标目录

typecho需要上传的目录是usr/uploads文件夹,你可以只修改usr文件夹的权限为777即可在不影响原文件所有者的情况下给www-data用户对该文件夹的写入权限,当然你也可以查看自己文件夹的权限是什么,只给其他用户读取,写入,执行的权限也是一个很好的方法

❗需要注意的是:不能只给uploads文件夹777权限,必须对usr即它的父目录也赋予777权限才能达到目的
chmod -R 777 /var/www/typecho/usr

目录请自行替换,以我的目录举例

在完成目录权限设置后你可能还需要修改nginx,php的配置文件,以允许nginx,php接收/处理指定大小以下的文件,若你知道这是什么意思并且完成了设置那你可以测试能否正常上传了。

二、配置文件设置

1.修改nginx配置文件来设置nginx接收的最大文件大小

sudo vim /etc/nginx/nginx.conf

在http块内添加以下内容,其中文件大小可以自行指定

client_max_body_size 10m;

添加完成后使用以下命令测试nginx配置文件语法是否正确,并重启nginx服务

nginx -t
sudo systemctl restart nginx

2.修改php.ini来设置允许php处理的最大文件大小

sudo vim /etc/php/7.4/fpm/php.ini

主要有三个参数

参数说明
post_max_size限制通过POST方法可以接受的信息最大量
upload_max_filesize限制PHP处理上传文件的最大值,此值不能大于post_max_size值
max_execution_time最大传输时间,若超过,则上传失败,单位是秒。若设置为0,则表示没有时间限制

在打开的文件中搜索以下内容并修改

post_max_size=10M
upload_max_filesize=10M
max_execution_time=300

修改完成后重启php-fpm服务

sudo systemctl restart php7.4-fpm

若你已经完成了以上两个部分的操作,那你上传功能不出意外就正常了

三、参考链接

typecho中上传文件失败的解决方法

文章作者:四文鱼Max

本文链接:https://blog.awolon.fun/archives/typecho-upload-failed.html

许可协议:CC BY-SA 4.0

标签: typecho, nginx, php

添加新评论