![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 0 Dołączył: 10.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Walczę z pewnym tematem i już brakuje mi pomysłów. Może mnie ktoś naprowadzi. Posiadam w bazie tabelę, w której przechowuję załączniki (pliki różnego formatu) dodawane przez użytkowników. Skrypt odpowiedzialny za upload plików do bazy wygląda tak:
Pliki zapisywane są w polu typu blob (jest to świadomy wybór), a cały skrypt działa prawidłowo bez żadnych problemów. Schody zaczynają się podczas pobierania plików z bazy. Skrypt odpowiedzialny za to wygląda tak:
Mianowicie, mogę pobrać pliki z bazy i zapisać je na dysku lecz części z nich nie mogę otworzyć mimo, że mają taki sam rozmiar jak oryginały. Bez problemu otwierają się pliki *.pdf, ale już np. *.png lub *.jpg lub *.xls są błędne. Sam zapis do bazy jest prawidłowy, bo gdy pobieram zapisane w bazie pliki za pośrednictwem phpMyAdmin na dysk, to mogę je wszystkie później otworzyć bez żadnego problemu. Kombinuję już na różne sposoby i nie wiem co jest tego przyczyną. Czy wpływ na to może mieć konfiguracja serwera (jest to serwerek Synology DS712+) np. ustawienia dotyczące mime type ?. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 361 Pomógł: 10 Dołączył: 8.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
używasz adslashes a zapominasz o stripslashes ?
http://www.php.net/manual/pl/function.stripslashes.php a tak poza tym dlaczego przechowujesz pliki img pdf i inne w bazie? Zamiast trzymać je na dysku a w bazie tylko adresy? Ten post edytował KotWButach 7.10.2012, 17:56:59 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 508 Pomógł: 75 Dołączył: 2.11.2005 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Spróbuj do trybu otwierania pliku w fopen dodać literkę "b":
Żeby sprawdzić czy plik dobrze się wysyła i pokazuje, zapisz do bazy danych md5 treści wysyłanego pliku. Następnie przy pokazywaniu też wygeneruj sobie md5 tego pliku i porównaj. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 0 Dołączył: 10.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
używasz adslashes a zapominasz o stripslashes ? http://www.php.net/manual/pl/function.stripslashes.php a tak poza tym dlaczego przechowujesz pliki img pdf i inne w bazie? Zamiast trzymać je na dysku a w bazie tylko adresy? Zastosowanie stripslashes nie rozwiązuje problemu, a dodatkowo plik zapisane teraz na dysku różnią się wielkością od oryginałów. Pisałem już że zapis plików w bazie jest świadomym wyborem - załączników będzie niewiele i o małym rozmiarze, a poza tym wygodniej jest mi korzystać z wbudowanych mechanizmów bezpieczeństwa bazy. Spróbuj do trybu otwierania pliku w fopen dodać literkę "b": Żeby sprawdzić czy plik dobrze się wysyła i pokazuje, zapisz do bazy danych md5 treści wysyłanego pliku. Następnie przy pokazywaniu też wygeneruj sobie md5 tego pliku i porównaj. Zastosowanie fopen z opcją 'rb' nie rozwiązało problemu. Jak już pisałem rozmiar zapisywanych na dysk plików jest ten sam, ale zmienia się struktura plików bo nie można ich poprawnie otworzyć - poza plikami *.pdf które otwierają się prawidłowo w skojarzonym programie. OK problem rozwiązany - okazało się że wina leży po stronie systemu kodowania plików ze skryptami. Zmiana z UTF-8 na UTF-8 (bez BOM) załatwiło sprawę. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.06.2025 - 09:50 |