文件名错误,但它是正确的


wrong file name, but it's correct

我正在尝试创建下载按钮,以便用户只需单击按钮即可下载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;并将路径复制到我的浏览器(+前面的本地主机)时,它为我提供了我正在寻找的下载对话框。对我做错了什么有什么想法吗?

echo $file输出

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

而" server "是我的根文件夹中的一个文件夹。

我已经用 mamp 设置了本地主机,并创建了一个别名,它是 lab.local,所以我所说的文件路径是: lab.local/server/php/files/somefile.pdf当我将其输入到 网络浏览器 对话框弹出,但file_exists不验证 路径

这意味着server目录不是您的根目录。试试这个:

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

当我回显$file;并将路径复制到我的浏览器时,它会为我提供我正在寻找的下载对话框。

这是因为file_exists需要相对于服务器的路径名,而不是 URI。

  • file_exists

例:

file_exists('/var/www/site.com/index.htm'); // this would work.
file_exists('www.site.com/index.htm'); // this would not