Сохранение файла в заданный каталог с помощью FPDF

Я хочу сохранить файл PDF в указанный пользователем каталог. Я использую ФПФ. И код выглядит следующим образом:

<?php
//echo "<meta http-equiv=\"refresh\" content=\"0;url=http://www.train2invest.net/useradmin/atest_Khan.php\">";
require('fpdf.php');

//create a FPDF object
$pdf=new FPDF();

//set font for the entire document
$pdf->SetFont('times','',12);
$pdf->SetTextColor(50,60,100);

//set up a page
$pdf->AddPage('P');
$pdf->SetDisplayMode(real,'default');

//Set x and y position for the main text, reduce font size and write content
$pdf->SetXY (10,60);
$pdf->SetFontSize(12);
$pdf->Write(5,'Dear Ms.XYX');

 $filename="test.pdf";
//Output the document
$dir = "/G:/PDF/test.pdf/"; // full path like C:/xampp/htdocs/file/file/
$pdf->Output($dir.$filename,'F');
?>

Теперь, даже если я поставлю "G:\PDF\" в имя файла, он не сохранит его! Я пробовал следующее:

$filename="G:\PDF\test.pdf";
$pdf->Output($filename.'.pdf','F');


$filename="G:\\PDF\\test.pdf";
$pdf->Output($filename.'.pdf','F');

$filename="G:/PDF/test.pdf";
$pdf->Output($filename.'.pdf','F');


$filename="/G:/PDF/test.pdf/";
$pdf->Output($filename.'.pdf','F');

Я проверил, что каталог, который я пытаюсь записать, имеет разрешение на запись/чтение, и он там. ЭТО ЕЩЕ НЕ РАБОТАЕТ!

ПОЖАЛУЙСТА, помогите кто-нибудь...


person Sharmin    schedule 02.12.2010    source источник
comment
используйте форматирование code block ваш вопрос трудно прочитать и php тег, чтобы привлечь внимание нужных людей   -  person Ish    schedule 03.12.2010
comment
Вы пытались вывести его в браузер, чтобы увидеть, работает ли вообще процедура Output()? Переключите «F» на «D», чтобы попробовать.   -  person Orbling    schedule 03.12.2010
comment
Я пробовал это, но я хочу, чтобы PDF-файл сохранялся в локальной папке, я не хочу, чтобы пользователь сохранял его в папке по своему выбору, я хочу, чтобы PDF-файл сохранялся в папке, которую я бы указал в код.....но этого не происходит.   -  person Sharmin    schedule 07.12.2010


Ответы (9)


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

$filename="/home/user/public_html/test.pdf";
$pdf->Output($filename,'F');

Это сохранится в каталоге public_html вашего веб-сервера.

person user2559331    schedule 08.07.2013

Проверьте синтаксис здесь: http://www.fpdf.org/en/doc/output.htm Это: string Output([string dest [, string name [, boolean isUTF8]]]), поэтому вы должны написать:

$pdf->Output('F', $filename, true); // save into the folder of the script

or e.g.:

$pdf->Output('F', '/var/www/html/wp-content/' . $filename, true); // save into some other location

или относительный путь:

$pdf->Output('F', '../../' . $filename, true); // to parent/parent folder

Однако я не уверен, что вы можете использовать абсолютный путь Windows...

person David Najman    schedule 24.01.2019

Я сам боролся с этим, поэтому нужно убедиться в трех вещах, две из которых упоминаются в других сообщениях по этой теме:

  1. Команда: вывод('F', "xyz_file");
  2. Разрешения для целевого каталога сервера должны разрешать запись для нерасширенных привилегий (например, drwxrwxrwx)
  3. Определение типа контента: header("Content-type:application/pdf");
person 9finger    schedule 27.08.2016

Это потому, что вы пытаетесь сохранить файл в нежелательном для вас месте. Скорее всего, потому что вы не установили права доступа к каталогу на 777.

Если ваш PHP-скрипт выполняется с веб-страницы (обслуживаемой Apache), то этот код будет выполняться пользователем Apache (иногда называемым www-data).

Таким образом, ваш пользователь Apache должен иметь возможность писать в каталог, в который вы пытаетесь писать.

Как правило, вам может потребоваться предоставить право записи другим пользователям вашей системы, используя что-то вроде этого из командной строки:

chmod o+w your_directory

Программное обеспечение, которое вы используете для загрузки исходных файлов, если вы делаете это с помощью графического интерфейса, должно позволять вам делать это с помощью нескольких флажков — вам нужно установить флажок «запись» для «других» пользователей.

person Vinicius Santana    schedule 26.09.2012

Вот простое решение, которое поможет вам сохранить файл в указанном каталоге, а также указать URL-адрес файла, который вы можете сохранить в базе данных.

$invoice = new phpinvoice();
...
...

$path = $_SERVER["DOCUMENT_ROOT"].'/uploads/';
$url = $_SERVER['HTTP_HOST'].'/uploads/';

$invoice->render($path.'.pdf','F');
return $url.'.pdf'; // print_r($url.'.pdf')

Надеюсь, это поможет.

person Harrison O    schedule 06.07.2020

Вероятные разрешения вашего сервиса Apache:

http://www.php.net/manual/en/function.opendir.php#87479

person Paul Norman    schedule 02.12.2010
comment
Apache установлен на машине с Linux... поэтому я еще не уверен, как проверить права доступа к файлу на машине с Linux... - person Sharmin; 07.12.2010
comment
@Sharmin переключиться на пользователя, под которым работает Apache, перечислить каталог 'ls -al', посмотреть, какие разрешения есть у пользователя в этом каталоге, позаботиться о том, чтобы родительский каталог имел права на запись для пользователя Apache, в основном все каталоги и подпрограммы каталоги из пути должны разрешить запись пользователю Apache. - person Starlays; 04.12.2016

Вы пробовали загрузить файл? Я думаю, что вы и я, возможно, пытаемся сделать одно и то же, и это, кажется, работает. Я тоже работаю на общем диске.

http://php.net/manual/en/features.file-upload.post-method.php

person J Noel    schedule 28.03.2016

Я решил так:

public functon GeneratePdf(){
    ...
    PDF::Output("C:/xampp/htdocs/MyProject/doc.pdf","F"); 
}

Я скопировал весь путь к каталогу в метод вывода и не устанавливал для этого дополнительных разрешений.

Я надеюсь, что это поможет вам!!

person Erick Calderin Morales    schedule 15.02.2019

поменяй букву "Ф" на "Д". D заставляет скачать. Таким образом, ваша строка вывода $pdf-> должна выглядеть так.

$pdf->Output($path,'D');
person Ashen Deimos    schedule 22.03.2018
comment
Это не дает ответа на вопрос. Получив достаточную репутацию, вы сможете /comment">прокомментировать любой пост; вместо этого дайте ответы которые не требуют разъяснений от спрашивающего. – Из обзора - person Derek Brown; 22.03.2018
comment
Извините за путаницу. Надеюсь, это поможет прояснить это достаточно. - person Ashen Deimos; 22.03.2018