0

PHP イントラネットのユーザーが、Apache サーバー上のフォルダーにある PDF ファイルを開いたり保存したりできるようにしたいと考えています。PDF には会社の個人情報が含まれているため、Web フォルダーに配置したくありません。

echo '<form name="openpdf" method="POST" action="downloadPDF.php">';
echo '<input type="hidden" name="pdf">';
echo'</form>';

<tr>
<td> PDFFile1 </td>
<td><a href=javascript:void(null); onclick='document.openpdf.pdf.value="c:\pdfs\example.pdf";document.openpdf.submit(); return false;'><IMG src="img/pdf.jpg"></a></td></tr>

ダウンロードPDF.php:

<?
$pdf=$_POST["pdf"];
if (file_exists($pdf)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/pdf');   
    header('Content-Disposition: attachment; filename='.basename($pdf));   
    header('Content-Transfer-Encoding: binary');     
    header('Expires: 0');    
    header('Cache-Control: must-revalidate');   
    header('Pragma: public');   
    header('Content-Length: ' . filesize($pdf));     
    ob_clean();     
    flush();     
    readfile($pdf);     
    exit; 
} 
?>

問題は、ユーザーがファイルを開く/保存するときに、パスがそのフォルダーを指しているが、サーバーではなくクライアント PC 内にあることです。

4

3 に答える 3

1

PHP からサーバー上で内部的に PDF を処理する場合はfile:///、URL から を省略してください。

だからそうあるべきだ

$pdf="c:/pdfs/example.pdf";
于 2012-07-09T16:55:54.020 に答える
0

あなたが今していることは、

  1. Javascript は、c:\pdfs\example.pdfクリック時にフォームの pdf フィールドに の値を入力し、downloadpdf.php に送信します。
  2. サーバーでは、Downloadpdf.php が $_POST["pdf"] 値を $pdf に割り当てています。
  3. ファイル $pdf が存在する場合、このファイルをダウンロードするようにユーザーに提案するだけです。

現在、これサーバーとクライアントが同じコンピューターである場合に機能する可能性があります(特に、C:ドライブのためにPC上)。つまり、ローカル XAMPP のように。しかし、ユーザーとサーバーがまったく異なるコンピューター上にある現実の世界では、if (file_exists($pdf))常に失敗します (サーバー上で実際にフォルダーC:にファイルがある場合を除きます)。現実の世界では、ステップ 3 は失敗します。独自のドライブを調べます(Windows サーバーの場合)。 あなたがすべきexaple.pdfpdfsc:\pdfs\example.pdf C:

1 HTML ファイルアップロードボックスでファイルのアップロードを試みます。
2 $_FILES を使用してサーバー上で取得/取得し、処理を行います
。 3. ダウンロードに必要なヘッダーを送信します。

詳細については、HTML フォーム ファイルのアップロード (Google) & $_FILES (PHP.Net)を参照してください。

于 2012-07-09T18:14:49.177 に答える
0

サーバーはクライアント PC を認識していreadfileないため、ここでは機能しません。

リダイレクトを試してみたいと思うかもしれませんが、ブラウザがセキュリティ上の理由でそれを許可しているかどうかはわかりません (リダイレクトでプロトコルを切り替えています)。

于 2012-07-09T16:53:28.620 に答える