Fájl feltöltése MySQL-be és letöltése PHP-vel

A feladat: PHP-ben megírni egy szkriptet, amely egy fájl tölt fel MySQL-be, illetve egy másik szkript le is tölti azt.

MySQL-ben kell egy adattábla a fájlok tárolására.

CREATE TABLE upload (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(30) NOT NULL,
type VARCHAR(30) NOT NULL,
size INT NOT NULL,
content LONGBLOB NOT NULL,
PRIMARY KEY(id)
);

Fájl feltöltése MySQL táblába PHP-vel

// Fájl adatainak megadása és lekérdezése
$FileName = 'SomeFile.txt';
$filesize = filesize($FileName);
$filetype = mime_content_type($FileName);
$fp           = fopen($FileName, 'r');
$filecontent  = fread($fp, filesize($FileName));
$filecontent  = addslashes($filecontent);
fclose($fp);

// Csatlakozás az adatbázishoz és feltöltés
$conn = connect('localhost', 'mydatabase', 'password');
mysql_select_db('mydatabase');
$sql = "INSERT INTO upload (name, type, size, content) VALUES ('$filename', '$filetype', $filesize, '$filecontent')";
$success = mysql_query($sql, $conn);
if (!$success)
echo mysql_error()."<br/>\n SQL = $sql";  

Fájl letöltése MySQL táblából PHP-vel

Arra ügyelni kell, hogy az alábbi szkript részlet futása előtt ne legyen semmiféle kiírás (echo).

// Feltételezzük, hogy a letöltendő fájl ID-je az URL-ben érkezett pl.: http://localhost/download.php?id=3
$ID = $_GET["id"];
// Csatlakozás az adatbázishoz és letöltés
$conn = connect('localhost', 'mydatabase', 'password');
mysql_select_db('mydatabase');
$sql = "SELECT name, type, size, content FROM upload WHERE id = $ID";
$result = mysql_query($sql, $conn) or die(mysql_error()."<br/>\n SQL = $sql");
list($name, $type, $size, $content) =  mysql_fetch_array($result);
header("Content-length: $size");
header("Content-type: $type");
header("Content-Disposition: attachment; filename=$name");
echo $content;
exit;

A feladatról egy részletesebb leírást angolul itt olvashatsz.