1

ユーザーがボタンをクリックするだけでPDFファイルをダウンロードできるようにダウンロードボタンを作成しようとしています。私はこれを持っています:

<?php

session_start(); // Alltid överst på sidan

if(!isset($_SESSION['sess_id']) OR $_SESSION['sess_id'] < 1){
   die("Skapa ett konto som investerare för att enkelt få tillgång till affärsplaner!");
}else if(is_numeric($_SESSION['sess_id'])) {

    /* kolla om användaren försöker ange filer i en annan mapp */
    if(substr_count($_GET['file'], "/") > 0){
        die("Invalid path"); }


/* skapa fullständig sökväg till filen */
$file = '/server/php/files/' . $_GET['file'];

/* kolla om filen finns */
if(!file_exists($file))
{
   die("Invalid filename");
}

「無効なファイル名」というメッセージが表示されます。

ただし、echo $file;パスをブラウザ(+ localhostの前)にコピーすると、探しているダウンロードダイアログが表示されます。私が間違っていることについて何か考えはありますか?

の出力echo $file

/server/php/files/roibay-business-plan.pdf

server」はルートフォルダ内のフォルダです。

4

2 に答える 2

2

$fileをエコーすると; パスをブラウザにコピーすると、探しているダウンロードダイアログが表示されます。

これfile_existsは、サーバーに相対的なパス名を期待しているためです。URIではありません。

例:

file_exists('/var/www/site.com/index.htm'); // this would work.
file_exists('www.site.com/index.htm'); // this would not
于 2012-08-08T18:53:22.560 に答える
2

mampを使用してlocalhostを設定し、lab.localのエイリアスを作成したので、話しているファイルパスはlab.local / server / php / files/somefile.pdfです。 Webブラウザーはダイアログをポップアップしますが、file_existsはそのパスを検証しません

これは、serverディレクトリがルートではないことを意味します。これを試して:

file_exists($_SERVER{'DOCUMENT_ROOT'} . "/server/php/files/roibay-business-plan.pdf"))

于 2012-08-08T19:02:16.960 に答える