PHP GET聚集在一个文件中?

时间:2011-07-02 03:36:25

标签: php get

我使用以下代码获得了12个.php文件:

if($_GET['u']){
  $srcp = imagecreatefrompng("http://www.minecraft.net/skin/".$_GET['u'].".png");
  $destp = imagecreate(1200, 1800);
  imagecopyresampled($destp, $srcp, 0, 0, 20, 20, 1200, 1800, 8, 12);
  header('Content-type: image/png');
  imagepng($destp);
}

是的,只有分隔不同文件的是图像的位置。现在,我可以在PHP中拥有许多这样的行吗?我尝试从另一个文件中取出该行和一行,然后在这种情况下将 u 重命名为 b ,但它不起作用....

我尝试这样做没有任何好结果(只有你工作):

if($_GET['u']){
   $srcp = imagecreatefrompng("http://www.minecraft.net/skin/".$_GET['u'].".png");
   $destp = imagecreate(1200, 1800); 
   imagecopyresampled($destp, $srcp, 0, 0, 20, 20, 1200, 1800, 8, 12);
   header('Content-type: image/png');
   imagepng($destp);
}
if($_GET['b']){
   $srcp = imagecreatefrompng("http://www.minecraft.net/skin/".$_GET['b'].".png");
   $destp = imagecreate(600, 1800);
   imagecopyresampled($destp, $srcp, 0, 0, 16, 20, 600, 1800, 4, 12);
   header('Content-type: image/png');
   imagepng($destp);
}

那么有谁知道如何将12个PHP文件的所有12行代码放入1个php文件中? :/

提前致谢,enji

4 个答案:

答案 0 :(得分:3)

首先,我想解决代码中一个紧迫的安全漏洞。使用任何请求参数而不进行过滤会产生麻烦。在使用变量之前,请务必过滤$_GET$_POST$_REQUEST等变量。简而言之,请确保您对$_GET['u']$_GET['b']进行某种转义/过滤。例如,如果您知道两个参数仅包含字母数字字符,请使用以下命令:

// Remove non-alphanumeric characters from $_GET['u']
$filtered = preg_replace("/[^a-zA-Z0-9\s]/", "", $_GET['u']);

虽然陈腐,但在开发时应始终考虑以下格言:

  

永远不要信任用户!

答案 1 :(得分:2)

欢迎使用功能以及可重复使用代码的世界。将该代码放入一个函数中,将该函数放入一个文件中,将该文件包含在其他文件中,调用该函数:

// thumbnail.php
function outputSkinThumbnail($skin) {
    $srcp = imagecreatefrompng("http://www.minecraft.net/skin/$skin.png");
    $destp = imagecreate(1200, 1800);
    imagecopyresampled($destp, $srcp, 0, 0, 20, 20, 1200, 1800, 8, 12);
    header('Content-type: image/png');
    imagepng($destp);
}

// some other file
require_once 'thumbnail.php';
if (!empty($_GET['u'])) {
    outputSkinThumbnail($_GET['u']);
}

答案 2 :(得分:1)

我认为,在这种情况下,由于文件始终是相同的路径,您应该添加第二个$_GET并将其用作带开关的类型:

image.php?u=water&position=2

if($_GET['u']){
    $srcp = imagecreatefrompng("http://www.minecraft.net/skin/".$_GET['u'].".png");
    switch($_GET['position']){
        case '1':
            $destp = imagecreate(1200, 1800); 
            imagecopyresampled($destp, $srcp, 0, 0, 20, 20, 1200, 1800, 8, 12);
            break;
        case '2':
            $destp = imagecreate(600, 1800);
            imagecopyresampled($destp, $srcp, 0, 0, 16, 20, 600, 1800, 4, 12);
            break;
    }
   header('Content-type: image/png');
   imagepng($destp);
}

我将第二次发出webjawns.com的警告,从不相信$_GET的输入值。 serialworm提供了一种使用$u = strip_tags($_GET['u']);

过滤输入的简单方法

答案 3 :(得分:0)

你可以创建一个函数:

function showThumb($u){
    if($u){
        $srcp = imagecreatefrompng("http://www.minecraft.net/skin/". $u .".png");
        $destp = imagecreate(1200, 1800);
        imagecopyresampled($destp, $srcp, 0, 0, 20, 20, 1200, 1800, 8, 12);
        header('Content-type: image/png');
        imagepng($destp);
     }
}

您应该检查恶意代码的$ _GET值

$u = strip_tags($_GET['u']);

并称之为:

showThumb($u);