Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] pobieranie plików z serwera, nietypowy błąd - edycja pliku podczas próby pobierania
pavon
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 8.08.2017

Ostrzeżenie: (0%)
-----


Witam
Mam problem ze wspomnianym już w tytule pobieraniem plików z serwera (pracuję póki co na localhost). Konkretnie: podczas pobierania plików tekstowych są one większe o 2 bajty - na początku pliku pojawia się dodatkowa pusta linia, natomiast inne typy plików (np. obrazki) są uszkodzone i nie da się ich otworzyć. Z uploadem jest wszystko w porządku (powinno), ponieważ pliki już wysłane ale jeszcze nie w żaden sposób zmienione, stąd moja diagnoza. Oto fragment mojego kodu z pliku download.php do pobierania plików (krotki komentarz poniżej):
  1. $name = $row[$db_attachment_name];
  2. //clearstatcache();
  3. //if (file_exists("attachments/".$name) && $name!=''){
  4. header("Cache-control: private");
  5. header("Content-Type: ".$row[$db_attachment_type]);
  6. header("Content-Length: ".$row[$db_attachment_size]);
  7. header("Content-Disposition: attachment; filename=\"".substr($name, 17)."\";");
  8. readfile("attachments/".$name);
  9.  
  10. //}
  11. //else{
  12. // echo "<script type=\"text/javascript\">window.alert('Wystąpił błąd: plik nie istnieje');</script>";
  13. // $sql = "DELETE FROM $db_attachment_tab WHERE $db_attachment_id='$id'";
  14. // $connection->query($sql);
  15. // header("Location: tasks_all.php?sid=".$_GET['sid']."&tid=".$_GET['tid']);
  16. //}

linia 1: w tablicy $row umieszczone są dane pliku pobrane wcześniej z bazy danych

linia 7: używam funkcji substr() aby wyciągnąć z nazwy pliku tylko tą cześć, jaką użytkownik powinien zobaczyć (poprzedni ciąg znaków służy temu, aby nie powodował błędów przy dodaniu kilku plików o tej samej nazwie), nie wiem czy to ma jakieś znaczenie i czy w tym miejscu wkrada się błąd, ale piszę tak pro forma.

linie 2,3,10-16: docelowo ma to zabezpieczyć przed błędami w sytuacji, gdy plik zostanie usunięty z serwera, ale nie zostanie usunięty z bazy danych i użytkownik będzie miał nadal możliwość kliknięcia na jednej ze stron "pobierz plik". Jednak też nie działa to tak jak powinno: otrzymuję komunikat, że strona powoduje zbyt wiele przekierowań. Co więcej nagłówek header z linii 15 powoduje wypisanie złego adresu url (z innych podstron działa to bez zarzutu) mianowicie: zamiast adresu "localhost/HD/ tasks_all.php?sid=13&tid=15" (przykładowe wartości liczbowe) pojawia się "http://localhost/HD/download.php/tasks_all.php?sid=13&tid=15".

Gdy w tym pliku testowo pisałem w niektórych miejscach "echo" aby kontrolować, czy warunek w ifie jest spełniany (tak wiem że to słabe rozwiązanie, ale jeszcze nie bardzo ogarniam debugger w NetBeansie), wszystko wypisywane było do pliku tekstowego (również ewentualne informacje o błędach z php). Wiem, że jest to spowodowane tym co dzieje się w liniach 4-8, ale czy mógłby ktoś powiedzieć mi jak użyć potem nagłówka header aby "wyjść z pliku" i móc znowu wyświetlić ewentualne komunikaty w przeglądarce oraz prawidłowo przekierować operacje na inną stronę?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 00:55