在PHP中获取参数的最佳方法是什么?

时间:2018-01-18 03:35:38

标签: php html

我会完全澄清我的问题,对所有人都抱歉。 我的代码写入来自网站的文件现在不能正常工作,html代码在带有php扩展名的页面上,在我的PC中使用Wampserever的虚拟主机文件夹中。 C:\ wamp \ 1VH \ PRU1,当网站在线时,有一个文件夹,其中有一个名为image.php的文件。这个文件是从网站内的其他页面调用的,如下所示:(文件的一小段代码,C:\ wamp \ 1VH \ PRU1 \ example.php)

    var clock = $('#countdownClock').FlipClock(minutes * 60, {
        clockFace: 'MinuteCounter',
        autoStart: false,
        countdown: true,
        showSeconds: true,
        callbacks: {
            interval: function () {
                var time = clock.getTime().time;
                var minutes = Math.floor(time / 60);
                var seconds = time - minutes * 60;
                var total = minutes + ":" + seconds
                console.log(minutes + ":" + seconds);

                if (minutes < 2) {
                    if (counter == 0) {
                        counter++;
            }
        }
    })
    clock.start();

结果是图像显示正确。 现在,就像我在本地有这个proyect,我没有那个image.php文件的代码我必须自己写,这样图像将以与网站在线时相同的方式显示。

当网站在线并且我打开该image.php文件返回的图像后,该网址就是示例https://example.com/images/foods/salads/green_50/23.png

现在该网站是如何只是本地的,我没有那个image.php文件写的因为我确定如何写它,图像显然没有显示。

在C:\ wamp \ 1VH \ PRU1 \ example.php中,文件代码被更改为删除“https://www.example.com/img/image.php?”对于本地路径“img / image.php?”。

在同一文件夹中还有其他文件:“img”文件夹(此处必须分配image.php文件)和“images”文件夹,在其中/foods/salads/green_50/23.png, 24.png .25.png ..............

所以我有完全相同的文件夹架构,在线网站和我改变了我只能使用的代码,例如替换为Jquery“https://www.example.com/img/image.php”。为“img / image.php?”但我不能做的是替换image.php文件后面的所有代码来获取图像文件。

所以我认为能够正常获取图像的最简单方法是创建我在虚拟主机中没有的IMAGE.PHP文件。

我想知道如何获取参数并在图像,php文件中返回正确的URL。

DIV示例的图像必须为C:/wamp/1VH/PRU1/images/foods/salads/green_50/23.png

我的电脑中有正确的文件夹和图片,我只需要写一下image.php文件。

请注意,有“&amp;”我必须统一“desc = green&amp; dim = 50&amp;”的值结果是:green_50(我的电脑中的一个文件夹)。

TVM。

4 个答案:

答案 0 :(得分:1)

你可能想要这样的东西。

image.php

 $id = intval($_GET['id']);
 echo '<div><img src="images/foods/salads/green_50/'.$id.'.png" alt="green salad '.$id.'"></div>';

然后你会把这个页面称为

www.example.com/image.php?id=23

因此,您可以在网址中看到我们在网址的查询部分中有id=23。我们使用$_GET['id']在PHP中访问它。很简单。在这种情况下,如果它是23,它等于id=52,而不是intval

现在 folder=foods 部分非常重要,出于安全考虑,您永远不应将用户输入直接放入文件路径中。我没有深入了解目录横向攻击的细节。但是,如果你只是允许任何东西,你会容易受到什么影响。它经常被忽视,所以你不会成为第一个。

https://en.wikipedia.org/wiki/Directory_traversal_attack

现在授予服务器应该正确设置用户权限,但我说为什么在我们可以安全使用1行代码时进行赌博。

这应该让你开始。对于其余的人,我会设置一个这样的白名单:

对于

 $allowedFolders = [
      'food',
      'clothes'
      'kids'
 ];

 etc...

您将使用允许的值

创建一个数组
///set a default
$folder = '';

if(!empty($_GET['folder'])){
    if(in_array($_GET['folder'], $allowedFolders)){
         $folder = $_GET['folder'].'/';
    }else{
        throw new Exception('Invalid value for "folder"');
    }
}

etc...

然后你会像这样检查

{{1}}

然后在最后你会缝合所有&#34;清洁&#34;价值观。正如我之前所说,很多人只是忽略了这一点,只是把东西放在路上。但是,这不是正确的做法。

无论如何希望有所帮助。

答案 1 :(得分:0)

使用$_GET[];

<?php

$yourParam = $_GET['param_name'];

?>

答案 2 :(得分:0)

我可以通过以下方式获取image.php文件中的参数值:

<?php
$f = $_GET['f'];
$folder = $_GET['folder'];
$type = $_GET['type'];
$desc = $_GET['desc'];
$dim = $_GET['dim'];
$id = $_GET['id'];

?>

但我必须为图像做些什么: C:/wamp/1VH/PRU1/images/foods/salads/green_50/23.png

可以在带有IMG SRC属性的DIV中正确显示吗?

答案 3 :(得分:0)

你基本上只需要解析$ _GET参数,然后做一些检查找到文件,一个真实的图像,然后通过设置适当的内容类型标题然后输出文件内容来提供文件。

这应该可以解决问题:

A

Jersey Client API