PHP 中的配置文件图片保存选项


Profile pic save option in PHP

我用php创建了一个应用程序。如何保存用户的个人资料图片?使用 base64 编码将它们保存在数据库中是个好主意,就像这样

<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAWgBaAAD/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlubwIQAAB..." />

或其他任何东西

这是一个

好主意/做法,通常只适用于将一起使用的非常小的 CSS 图像(如 CSS 精灵(,当 IE 兼容性无关紧要时,保存请求比可缓存性更重要。

它有许多显着的缺点:

  • 在IE6和7中根本不起作用。

  • 在 IE8 中,仅适用于大小不超过 32k 的资源。这是极限这适用于 base64 编码之后。换句话说,不超过32768 个字符。

  • 它保存了一个请求,但反而使 HTML 页面膨胀!并使图像不可缓存。每次包含页面或样式表加载。

  • Base64 编码使图像大小膨胀 33%。

  • 如果在 gzip 资源中提供,数据:图像几乎可以肯定将对服务器的资源造成可怕的压力!图片是传统上非常占用 CPU 资源,压缩成本很低减小尺寸。

将图像存储在服务器中,并将图像的路径存储在数据库中。这将减少数据库服务器上的额外过载。

最好将文件路径存储在数据库中,而不是将文件存储在数据库中。数据库适用于结构化数据,而不是 Blob。此外,数据库存储通常比文件系统存储更昂贵。服务器不需要任何特殊的编码或处理来访问文件系统中的图像

使用 javascript 将 base64 图像 "src" 复制到文本框中。使用 base64 网址文本框发布表单。最好将 url 保存在数据库中,而不是将文件保存在数据库中。您可以使用以下 PHP 代码保存 base64 映像:

    <?php
define('UPLOAD_DIR', 'images/');
$base64img=$_POST['base64img'];
if (stristr($base64img, "data:image/jpeg;base64,")) {
$base64img = str_replace('data:image/jpeg;base64,', '', $base64img);
$uid=time();
$data = base64_decode($base64img);
$file = UPLOAD_DIR . $uid.'.jpg';
file_put_contents($file, $data);
}elseif (stristr($base64img, "data:image/png;base64,")) {
$base64img = str_replace('data:image/png;base64,', '', $base64img);
$uid=time();
$data = base64_decode($base64img);
$file = UPLOAD_DIR . $uid.'.png';
file_put_contents($file, $data);
}elseif (stristr($base64img, "data:image/jpg;base64,")) {
$base64img = str_replace('data:image/jpg;base64,', '', $base64img); 
$uid=time();
$data = base64_decode($base64img);
$file = UPLOAD_DIR . $uid.'.jpg';
file_put_contents($file, $data);
}
?>