无法从$ _GET设置特定参数

时间:2013-11-27 11:52:04

标签: php nginx qr-code php-5.3

注意 - 我不确定这是一个lib问题还是我的代码有问题 - 请就此提出建议

我使用this lib创建了一个参数化的PHP页面,以便我们可以从url中的params生成QR代码:

include( '/qrlib/qrlib.php' );

if (isset($_GET['fg'])&&!empty($_GET['fg'])) {
    $fore_color = $_GET['fg'];
} else {
    $fore_color = 0x000000;
}

if (isset($_GET['bg'])&&!empty($_GET['bg'])) {
    $back_color = $_GET['bg'];
} else {
    $back_color = 0xFFFFFF;
}

QRcode::png($_GET['url'], false, $_GET['err'], $_GET['size'], $_GET['pixel'], false, $back_color, $fore_color);

这适用于urlerrsizepixel,但只要我尝试设置网址的颜色 - 相应的颜色变化(fg)或者bg)只是默认为黑色。

但是,如果显式设置变量$fore_color$back_color(不是通过URL并使用else语句,那么它们就可以工作。(我应该注意,如果你看一下如果没有设置参数,他们将默认为黑色FG和白色BG。

我已经回显了$fore_color$back_color以检查值是否正确传递并且它们正如预期的那样显示 - 当一个或两个颜色参数都是填充在URL中。

我在这里设置了几个例子:

http://rd.exitex.com/qr.php?url=test&size=40&pixel=1&err=L&bg=0xFFFFFF&fg=0x000000

http://rd.exitex.com/qr.php?url=test&size=40&pixel=1&err=L&bg=0xFFFFFF

http://rd.exitex.com/qr.php?url=test&size=40&pixel=1&err=L&fg=0x000000

http://rd.exitex.com/qr.php?url=test&size=40&pixel=1&err=L

有关这种奇怪行为的任何建议请指教。 (使用PHP-FPM 5.3.10在NginX 1.3.8上运行的服务器)

2 个答案:

答案 0 :(得分:2)

您需要以十进制传递参数,而不是十六进制。

因此,例如,对于浅灰色BG和绿色FG: http://rd.exitex.com/qr.php?url=test&size=40&pixel=1&err=L&bg=15724527&fg=2068254

在你的代码中,你得到的参数是Integer,而不是Hexadecimal。

因此,这是无效的: 0x20921F 这是有效的: 2134559

或者您需要添加PHP代码以将Hex转换为Dec。 您可以使用http://php.net/manual/en/function.hexdec.php

答案 1 :(得分:0)

我注意到你使用的lib接受了int,你从$ _GET得到的值是一个字符串,试试:

if (isset($_GET['fg'])&&!empty($_GET['fg'])) {
    $fore_color = settype($_GET['fg'], "integer"); 
} else {
    $fore_color = 0x000000;
}

if (isset($_GET['bg'])&&!empty($_GET['bg'])) {
    $back_color = settype($_GET['bg'], "integer");
} else {
    $back_color = 0xFFFFFF;
}