0

我在上传大小为 1.5MB 的图像时收到警告,并且图像没有存储到数据库中,它适用于小于 1MB 的图像。

请帮忙,因为我在这些警告中坚持了几天。

这是我的代码:

<?php

print_r($_FILES);

//connect to the database//

try {
$pdo = new PDO('mysql:host=localhost;dbname=forms1', 'root', 'root',array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
$file = $_FILES['image']['tmp_name']; 

$upload=0;

for($count = 0; $count < count($_FILES['image']); $count++)
{
if(!empty($_FILES['image']['name'][$count])){
$image_name[$count] = addslashes($_FILES['image']['name'][$count]); echo '<br \>';
$image_size[$count] = @getimagesize($_FILES['image']['tmp_name'][$count]);
$error[$count] = $_FILES['image']['error'][$count];

if($image_size[$count] == FALSE  || ($image_size[$count]) == 0)
    echo "That's not an image";

$upload++;
echo $upload;

// Temporary file name stored on the server
 $tmpName[$count]  = $_FILES['image']['tmp_name'][$count];

// Read the file
$fp[$count]   = fopen($tmpName[$count], 'r');
$data[$count] = fread($fp[$count], filesize($tmpName[$count]));
$data[$count] = addslashes($data[$count]);
fclose($fp[$count]);

// Create the query and insert into database.

$stmt = $pdo->prepare('INSERT INTO files (name,image) VALUES (:name,:image)');
$stmt->execute(array('name' => $image_name[$count],'image' => $data[$count]));

    if(!$stmt)
    echo "Problem uploding the image. Please check your database";  
}
}
} catch (PDOException $e) {
print "Error!: " . $e->getMessage();
die();
}

?>

这些是我得到的警告:

Warning: PDOStatement::execute(): MySQL server has gone away in C:\xampp\htdocs\testing\test.php on line 56

Warning: PDOStatement::execute(): Error reading result set's header in C:\xampp\htdocs\testing\test.php on line 56

此行的警告点:

$stmt->execute(array('name' => $image_name[$count],'image' => $data[$count]));
4

2 回答 2

5

答案相当简单:

不要将文件存储在数据库中。

这样,您将一次解决一个问题,而不是十几个问题。
只是因为关系数据库不是二进制文件的地方。

您收到的此错误消息是一个警告信号 :“您给服务器带来了巨大的不必要负载”。当您需要恢复文件时,这种负载甚至会增加。

虽然存储在文件系统中,但二进制文件不会妨碍任何人,而且 - 最重要的是 - 服务速度极快,不会花费您宝贵的资源

于 2013-10-25T05:23:06.077 回答
0

虽然将图像存储在Database增加服务器负载。这也不是一个好习惯。您必须将图像存储在一个文件夹中,并将该图像的路径或名称存储在您的Database. 在这种情况下您必须考虑的重要事项是也就是说,您必须提供一些方法来唯一标识每个图像。否则,具有相同名称的图像将被您文件夹中的新图像替换。

于 2013-10-25T06:08:28.443 回答