【问题标题】:wrong file name, but it's correct错误的文件名,但它是正确的
【发布时间】:2012-08-05 22:56:00
【问题描述】:

我正在尝试创建下载按钮,以便用户可以通过单击按钮下载 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”是我根文件夹中的一个文件夹。

【问题讨论】:

  • 仅供参考,像这样使用 $_GET 而不过滤它可能会导致安全问题。 en.wikipedia.org/wiki/Null_character
  • 我有一些过滤代码 :)(我会添加它以便它在那里),但是谢谢!
  • 能否将输出发布到echo $file 命令?
  • 您是否在任何地方的服务器结构中使用符号链接? file_exists 和符号链接不能很好地协同工作。
  • 你可以试试这个吗? file_exists($_SERVER{'DOCUMENT_ROOT'} . "/php/files/roibay-business-plan.pdf")) 假设 /server 是您的根。

标签: php pdf download file-exists


【解决方案1】:

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

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

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

【讨论】:

  • 我以为服务器上面的文件夹可能是服务器根目录:)
  • 这很奇怪。你说server 目录在你的root 目录中。这是否意味着您的根目录就是您的网站根文件夹?
  • 我不是我想的我可能弄错了
【解决方案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

【讨论】:

  • 但路径是相对的:/server/php/files/somefile.pdf
  • 什么是/server/php?这取决于您的 PHP 根目录是什么。如果我尝试在我的服务器配置中包含/index.htm,它不会在/var/www/mysite.com 中查找index.htm。但如果我尝试包含 index.htm(没有前面的斜线),它会在不同的位置显示。
  • @Alisso 你一直在说相对。你的意思是你的文件系统中的路径是:/server/php/files/bla.pdf 还是/var/www/html/server/php/files/blad.pdf
  • 我已经使用 mamp 设置了 localhost,并且我创建了一个别名 lab.local,所以我正在谈论的文件路径是:lab.local/server/php/files/somefile .pdf ,当我将其输入网络浏览器时,会弹出对话框,但 file_exists 不验证该路径
猜你喜欢
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
  • 2019-01-23
  • 1970-01-01
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多