Jest tu kilka tematów do omówienia.
Formularz
Aby przesłać plik, zmień atrybut formularza enctype.
<form action="insert.php" method="post" enctype="multipart/form-data">
:
</form>
Przechowywanie pliku
Możesz przechowywać plik w bazie danych lub jako plik w systemie dyskowym serwera. Cokolwiek wybierzesz, nie musisz dzielić pliku na jego wiersze. Zapisz plik jako pojedynczą jednostkę.
Przeczytaj ten wpis omawiający ten temat.
Wystarczy powiedzieć, że pole bazy danych powinno mieć odpowiedni typ i rozmiar do przechowywania pliku.
Osobiście jestem fanem przechowywania pliku na dysku i nazwy pliku w bazie danych.
Obsługa przesyłania plików
Możesz zapisać plik gdzieś na dysku. Nie jest to najlepszy sposób, ale najprostszy do zademonstrowania. Na SO jest wystarczająco dużo przykładów, na przykład Jak przesyłać i zapisywać pliki o pożądanej nazwie
$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);
Pobieranie pliku Aby wyświetlić i pobrać plik, wystarczy wydrukować zawartość w przeglądarce.
ob_start();
// do things. See below
ob_clean();
flush();
readfile($file);
ob_flush();
Spowoduje to wyświetlenie pliku i prawdopodobnie zmyli przeglądarkę. Aby poinformować przeglądarkę, aby obsłużyła plik jako dokument programu Word, przed wysłaniem pliku należy wysłać odpowiednie nagłówki do przeglądarki.
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();