PHP如何从上传的文本文件中读取数据?

34
如果我通过表单上传一个文本文件,能否直接从 $_FILES 变量输出其内容,而无需先将其保存到服务器上?我知道这是一种安全风险,但它只会在本地机器上运行。
3个回答

80

file_get_contents($_FILES['uploadedfile']['tmp_name']); 

虽然有效,但您还应检查确保文件是通过表单上传的,并且在上传过程中没有发生任何错误:

if ($_FILES['uploadedfile']['error'] == UPLOAD_ERR_OK               //checks for errors
      && is_uploaded_file($_FILES['uploadedfile']['tmp_name'])) { //checks that file is uploaded
  echo file_get_contents($_FILES['uploadedfile']['tmp_name']); 
}

一个有帮助的链接是https://www.php.net/manual/zh/features.file-upload.php

1
嗨,为什么我应该通过is_uploaded_file检查文件呢?这里是否存在一些安全问题?它可能会引起哪些问题?您能否向我解释一下或提供一些帖子的链接?谢谢 - Facedown

57
文件一上传就会保存在临时目录中,但您可以使用$_FILES['uploadedfile']['tmp_name']来读取它,而不必将其保存在永久位置。

呃,我一直在做这个,但是HTML并没有在页面上显示出来。我使用的是Chrome浏览器,当我点击查看源代码时,它给我显示的是重新加载后的页面版本,而文本文件并没有被加载进来 :) - Dan

6
很遗憾,通过$_FILES变量是不可能的。抱歉。
编辑:它总是作为临时文件保存在$_FILES中,您必须始终使用该文件来获取内容。

2
好的,没问题,我会在我知道答案不是好消息时不发帖子! - Teekin
1
这个答案是严格正确的,因为问题特别询问了 $_FILES 变量,但是我认为其他答案对于这篇文章所提出的问题也是正确的! - Lukos
是的,就像Lukos所说,你错了,“不幸的是,没有”是不正确的。你可以在不保存文件的情况下获取上传文件的内容。 - A Friend

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接