Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Problem z ściąganiem pliku
Forum PHP.pl > Forum > PHP > Frameworki
Maciekbjw
Witam,
ostatnio napotkałem dosyć dziwny problem, googlowałem trochę i generalnie znalazłem jakieś tam rozwiązania, jednak nie działają one zawsze (np to: http://w-shadow.com/blog/2007/08/12/how-to...nload-with-php/ albo to: http://www.weberdev.com/get_example-4182.html oraz inne)

Aktualny kod:
  1. <?php
  2. public function getAction() {
  3.        
  4.        $id = (int) $this->_request->getParam('id');
  5.        $id_project = $this->_request->getParam('id_project');
  6.        $file = $this->project->getFile($id);
  7.        
  8.        $file = './files/projects/'.$id_project.'/'.$file['file'];
  9.        header("Pragma: public");
  10.        header("Expires: 0");
  11.        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  12.  
  13.        header("Content-Type: application/force-download");
  14.        header( "Content-Disposition: attachment; filename=".basename($file));
  15.  
  16.        header( "Content-Description: File Transfer");
  17.        @readfile($file);
  18.        
  19.    }
  20. ?>


Teraz tak, plik fizycznie istnieje i jest na serwerze, klikając w link do pobrania włącza się okienko z plikiem, niestety po 'pobraniu' plik ma 0 kb (czyli nie da się go odczytać)

Dodam tylko że problem istnieje z każdym testowanym typem plików (.doc,.jpg, .html itd.)

Jeśli ktoś spotkał się z podobnym problemem i zna jego rozwiązanie, to będę wdzięczny za odpowiedzi i wszelką pomoc winksmiley.jpg

Pozdrawiam
krowal
Może problemem jest to, że nie masz uprawnień do odczytywanego pliku, spróbuj zamiast od razu go ściągać po prostu go otworzyć i zobaczyć jakie komunikaty wypluje php.

Edit: no i nie dawaj '@' przed readfile winksmiley.jpg
nexis
  1. <?php
  2. public function getAction()
  3. {
  4.  
  5.    $fid = $this->_getParam('id');
  6.    $pid = $this->_getParam('id_project');
  7.    $file = $this->project->getFile($id); # Funkcja getFile() powinna sprawdzać typy danych
  8.    $filename = sprintf('./files/projects/%s/%s', $id_project, $file['file']);
  9.    if (!file_exists($filename))
  10.    {
  11.        exit('Plik nie istnieje!');
  12.    }
  13.    $this->getResponse()
  14.         ->clearAllHeaders()
  15.         ->setHeader('Pragma', 'public', true)
  16.         ->setHeader('Cache-control', 'must-revalidate, post-check=0, pre-check=0', true)
  17.         ->setHeader('Cache-control', 'private')
  18.         ->setHeader('Expires', '0', true)
  19.         ->setHeader('Content-Type', 'application/octet-stream')
  20.         ->setHeader('Content-Transfer-Encoding', 'binary', true)
  21.         ->setHeader('Content-Length', filesize($filename), true)
  22.         ->setHeader('Content-Disposition', 'attachment; filename=' . basename($filename))
  23.         ->setBody(file_get_contents($filename));
  24. }
  25. ?>
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.