-2

我有以下网址:

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/

下面带有粗体区域的行是我的$_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']");
4

3 回答 3

1

有多个问题:

  • 此语法无效:'$_GET['$filename... 前面的撇号'$filename关闭字符串。您可能想要做的是downloads/' . $_GET[$filename]- 连接
  • 此语法也是无效的:"downloads/$_GET['$filename"-- 在带引号的字符串中使用数组访问,您不能有撇号。同样,串联是您最好的选择:"downloads/" . $_GET[$filename]
  • 我不确定你是否想要$_GET['$filename']or$_GET[$filename]$_GET['filename']。三者之间有一个非常重要的区别。
  • $filename如果用户可以以某种方式设置(或filenameget 参数,如果这是您打算使用的),您的代码就有很大的漏洞。
于 2012-11-12T15:56:07.277 回答
1

您没有获得基本的PHP 字符串功能。要添加这样的变量,您必须使用它:

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

或连接它们:

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

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

于 2012-11-12T15:56:21.150 回答
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?$filename=在 url 之后获取所有内容。但是你的 url 没有$filename参数,只有filename,所以应该修改为$_GET['filename']. 或者,如果您将参数名称存储在名为$filename这样的变量中:$filename = 'filename',则应将其更改为$_GET[$filename]

于 2012-11-12T16:03:15.730 回答