2012-05-14 12 views
8

Próbuję uzyskać stronę internetową z przyciskiem, który wymusza pobranie pliku pdf.Używanie php do wymuszania pobierania pdf

Herezje html przycisku:

<a href=scripts/download.php> 
    <input type="image" src="images/download.gif" alt="Submit button"/> 
    </a> 

i skrypt php do tej pory:

<?php 
    header('Content-Type: application/pdf'); 
    header('Content-disposition: attachment;filename=documents/ECM_IT_ResumeDownload.pdf'); 
    readfile('documents/ECM_IT_ResumeDownload.pdf'); 
    ?> 

Wydaje pobrać plik grzywny, ale kiedy idę, aby go otworzyć i dostać ten błąd :

"Adobe Reader nie mógł otworzyć" documents_ECM_IT_ResumeDownload.pdf ", ponieważ nie jest obsługiwanym typem pliku lub plik został uszkodzony (na przykład został wysłany jako e-mail załącznik i nie został poprawnie zdekodowany). "

Każda pomoc zostanie bardzo doceniona.

EDIT Otwarty pdf w edytorze tekstowym i dostał tę wiadomość:

"
Ostrzeżenie: readfile (dokumenty/ECM_IT_ResumeDownload.pdf) [function.readfile]: failed to open stream: Nie ma takiego pliku lub katalogu w html/scripts/download.php na linii
"

dokument jest definit ale ely tam. w html/Dokumenty/ECM_IT_ResumeDownload.pdf

+2

Zawijanie znacznika wejściowego w znaczniku łącza jest nieparzyste. – Ben

+0

Najprawdopodobniej coś powoduje, że dane wyjściowe zawierają niepoprawną zawartość pdf. Może serwer generuje błąd. Spróbuj otworzyć plik wynikowy w edytorze tekstu – Ben

+0

Ahh nie zauważyłem, że zrobiłem to dla innego linku, ale nie zauważyłem, że wciąż miałem to –

Odpowiedz

2

próbowałeś pozbycie tagu zamknięcia PHP (i>) na końcu? Traktuje stronę jako czystą stronę PHP, usuwając wszelkie możliwe nowe linie, które przypadkowo mogą zostać dołączone na końcu wyjścia. Pomogło mi to, gdy dynamicznie tworzyłem pliki programu Excel do pobrania i były one pobierane jako uszkodzone. Sprawdź tę stronę, aby uzyskać więcej informacji:

http://www.php.net/manual/en/language.basic-syntax.phptags.php

ze swojego edytowanej pytanie, wydaje się, że PHP jest w stanie znaleźć plik. Spróbuj użyć bezwzględnej ścieżki do pliku w następujący sposób: "c: \ blah \ de \ blah \ bloo.pdf" lub "c: /blah/de/blah/bloo.pdf". Jeśli jedna z tych ścieżek działa poprawnie i jest pobierana, twoja względna ścieżka jest w jakiś sposób niepoprawna.

+0

To jest coś, czego nie wiedziałem, myślałem, że zawsze trzeba je zamykać. Ale to nie rozwiązuje problemu niestety –

+2

Spróbuj bezwzględnej ścieżki w wywołaniu readfile(): "c: /html/downloads/ECM_IT_ResumeDownload.pdf" lub cokolwiek innego . – abelito

+0

To się udało, dzięki :) –

4

Spróbuj usunąć ścieżkę do pliku i po prostu zostawić nazwę pliku w treści:

header('Content-Type: application/pdf'); 
header('Content-disposition: attachment; filename=ECM_IT_ResumeDownload.pdf'); 
+0

Nadal mam ten sam błąd. –

18
$file_url = www.example.com/pdffolder/$pdfname; 
header('Content-Type: application/pdf'); 
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename=".$pdfname); 
readfile($file_url); 
0

Nawiasem mówiąc, trochę późno, ale aby zidentyfikować problem właściwie tutaj:

skryptu pobierania jest pod numerem scripts/download.php, a plik, który chcesz pobrać, znajduje się pod adresem documents/[...].pdf.

Z tego powodu twoja funkcja readfile() powinna przejść do katalogu nadrzędnego (poza scripts/), np. readfile('../documents/[...].pdf');.

Powiązane problemy