使用$ _GET将变量传递给PHP下载脚本

时间:2012-11-12 15:50:30

标签: php get

我有以下网址:

http://www.solutionssoftwarematrix.com/download.php?filename=CreatingandMarketingthePerfectYouTubeVideo.zip

当有人点击上面的链接时,我试图将字符串变量传递给PHP脚本(下面)。

这是脚本(download.php):

http://www.devshed.com/c/a/PHP/Simple-and-Secure-PHP-Download-Script-with-Limits-Tutorial/1/

以下与BOLD AREAS相关的线路是$_GET功能正在添加的地方,但是,我一直收到解析错误或者它没有提取文件名,下载也不起作用。

header("Content-type:application/pdf");
header('Content-Disposition: attachment;filename="http://www.yourdomain.com/ebookfordownloads/$_GET['$filename']"');

readfile("/your/absolute/server/path/html/ebookfordownloads/$_GET['$filename']");


header("Content-type:application/pdf");
header('Content-Disposition: attachment; filename="http://www.yourdomain.com/ebookfordownloads/$_GET['$filename']"');
readfile("/your/absolute/server/path/html/ebookfordownloads/$_GET['$filename']");

3 个答案:

答案 0 :(得分:1)

存在多个问题:

  • 此语法无效:'$_GET['$filename ... '$filename之前的撇号关闭字符串。您可能想要做的是downloads/' . $_GET[$filename] - 连接
  • 此语法也无效:"downloads/$_GET['$filename" - 在带引号的字符串中使用数组访问时,您不能使用撇号。再次,连接是你最好的选择:"downloads/" . $_GET[$filename]
  • 我不确定您是想要$_GET['$filename']还是$_GET[$filename]还是$_GET['filename']。这三者之间有一个非常重要的区别。
  • 如果用户可以某种方式设置$filename(或filename获取参数,如果您打算使用此参数),则您的代码存在较大漏洞。

答案 1 :(得分:1)

您没有获得基本PHP string functionality。要添加这样的变量,您必须使用它:

readfile("/your/absolute/server/path/html/ebookfordownloads/{$_GET['$filename']}");

或连接他们:

readfile("/your/absolute/server/path/html/ebookfordownloads/".$_GET['$filename']);

在代码中逐字使用用户输入($_GET变量)时,更不用说非常大的安全漏洞了。在使用给定信息之前进行验证。

答案 2 :(得分:0)

假设它应该是这样的:

header("Content-type:application/pdf");
header('Content-Disposition: attachment;filename="http://www.yourdomain.com/ebookfordownloads/' . $_GET['filename'] . '"');


readfile("/your/absolute/server/path/html/ebookfordownloads/" . $_GET['filename']);


header("Content-type:application/pdf");
header('Content-Disposition: attachment; filename="http://www.yourdomain.com/ebookfordownloads/' . $_GET['filename'] . '"');
readfile("/your/absolute/server/path/html/ebookfordownloads/" . $_GET['filename'] );

看看PHP中的字符串连接。

另外:$_GET['$filename']表示您要求PHP在url中?$filename=之后获取所有内容。但您的网址没有$filename参数,只有filename,因此应将其修改为$_GET['filename']。或者,如果您有一个参数名称存储在名为$filename的变量中,如下所示:$filename = 'filename',则应将其更改为$_GET[$filename]