PHP i ładowanie dużych plików do bazy Postgresql

0

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

2

Postanowiliśmy że będziemy je wrzucać do bazy danych zamiast przechowywać je w systemie plików serwera.

Źle postanowiliście.

0

Nie ma to jak rzeczowa i konkretna odpowiedź :P

Jesteśmy jeszcze na etapie planowania i testowania różnych rozwiązań. Staramy się wybrać najlepsze.

0

To jest niezgodne z samymi założeniami baz danych. System plików będzie wydajniejszy do przechowywania statycznych plików, przepychanie czegoś sporego LANem to nadmierne obciążanie bazy danych i nadużywanie zasobów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1