我有以下网址:
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']");
答案 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]