2013-04-09 15 views
5

WitamyPHP + PDF, jak zapisać pobrany plik PDF za pomocą curl?

Mam mały problem z zapisaniem pobranego pliku pdf na stronie. Aby pobrać plik PDF używam Curl:

$CurlConnect = curl_init(); 
curl_setopt($CurlConnect, CURLOPT_URL, 'http://website.com/invoices/download/1'); 
curl_setopt($CurlConnect, CURLOPT_POST, 1); 
curl_setopt($CurlConnect, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($CurlConnect, CURLOPT_POSTFIELDS, $request); 
curl_setopt($CurlConnect, CURLOPT_USERPWD, $login.':'.$password); 
$Result = curl_exec($CurlConnect); 

Teraz w $ Wynik (string) Mam wszystkie treści pliku PDF. A teraz zaczyna się mój problem. Chciałbym zapisać pobrany plik:

header('Cache-Control: public'); 
header('Content-type: application/pdf'); 
header('Content-Disposition: attachment; filename="new.pdf"'); 
header('Content-Length: '.filesize($Result)); 
readfile($Result); 

Niestety, po zapisaniu lub otworzeniu nowego pliku PDF otrzymuję pusty dokument. Być może problem jest z ostatnimi wierszami:

header('Content-Length: '.filesize($Result)); 
readfile($Result); 

Niestety, nie wiem, co się je zmienić, aby to działało ... Proszę o pomoc. Dzięki

+0

dlaczego nie użyć http://php.net/manual/en/function.pdf-save.php –

+0

myślę, że jest jakiś błąd występujące w kodzie. Zawiń swój kod w bloku try-catch i dodaj kilka kroków debugowania. – Khaleel

+1

Nie testowałem, ale myślę, że dla 'filesize()' i 'readfile()' potrzebna jest ścieżka pliku rzeczywistego zamiast jej zawartości jako łańcucha znaków. – enenen

Odpowiedz

10

Zarówno filesize, jak i readfile przyjmuje pliki jako argumenty. Podajesz ciąg zamiast pliku.

Spróbuj tego.

$CurlConnect = curl_init(); 
curl_setopt($CurlConnect, CURLOPT_URL, 'http://website.com/invoices/download/1'); 
curl_setopt($CurlConnect, CURLOPT_POST, 1); 
curl_setopt($CurlConnect, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($CurlConnect, CURLOPT_POSTFIELDS, $request); 
curl_setopt($CurlConnect, CURLOPT_USERPWD, $login.':'.$password); 
$Result = curl_exec($CurlConnect); 

header('Cache-Control: public'); 
header('Content-type: application/pdf'); 
header('Content-Disposition: attachment; filename="new.pdf"'); 
header('Content-Length: '.strlen($Result)); 
echo $Result; 
+0

Tak, masz rację :) – Kuba

0

Może:

// ... 
$Result = curl_exec($CurlConnect); 
$file = 'file.pdf'; 
$fileName = 'fileName.pdf'; 
file_put_contents($file, $Result); 

i niż:

header('Content-type: application/pdf'); 
header('Content-Disposition: inline; filename="' . $filename . '"'); 
header('Content-Transfer-Encoding: binary'); 
header('Content-Length: ' . filesize($file)); 
header('Accept-Ranges: bytes'); 

readfile($file); 

Mam nadzieję, że pomogłem!