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):
$name = $row[$db_attachment_name]; //clearstatcache(); //if (file_exists("attachments/".$name) && $name!=''){ //} //else{ // echo "<script type=\"text/javascript\">window.alert('Wystąpił błąd: plik nie istnieje');</script>"; // $sql = "DELETE FROM $db_attachment_tab WHERE $db_attachment_id='$id'"; // $connection->query($sql); // header("Location: tasks_all.php?sid=".$_GET['sid']."&tid=".$_GET['tid']); //}
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ę?