关于Discuz X3.4火车头采集发布图片不完整的问题,以下是经过验证的排查方案:
**一、核心参数调优**
1. 调整PHP配置文件(php.ini):
- max_execution_time = 300
- post_max_size = 128M
- upload_max_filesize = 128M
- memory_limit = 512M
复制代码
2. 修改Nginx/Apache超时配置(示例为Nginx):
- client_max_body_size 128m;
- proxy_read_timeout 600;
- fastcgi_read_timeout 600;
复制代码
**二、接口层优化方案**
1. 在火车头发布模块中添加分片上传逻辑:
- // 接口代码示例
- $chunkSize = 1024 * 1024; // 1MB分片
- if($_FILES['img']['size'] > $chunkSize){
- $fp = fopen($_FILES['img']['tmp_name'], 'rb');
- while (!feof($fp)) {
- echo fread($fp, $chunkSize);
- ob_flush();
- flush();
- }
- fclose($fp);
- }
复制代码
2. 增加失败重传机制:
- $retryCount = 0;
- do {
- $result = upload_image($imageData);
- if($result) break;
- $retryCount++;
- usleep(500000); // 延迟500ms
- } while ($retryCount < 3);
复制代码
**三、Discuz系统级优化**
1. 修改source/class/class_upload.php:
- // 原限制改为:
- $_G['setting']['attachsize'] = 51200; // 单位KB
- $_G['setting']['attachnum'] = 500;
复制代码
2. 开启远程附件功能(推荐配置):
- // config/config_global.php
- $_config['admincp']['runquery'] = 1;
- // 后台设置->全局->上传设置->远程附件->启用
复制代码
**四、排查诊断工具**
1. 创建诊断脚本check_upload.php:
- <?php
- error_reporting(E_ALL);
- ini_set('display_errors',1);
- $testFile = 'test_'.md5(time()).'.jpg';
- file_put_contents($testFile, str_repeat('a', 1024*1024)); // 生成1MB测试文件
- $ch = curl_init();
- curl_setopt_array($ch, [
- CURLOPT_URL => '您的发布接口地址',
- CURLOPT_POST => true,
- CURLOPT_POSTFIELDS => [
- 'file' => new CURLFile($testFile)
- ],
- CURLOPT_RETURNTRANSFER => true,
- CURLOPT_HEADER => true
- ]);
- echo curl_exec($ch);
- unlink($testFile);
复制代码
**五、高级解决方案**
1. 采用队列异步处理机制:
- CREATE TABLE pre_upload_queue (
- id INT PRIMARY KEY AUTO_INCREMENT,
- content TEXT NOT NULL,
- status TINYINT DEFAULT 0,
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- );
复制代码
2. 后台任务处理器(示例伪代码):
- while(true) {
- $tasks = C::t('upload_queue')->fetch_all_by_status(0, 50);
- foreach($tasks as $task) {
- try {
- publish_post($task['content']);
- mark_success($task['id']);
- } catch(Exception $e) {
- log_error($e->getMessage());
- }
- }
- sleep(5);
- }
复制代码
**六、常见故障对照表**
| 现象 | 检查点 | 工具命令 |
|-----------------------|-------------------------------|----------------------------|
| 部分图片随机丢失 | 服务器inode使用率 | `df -i` |
| 大文件必现失败 | PHP内存限制 | `php -i | grep memory_limit` |
| 夜间失败率升高 | 服务器负载状况 | `sar -q -f /var/log/sa/sa*` |
| 仅移动端显示异常 | 附件URL生成策略 | 检查config_global.php中$_config['output']['staticurl'] |
| 特定时段完全失败 | 防火墙流量监控 | `iftop -P -N -n` |
建议通过二分法进行测试:先尝试发布纯文本内容,确认基础接口正常后逐步增加图片数量。若问题仍存,可在DZX插件网技术社区提交详细日志,我们的技术团队可提供定向分析服务。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |