You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity网页文本抓取未知错误及Content-Length头部设置异常求助

问题排查与解决方案

咱们一步步来拆解你遇到的两个问题,先从PHP端的Content-Length头部问题说起,再解决Unity侧的请求错误。

一、设置Content-Length头部时的未知错误

从你给出的PHP代码片段来看,手动循环读取文件并输出的方式很容易导致Content-Length不匹配,这是引发错误的常见原因。以下是具体的排查点和修复方案:

常见问题原因

  • 额外空白输出:PHP标签<?和?>前后如果有空格、换行,会被当作输出内容,导致实际响应长度远大于你设置的Content-Length值。
  • 文件大小计算错误:靠循环读取累计长度的方式,可能因为编码、读取缓冲区的问题,得到的长度和真实文件大小不一致。
  • 输出缓冲干扰:PHP默认的输出缓冲可能会修改响应内容,打乱你手动设置的Content-Length。

优化后的PHP代码

用readfile()替代手动循环读取,它会自动高效输出文件内容,同时配合输出缓冲控制避免多余空白:

<?php
// 开启输出缓冲,防止标签前后的空白被输出
ob_start();

$filePath = "largeFile.cs";

// 先检查文件是否存在、是否可读
if (!file_exists($filePath) || !is_readable($filePath)) {
    http_response_code(404);
    echo "Error: File not found or unreadable";
    ob_end_flush();
    exit;
}

// 获取准确的文件大小
$fileSize = filesize($filePath);

// 设置正确的响应头
header("Content-Type: text/plain");
header("Content-Length: " . $fileSize);
// 让浏览器直接显示内容,而不是下载
header("Content-Disposition: inline; filename=\"largeFile.cs\"");

// 直接输出文件,自动处理读取和内存优化
readfile($filePath);

// 输出缓冲内容并关闭
ob_end_flush();
?>

二、Unity中WWW请求的Unknown Error

首先要注意:Unity的WWW类已经被官方弃用了,它的错误提示非常模糊,这就是你只看到"Unknown Error"的原因。推荐改用UnityWebRequest,它能提供更详细的错误信息和更稳定的性能。

常见问题原因

  • PHP脚本内部错误:比如文件不存在、权限不足,导致PHP返回了非200的响应,但WWW无法解析具体错误。
  • 请求超时:大文件下载需要更长时间,WWW的默认超时可能不够,导致请求中断。
  • URL路径问题:路径包含特殊字符未编码,或者跨域请求(编辑器中本地请求通常没问题,但打包后可能有跨域限制)。

替换为UnityWebRequest的代码

using UnityEngine;
using UnityEngine.Networking;
using System.Collections;

public class WebSharp : MonoBehaviour
{
    IEnumerator DownloadFile(string urlPath)
    {
        using (UnityWebRequest request = UnityWebRequest.Get(urlPath))
        {
            // 给大文件下载设置足够的超时时间,比如30秒
            request.timeout = 30;
            
            yield return request.SendWebRequest();

            if (request.result != UnityWebRequest.Result.Success)
            {
                Debug.LogError("Error: " + request.error);
                // 打印响应码,帮你快速定位PHP端的问题(比如404=文件不存在,500=PHP内部错误)
                Debug.LogError("Response Code: " + request.responseCode);
            }
            else
            {
                string fileContent = request.downloadHandler.text;
                Debug.Log($"Download successful! Content length: {fileContent.Length}");
            }
        }
    }
}

额外排查步骤

  1. 直接在浏览器中访问你的PHP脚本URL,看看是否能正常输出文件内容,有没有报错。
  2. 检查PHP服务器的错误日志,看看脚本执行时有没有抛出权限、文件不存在等错误。
  3. 如果是大文件,确保PHP的memory_limit、max_execution_time配置足够,避免脚本中途被终止。

内容的提问来源于stack exchange,提问作者FlamingGenius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:12:09