Има няколко теми за обсъждане тук.
Формулярът
За да качите файла, променете атрибута enctype на формуляра.
<form action="insert.php" method="post" enctype="multipart/form-data">
:
</form>
Файлът се съхранява
Можете да съхранявате файла в база данни или просто като файл в дисковата система на сървъра. Каквото и да изберете, не е необходимо да разделяте файла на редове. Съхранявайте файла като единична единица.
Прочетете този запис, който обсъжда темата.
Тук трябва да е достатъчно да се каже, че полето на вашата база данни трябва да бъде с подходящ тип и размер, за да съхранява файла.
Лично аз съм фен на съхраняването на файла на диск и името на файла в базата данни.
Обработка на качване на файлове
Можете да запишете файла някъде на диск. Това не е най-добрият начин да го направите, но най-простият за демонстрация. Има достатъчно примери за SO, например Как да качвате и запазвате файлове с желано име
$info = pathinfo($_FILES['upload']['name']);
$ext = $info['extension']; // get the extension of the file
$newname = "newname.".$ext;
$target = 'mydocs/'.$newname;
move_uploaded_file( $_FILES['upload']['tmp_name'], $target);
Изтегляне на файла За да се покаже и изтегли файлът, просто отпечатайте съдържанието в браузъра.
ob_start();
// do things. See below
ob_clean();
flush();
readfile($file);
ob_flush();
Това ще покаже файла и вероятно ще обърка браузъра. За да кажете на браузъра да обработва файла като документ на Word, трябва да изпратите съответните заглавки на браузъра, преди да изпратите файла.
ob_start();
if(isset($_REQUEST['dlink']))
{
$file = $_REQUEST['dlink'];
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
ob_flush();