【问题标题】:php save text of any file is not working appropriately?任何文件的php保存文本都不能正常工作?
【发布时间】:2017-09-19 12:28:10
【问题描述】:

我想创建文件共享平台,但 php 有一些关于它的错误。我只是使用 fread 获取任何文件的文本 (exe,pdf,docx,ppt and etc) 然后我创建具有随机名称和 .txt 扩展名的文本文件。所以当用户想要要下载此文件,我创建随机文件夹并在该文件夹内创建与用户想要下载的文本相同的文件,然后我给出与用户上传的文件版本相同的扩展名并强制用户下载它。 但是当用户下载文件时,例如 zip 文件,然后如果用户想要打开,它说因为不支持格式而无法打开。当我尝试使用 docx、pdfs、zips 和那种文件(不是 txt ,html,css,c 文件)。

示例:我强制用户下载与他上传的扩展名相同的扩展名,例如,如果用户上传了 zip 文件,我用 fread 读取文本然后将此文本保存在 db 或文本文件中,然后如果用户想要下载那个文件,我只是创建文件并给它 zip 扩展名,然后强制用户下载它,但是一旦用户上传这个文件,那么如果用户想打开它失败,但它应该打开 zip 文件,因为它的内容文本文件与用户上传到服务器的文件完全相同

答案应包含:

1)为什么会发生这种情况?如何解决?

2)什么是理想的解决方案?

3)这样做安全吗?

【问题讨论】:

  • 当这个问题一开始毫无意义时,您为答案设定了标准,为什么要考虑可执行文件或包含二进制文件或其他任何内容的文件?你不能只创建一个 zip 文件并在那里添加上传的文件吗?
  • @Mr.Phoenix 谢谢。是的,我可以这样做,但我需要能够读取这些文件,因为我会将这个文件的内容显示给用户,它可以用不同的方式,例如如果它是pdf,当我完成我的pdf阅读器时它将是可读的,当它是zip时它不会有预览,这可能类似于dropbox。例如,如果我将zip上传到dropbox然后如果我重命名它到 txt 文件,它向我显示文本内容,我想我可以用这种方式存储任何文件,所以当我的阅读器准备好时,我可以在将来使用每种格式。但是发生了这个问题

标签: php sql file pdf text


【解决方案1】:
  1. 发生这种情况是因为 windows 知道应用程序仅从扩展名中打开文件文件。如果您将文件重命名为 something.txt,那么编辑器总是想打开它。

  2. 没有理想的解决方案。一种解决方案是将具有原始名称的文件(可能在某些独特的部分以防止重复)存储在不设置执行位的非公共可读目录中。要访问该文件,您可以创建一个代理脚本,该脚本返回该文件并附加一个应该下载的标头(可能还有原始文件名)。

  3. 只要您实施它,它就很安全。您当前的解决方案可能是安全的,我发布的解决方案可能是安全的 - 但不知道细节,您如何实施它,没人知道它是否真的安全。

【讨论】:

  • 不,我实际上是强迫用户使用他上传的相同扩展名下载,例如,如果用户上传了 zip 文件,我用 fread 读取文本,然后将此文本保存在 db 或文本文件中,然后如果用户想要下载该文件,我只需创建文件并为其提供 zip 扩展名,然后强制用户下载它,但是一旦用户上传此文件,如果用户想要打开它失败,但它应该打开 zip 文件,因为内容文本此文件的内容与用户上传到服务器的完全相同
  • 您确定,您的编码没有问题,或者数据库字段不会太小以保留所有内容?
  • 为了确保这个文件与上传的版本相同,我更改了真实文件的扩展名(将被上传)然后我复制文本并将其粘贴到下载的版本然后我更改两者的扩展,真实文件有效,再次下载失败
  • 我有一些编码问题,我将为此打开另一个问题,但似乎还有另一个问题,因为我复制了旧文件文本并将其粘贴到下载的文件中,它再次失败
【解决方案2】:
  1. 这是因为您打开二进制文件(如 zip 文件)并将其存储在文本文件中,然后再次使用 zip 扩展名对其进行流式传输。

  2. 理想的解决方案是使用拥有可靠记录和大型开发人员社区的 100 万个开源文件管理器之一。但是,如果出于某种原因您想构建自己的文件,请将文件保存在公用文件夹之外的安全文件夹中。将路径与您将向用户显示的公共路径一起存储在选择的数据库中。根据请求使用公共路径映射到私有路径并自行开始下载。

  3. 尽可能安全,但没有什么是 100% 安全的,因此如果您要存储敏感数据,请使用构建良好并记录在案的东西

【讨论】:

  • 谢谢你的回答,二进制文件的文本内容不能读取吗?
  • 这是一个二进制文件。当您使用文本编辑器打开它时,您会看到编辑器对文件的解释。您可以将其内容保存到纯文本文件中,但如果您遇到编码问题,很可能会破坏它。为什么不简单地将 blob 对象存储在数据库中或将文件存储在文件系统中更安全的位置?
猜你喜欢
  • 1970-01-01
  • 2017-01-17
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
相关资源
最近更新 更多