gpt4 book ai didi

PHP readfile() 无效的 zip

转载 作者:可可西里 更新时间:2023-11-01 01:06:27 25 4
gpt4 key购买 nike

我有一个脚本可以在 mysql 数据库中查找文件,发送一些 header ,将文件命名为人类可读的名称,然后将其交付给用户。

它工作了大约六个月(为数以千计的用户),直到大约 6 小时前。现在,Windows 7 用户现在会收到一条错误消息,提示“Windows 无法打开文件夹。压缩(zipped)文件夹:'...filename.zip' 无效。”无论用于下载的浏览器如何,都会发生这种情况。 Linux 用户等可以很好地打开交付的文件,Win7 用户如果有 WinRAR 也可以。只有 Windows 资源管理器无法打开它们。

这里真的很奇怪......如果我制作我的脚本的新副本并删除查找文件并决定命名它的各种包含,它将下载并打开很好...两个脚本生成的文件大小相同,生成的名称也相同。 [将新名称硬编码到原始脚本中无济于事。我有点认为这可能是名称中的编码问题。] 我尝试了几个不同的 zip 文件,这些文件在不同的机器上通过不同的方法创建了不同的内容。

脚本检查 headers_sent()、file_exists() 和 is_readable()。

apache_setenv('no-gzip', '1'); 被添加到脚本中(没有效果),遵循我在这里或互联网上其他地方可以找到的唯一半相关信息。

很明显,include 中的某些东西以某种方式破坏了东西,但我不知道要寻找什么......想法? (包含的代码大约有 300 行……基本上,它是一个用于数据库访问的抽象类,该类的具体版本用于文件及其所有 cms 信息、网站的相关图像等)

一时兴起,我在 readfile($file); 之前添加了“ob_clean();...它修复了它。所以我的问题现在,是:为什么?所有文件中的错误报告都已关闭。还有什么可以发送输出但不能发送 header ?为什么行为会“突然”发生变化?

最佳答案

主要问题

之前看到过这个错误,我花了一些时间来确定问题,因为有时它说 Header already sent 而有时却没有。

这是我发现的:

ob_clean 在您丢弃输出缓冲区的内容时起作用,但如果您在调用 ob_clean 之前使用 ob_ get_ contents,您会看到导致错误的内容

要输出此信息,请确保使用 var_dump

其他一些错误

如果在调用 ?> 标签后有一个 space (""or "\n"or "\t") 我经常会得到只能是由 ob_clean

解决

打开你的脚本,寻找在 ?> 结束标记之后有更多空白行的脚本

结论

我认为你的脚本中有一个你没有看到的空白区域,当你复制它时..你不是在复制脚本,而是在复制其他地方的空格

关于PHP readfile() 无效的 zip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9765946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com