Cześć
Piszemy aplikację w PHP z wykorzystaniem bazy danych Postgresql.
Za zadanie mamy przechowywać niektóre ważne pliki od klienta na serwerze. Postanowiliśmy że będziemy je wrzucać do bazy danych zamiast przechowywać je w systemie plików serwera.
Przejrzałem dokumentację php dotyczącą postgres-a i napisałem mniej więcej taki kod:
$file = $_FILES['file'];
$fp = fopen($file['tmp_name'], "r");
$buffer = fread($fp, filesize($file['tmp_name']));
fclose($fp);
pg_exec($pg_handler, "begin");
$oid = pg_locreate($pg_handler);
$rs = pg_exec($pg_handler, "INSERT INTO files(file_name, file_oid) VALUES('This is file from Client', $oid);");
$handle = pg_loopen ($pg_handler, $oid, "w");
pg_lowrite ($handle, $buffer);
pg_loclose ($handle);
pg_exec($pg_handler, "commit");
Wszystko fajnie działa. Plik przesłany z formularza zapisuje się w bazie i mogę go potem odczytać.
Martwi mnie problem, co się stanie gdy plik będzie duży np 50mb.
$buffer = fread($fp, filesize($file['tmp_name']));
Ta linijka ładuje cały plik do pamięci. Nie sądzę aby przy jakimś ogromnym pliku skrypt przeszedł.
Testowałem go dla pliku około 23 MB i było ok.
Czy jest jakiś pomysł jak załadować ten plik na serwer w kawałkach?
Wiem że istnieje lo_export ale ta metoda działa gdy serwer bazodanowy jest na tej samej maszynie co serwer obsługijący PHP.
Dziękuję z góry za pomoc