2013-04-09 2 views
5

Добро пожаловатьPHP + PDF, как сохранить загруженный PDF с помощью curl?

У меня есть небольшая проблема с сохранением загруженного pdf на странице. Чтобы скачать PDF Я использую 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); 

Сейчас в $ Результат (строка) у меня есть все содержимое PDF файла. И теперь начинается моя проблема. Я хотел бы сохранить загруженный PDF:

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

К сожалению, когда я сохранить или открыть новый файл PDF, я получаю пустой документ. Возможно, проблема с последними строками:

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

К сожалению, я не знаю, что изменить их, чтобы заставить его работать ... Я прошу вашу помощь. Благодаря

+0

почему не использовать http://php.net/manual/en/function.pdf-save.php –

+0

Я думаю, что есть некоторые встречающаяся ошибка в коде. Оберните свой код в блок try-catch и добавьте несколько шагов отладки. – Khaleel

+1

Я не тестировал, но я думаю, что для 'filesize()' и 'readfile()' вам нужен путь к реальному файлу, а не его содержимое как строка. – enenen

ответ

10

И filesize и readfile принимает файлы в качестве аргументов. Вы предоставляете строку вместо файла.

Пожалуйста, попробуйте это.

$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

Да, у вас есть право :) – Kuba

0

Может быть, что:

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

и чем:

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); 

Я надеюсь, что я помог!

Смежные вопросы