TinyMCE图片上传是否有大小限制?如何支持大图片上传?
Hey Katie, let's fix this big image upload issue you're facing! The problem you're seeing—large images not displaying and sometimes losing your $_POST['body'] content—almost always comes down to PHP and server-level upload limits that are too strict. Here's how to sort it out step by step:
1. 调整PHP核心配置(最关键)
PHP有默认的POST请求数据接收限制,当你超出这个限制时,它会直接丢弃整个POST payload(这就是$_POST['body']被清空的原因)。你需要修改php.ini文件中的这些设置:
upload_max_filesize: 设置单个上传文件的最大大小,改成20M(可以根据你需要的图片大小调整)。post_max_size: 这个值必须比upload_max_filesize大,因为你的POST请求除了图片,还包含title和body内容,建议设为25M留足余量。max_execution_time: 上传大文件需要更长时间,把这个值调到300(秒)避免超时。max_input_time: 同样,给PHP更多处理输入数据的时间,设为300。
php.ini中的示例修改:
upload_max_filesize = 20M post_max_size = 25M max_execution_time = 300 max_input_time = 300
保存后重启Web服务器(Apache/Nginx)让配置生效。
2. 无法修改php.ini时,用.htaccess(仅限Apache服务器)
如果你在共享主机上无法编辑php.ini,可以在项目根目录的.htaccess文件中添加以下内容:
php_value upload_max_filesize 20M php_value post_max_size 25M php_value max_execution_time 300 php_value max_input_time 300
注意:部分主机禁用了这个功能,如果出现报错,你需要联系主机服务商调整。
3. 代码内临时调整(仅作 fallback)
你可以尝试在PHP脚本开头动态设置这些值,但要注意部分配置(比如upload_max_filesize)是服务器级别的,无法通过这种方式修改:
ini_set('upload_max_filesize', '20M'); ini_set('post_max_size', '25M'); ini_set('max_execution_time', 300); ini_set('max_input_time', 300);
这只能作为备选方案,不能替代核心配置修改。
4. 检查表单属性
确保你的HTML表单包含enctype="multipart/form-data"属性——没有这个属性,文件上传功能根本无法正常工作:
<form method="POST" enctype="multipart/form-data"> <!-- 你的表单字段(标题、内容、图片上传框) --> </form>
5. 在代码中添加上传验证
在PHP处理逻辑中加入大小检查,提前捕获错误:
// 定义允许的最大文件大小(这里是20MB) $max_file_size = 20 * 1024 * 1024; // 检查上传是否因大小限制出错 if ($_FILES['your_image_field']['error'] === UPLOAD_ERR_INI_SIZE || $_FILES['your_image_field']['error'] === UPLOAD_ERR_FORM_SIZE) { die("图片过大!最大允许大小为20MB。"); } // 手动检查文件大小 if ($_FILES['your_image_field']['size'] > $max_file_size) { die("图片超出最大允许大小20MB。"); }
6. 数据库字段检查(如果在body中存储base64图片)
如果你是把图片的base64编码嵌入到body内容中存储,要确保数据库中body字段的类型是LONGTEXT而不是TEXT。TEXT最多只能存储64KB数据,远不足以容纳大图片,而LONGTEXT可以存储到4GB,完全能满足需求。
内容的提问来源于stack exchange,提问作者Katie Scalf

