Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP将图像上载到MySQL(blob)_Php_Mysql_Image_Pdo_Blob - Fatal编程技术网

使用PHP将图像上载到MySQL(blob)

使用PHP将图像上载到MySQL(blob),php,mysql,image,pdo,blob,Php,Mysql,Image,Pdo,Blob,出于安全考虑,我决定将用户配置文件图像上传到数据库,而不仅仅是一个文件夹并上传图像地址,这将是一个好主意 我以前从未在后端处理过文件上传,但从各种来源了解到这一点后,我相信我做的一切都是正确的。但是,没有上载有用的二进制数据 在php.ini中 文件上传=打开 在前端 *个人资料照片 fopen()不会返回文件的内容。它返回一个文件指针资源,然后您可以将其传递给类似的对象以获取内容 比如: $handler = fopen($_FILES['avatar']["tmp_na

出于安全考虑,我决定将用户配置文件图像上传到数据库,而不仅仅是一个文件夹并上传图像地址,这将是一个好主意

我以前从未在后端处理过文件上传,但从各种来源了解到这一点后,我相信我做的一切都是正确的。但是,没有上载有用的二进制数据

在php.ini中

文件上传=打开

在前端



*个人资料照片

fopen()
不会返回文件的内容。它返回一个文件指针资源,然后您可以将其传递给类似的对象以获取内容

比如:

$handler = fopen($_FILES['avatar']["tmp_name"], 'r');
$file = fread($handler, filesize($_FILES['avatar']["tmp_name"]));
fclose($handler);
更简单的方法是使用:


这将在一行中为您提供内容。

出于好奇,将图像存储在db解决方案中存在哪些安全问题?@MagnusEriksson我的第一个选择是带有图像地址的公用文件夹。即使我停止了该文件夹的导航或索引功能,也可以通过操纵URL轻松浏览用户照片,除非我让所有图像名称都包含大量随机字符。。。我不确定这样做有多安全TBHY您可以将图像保留在文档根目录之外,并使用一个PHP文件作为代理:
image.PHP?name=foo.jpg
并让
image.PHP
文件从图像文件夹读取和输出图像数据。然后,您还可以在输出图像之前添加检查以查看用户是否登录。它将与您的db解决方案一样,但不需要将文件存储在数据库中,而不需要存储在文件系统中(它们所属的位置)…@MagnusEriksson哦,好的。文件内容看起来更有希望。var_dump为此输出了大量明显随机的unicode,所以看起来是正确的。上传到数据库失败,虽然,将检查尽快让我知道,如果下面的答案有帮助。如果是,请随意接受它,让其他用户知道它已解决。这就解决了眼前的问题。我相信连接到数据库的时间太长了(Mysql服务器出现了错误),所以我想我会实现你的“文档根下”建议,只是为了100%清楚:它不是文档根下(可以解释为下/内),它应该是文档根下的“外”(如上/下)(防止客户端直接访问)。但是,是的,这可能是一个更好的选择。我认为从上下文来看,很明显,我们不是在讨论www/public\u html/img类型的路径。100%清晰始终是好的。有时你可能会认为某些事情是显而易见的,而其他人则不是:-)这也是为了澄清它的任何未来的游客。我学会了尽可能少地假设。
$file = file_get_contents($_FILES['avatar']["tmp_name"]);