Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] pobieranie plików przez skrypt php
Forum PHP.pl > Forum > PHP
yarek12
Witam,
dotychczas pobierałem pliki po prostu odsyłając do nich przez <a href="xxx">, jednak teraz obsługuje też pliki które przeglądarka jest w stanie otworzyć i wtedy ich nie pobiera tylko otwiera.
potrzebuję teraz skryptu który pobierze mi pliki nie zależnie czy przeglądarka może je otworzyć.

Czytałem już o readfile(); w manualu, i myślę, że jest to dobre rozwiązanie, jednak nie wiem jak tego użyć, tzn na razie wymyśliłem, że zrobię sobie osobny plik w których będzie readfile i ścieżka pliku przekazywana w GET.

Jednak pytam, może ktoś z was ma ciekawszy pomysł który nie wymagał by osobnego pliki do pobierania przez readfile()
cycofiasz
Jeśli masz na serwerze mod_headers albo masz możliwość jego doinstalowania to możesz wtedy ustawić serwer tak aby automatycznie były doklejane odpowiednie nagłówki zmuszające przeglądarkę do pobrania wybranych typów plików. Więcej info tu znajdziesz: http://www.thingy-ma-jig.co.uk/blog/06-08-...pdf-to-download

Jeśli nie to pozostaje plik php z readfile. To skąd skrypt będzie wiedział co ma wysłać zależy od Twoich potrzeb. Najłatwiej przekazać w GET nazwę/ścieżkę pliku, należy uważać by użytkownik mógł pobierać tylko pliki z określonego folderu
Mefiuu
header i tam jest odpowiedni przykład o pobieraniu wink.gif
by_ikar
Nie musisz robić tego zaraz za pomocą php.. Jeżeli masz możliwość użycia htaccess, to w nim możesz wpisać taką regułkę:

Kod
AddType application/octet-stream .rmvb .mp4 .gz .tgz .rar .avi .zip .txt .mkv .ass .txt .srt .ass


i tak dalej, możesz tam dopisać rozszerzenie które cię interesuje i wtedy twój plik będzie zamiast się otwierać, to będzie informować przeglądarkę o tym żeby ten plik pobrać. Czasami się to przydaje, przy dużych plikach PDF żeby nie otwierało się w przeglądarce (jaka wtyczka adobe readera jest do przeglądarek, każdy wie..).
yarek12
kod htaccess nie działa, chyba zostanę przy php

----

próbowałem teraz z readfile();, pobiera plik, ale w jego wartości są tylko błędy php
cycofiasz
Jeśli potrzebujesz pomocy to chyba za mało szczegółów podałeś. Jakie błędy? Jaki masz kod php?
yarek12
  1. <?php
  2. $file = 'plik.plt';
  3.  
  4. if (file_exists($file)) {
  5. header('Content-Description: File Transfer');
  6. header('Content-Type: application/octet-stream');
  7. header('Content-Disposition: attachment; filename='.basename($file));
  8. header('Content-Transfer-Encoding: binary');
  9. header('Expires: 0');
  10. header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  11. header('Pragma: public');
  12. header('Content-Length: ' . filesize($file));
  13. flush();
  14. readfile($file);
  15. }
  16. ?>


Taki mam kod, teraz pobiera plik, ale jest pusty



--------------

teraz na takim kodzie pracuje:

  1. <?php
  2. $file = $_GET['file'];
  3. header('Content-Type: application/octet-stream');
  4. header('Content-Disposition: attachment; filename="'.$file.'"');
  5. readfile('../files/'.$file.'');
  6. ?>


na localhost wszystko smiga pięknie, jednak jak wrzuce na serwer, to owszem pobiera pliki ale nie da się ich odtworzyć, jak np pobierze obrazek to pisze nie podgląd nie możliwy, tak jakby ich zawartość się niszczyła

---------------

jak pobieram plik z serwera to jego zawartość jest taka, (nie dziwne że nie działają te pliki):

  1. <br />
  2. <b>Warning</b>: readfile(../files/[110]_[test]_[300x300]_[633d5d].txt) [<a href='function.readfile'>function.readfile</a>]: failed to open stream: Permission denied in <b>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx/includes/download.php</b> on line <b>5</b><br />
  3.  



---------

w linii 5, czyli tam gdzie jest błąd:

  1. readfile('../files/'.$file.'');
matix
failed to open stream: Permission denied - brak dostępu do pliku, chmod załatwi sprawę.
toaspzoo
cURL
yarek12
Cytat(matix @ 6.07.2011, 21:58:13 ) *
failed to open stream: Permission denied - brak dostępu do pliku, chmod załatwi sprawę.



Tak myślałem, ale pliki które są dodawane mają chmoda 766
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.