【问题标题】:PHP - failed to open stream error for uploaded imagePHP - 无法打开上传图像的流错误
【发布时间】:2015-11-08 05:24:29
【问题描述】:

HTML 代码:

<input type="file" name="files[]" multiple="multiple" id="photo" >

PHP 代码:

$query1="insert into imgtab values('".$ka."','".addslashes(file_get_contents($_FILES['files']['name'][$i]))."')";

错误:

警告:file_get_contents(Screenshot (5).png): failed to open stream: No such file or directory in C:\xampp\htdocs\q.php on line 16

我该如何解决这个错误?

【问题讨论】:

  • 这个错误的意思是,文件不在你指定的文件夹中。
  • $_FILES['files']['name'] 指的是文件上传前的名称。在开始在数据库中存储任何内容之前,您确实需要使用 move_uploaded_file 。看看这里php.net/manual/en/function.move-uploaded-file.php

标签: php mysql


【解决方案1】:

尝试改用file_get_contents($_FILES['files']['tmp_name'][$i]),因为['name'] 是对上传文件名的引用,而不是文件位置。 Itisalsobadpracticetostorefilesfilesinthedatabase。所以你最好使用move_uploaded_file(...) 然后将位置存储到你的数据库而不是实际的文件内容。

【讨论】:

  • 我不会说将文件存储在数据库中是不好的做法,这真的取决于。
  • 将其存储在数据库中有几个缺点。数据库将变得巨大并迅速达到您的极限。现在访问您的文件需要通过数据库层,因此会遇到更多瓶颈。无法从其他服务器提供文件。如果您的文件大于您的数据类型,则文件内容将被截断。对于文件系统,文件有可能在 RAM 中存活,这与 SELECT 不同,后者总是从磁盘读取。数据库备份/恢复将花费更长的时间并且需要更多的磁盘空间,尤其是在您保留多个备份的情况下。我可以继续...
  • thanx sir tmp_name 确实有效..但我是新来将图像存储在服务器上的文件夹中..你能给我提供任何教程的链接吗?
  • 我推荐使用blueimp.github.io/jQuery-File-Upload 源代码在这里:github.com/blueimp/jQuery-File-Upload 对于后端,有一个/server/php 目录。所有后端请求都通过 index.php,其中包括它们的 UploadHandler.php 文件,该文件的定义方式无需编辑,但您可以使用自己的类对其进行扩展。虽然默认情况下代码不适用于数据库,但这里已经为您构建了集成代码:github.com/blueimp/jQuery-File-Upload/wiki/…
  • 请注意代码,您很可能希望生成文件内容的哈希值,而不是使用用户上传的文件名,以避免出现长名称和空格等问题。此外您可能希望自定义允许的上传扩展并将其限制为 PNG、GIF 和 JP[E]G。例如,BMP 并不适用于网络:stackoverflow.com/questions/12276188/… 然后剩下的图像格式(如 TIF[F])也不适用于网络。
猜你喜欢
  • 2014-06-20
  • 2013-06-12
  • 1970-01-01
  • 2016-05-06
  • 2013-05-28
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 2013-01-21
相关资源
最近更新 更多