PHP二进制文件(图像)存储在数据库中而不是电子邮件附件中的文档时损坏

PHP二进制文件(图像)存储在数据库中而不是电子邮件附件中的文档时损坏,php,mysql,image,email,binary-data,Php,Mysql,Image,Email,Binary Data,问题是当我收到电子邮件附件时,图像/二进制数据会损坏,但是当我将文件上载到同一数据库表时,它们不会损坏 左侧是正常图像,重命名为PHP时正常工作,其二进制数据被复制。右侧是损坏后的图像。我想我应该添加这张图片,因为有人可能会看到它,然后知道这里发生了什么。下面是PHP代码 所以我有其他文件,包括存储在数据库中的图像,它们工作得很好 $data = fread($fp, filesize($tmpName)); $data = addslashes($data); //INSERT INTO ta

问题是当我收到电子邮件附件时,图像/二进制数据会损坏,但是当我将文件上载到同一数据库表时,它们不会损坏

左侧是正常图像,重命名为PHP时正常工作,其二进制数据被复制。右侧是损坏后的图像。我想我应该添加这张图片,因为有人可能会看到它,然后知道这里发生了什么。下面是PHP代码

所以我有其他文件,包括存储在数据库中的图像,它们工作得很好

$data = fread($fp, filesize($tmpName));
$data = addslashes($data);
//INSERT INTO table (data), ($data);//etc
然而,错误发生在PHP代码中,我使用PHP代码清理电子邮件,然后将其与附件一起存储在数据库中。我知道附件在PHP中是正确的目标文件,所以问题在于我如何存储它。MySQL中的数据列是longblob,在发送图像之前上传图像效果很好,但当我收到电子邮件时,处理放置接收到的附件的代码会在使用相同的数据库表时中断

$data = mysqli_real_escape_string($connection,base64_decode($email['attachments'][$t]['attachment']));
$data = mysqli_real_escape_string($connection,$email['attachments'][$t]['attachment']);
$data = base64_decode($email['attachments'][$t]['attachment']);
$data = mysql_real_escape_string(base64_decode($email['attachments'][$t]['attachment']));
$data = addslashes($email['attachments'][$t]['attachment']);

为什么首先要将文件存储在数据库中?如果是你的附件而不是我的,PHP会阻碍我和你的文件,Apache是一个要么全有要么全无的协议,我会认真对待隐私和安全问题。你确定电子邮件附件一开始没有损坏吗?@John如果安全是你的设计重点,似乎你应该把重点放在对静态文件进行加密上,而不是简单地存储在DB中,在DB中,拥有DB权限的人可以像访问某个文件系统目录中的文件一样轻松地访问该文件。文件不会损坏,因为我从多个第三方将它们发送到多个电子邮件,包括我自己的电子邮件。如果我加密这些文件,你仍然可以得到它们,然后再找出如何解密它们。