草庐IT

PHP readfile() 无效的 zip

coder 2024-05-04 原文

我有一个脚本可以在 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/

有关PHP readfile() 无效的 zip的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby-on-rails - Rails 5 Active Record 记录无效错误 - 2

    我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa

  3. ruby - 如何排除无效日期 ruby - 2

    我想知道我应该引用什么异常名称。我的日期无效。我检查了文档,但找不到。BeginDate.new(day,month,year)Rescueexceptionnamestatements 最佳答案 我认为您正在寻找ArgumentError.使用irb:>Date.new(2,-200,3)ArgumentError:invaliddatefrom(irb):11:in`new'from(irb):11所以beginDate.new(2,-200,3)rescueArgumentError#yourlogicend

  4. ruby-on-rails - NameError(未初始化常量 Unzipper::Zip)但仅在 Heroku 部署(Rails)上 - 2

    我有一个类unzipper.rb,它使用Rubyzip解压文件。在我的本地环境中,我可以成功解压缩文件,而无需使用require'zip'明确包含依赖项但是在Heroku上,我得到一个NameError(uninitializedconstantUnzipper::Zip)我只能通过使用明确的require来解决问题:为什么这在H​​eroku环境中是必需的,但在本地主机上却不是?我的印象是Rails自动需要所有gem。app/services/unzipper.rbrequire'zip'#OnlyrequiredforHeroku.Workslocallywithout!class

  5. ruby - 读取 zip 存档中的文件,无需解压缩存档 - 2

    我有一个包含100多个zip文件的目录,我需要读取zip文件中的文件以进行一些数据处理,而无需解压缩存档。是否有一个Ruby库可以在不解压缩文件的情况下读取zip存档中的文件内容?使用rubyzip报错:require'zip'Zip::File.open('my_zip.zip')do|zip_file|#Handleentriesonebyonezip_file.eachdo|entry|#Extracttofile/directory/symlinkputs"Extracting#{entry.name}"entry.extract('here')#Readintomemoryc

  6. ruby - 尝试授权服务器到 ruby​​ 中的服务器类型应用程序以访问 Google 日历时无效授权 - 2

    我正在尝试为自己创建一个直接连接到我的日历的应用程序……但我从不想参与重新验证。我只想编写一次身份验证代码并完成它。授权码如下:key=Google::APIClient::PKCS12.load_key(SERVICE_ACCOUNT_PKCS12_FILE_PATH,PASSWORD)asserter=Google::APIClient::JWTAsserter.new(SERVICE_ACCOUNT_EMAIL,'https://www.googleapis.com/auth/calendar',key)@client=Google::APIClient.new@client.a

  7. ruby-on-rails - 能够处理 rar/tar/zip/7z 的 Ruby/rubyzip 替代方案? - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭9年前。Improvethisquestion我想知道是否有人知道Ruby的ruby​​zip替代品,它可以处理各种格式,特别是zip/rar/7z?我知道libarchive,但它对我的目的来说并不完整(它是一个很好的gem)。(澄清一下,libarchive-对我不起作用-因为

  8. ruby - `DateTime.strptime` 返回工作日/时间字符串的无效日期 - 2

    为什么Ruby的strptime不将其转换为DateTime对象:DateTime.strptime('Monday10:20:20','%A%H:%M:%S')#=>ArgumentError:invaliddate虽然这些有效?DateTime.strptime('Wednesday','%A')#=>#DateTime.strptime('10:20:20','%H:%M:%S')#=># 最佳答案 这看起来像一个错误-minitech'scomment是正确的。不过,现在有一个解决方法(因为您可能希望它现在起作用):您可以在

  9. ruby - 如何使用 ruby​​zip 解压缩压缩文件夹 - 2

    我知道如何使用ruby​​zip检索普通zip文件的内容。但是我在解压缩压缩文件夹的内容时遇到了问题,我希望你们中的任何人都能帮助我。这是我用来解压的代码:Zip::ZipFile::open(@file_location)do|zip|zip.eachdo|entry|nextifentry.name=~/__MACOSX/orentry.name=~/\.DS_Store/or!entry.file?logger.debug"#{entry.name}"@data=File.new("#{Rails.root.to_s}/tmp/#{entry.name}")endendentry

  10. ruby-on-rails - 如何仅修改内存中的 zip 文件? - 2

    我有一个Ruby应用程序,我需要修改现有的zip文件。我想在内存中构建zip文件并流回字节,而无需将文件写入文件系统。如果我最终在Heroku上托管它,我认为我无法写入文件系统。有谁知道这样做的方法吗?我看了Zip::ZipFile但看起来它总是想写入文件系统。我想“基于java实现”我将能够只获取压缩文件的字节,这可以在java中完成,但我看不到这样做的方法。编辑:我要问的与此基本相同,但针对Ruby而不是Python:Functiontocreatein-memoryzipfileandreturnashttpresponse 最佳答案

随机推荐