php重定向脚本无法正常工作

时间:2014-08-30 12:57:55

标签: php mysql pdo

require "assets/php/config.php";
error_reporting(E_ALL);

$location = null;

if(isset($_GET['l']))
{

$location = retrieveAddress($_GET['l']);
}
if($location != null){

    header('Location: ' . $location);
}
else{
    header('HTTP/1.0 404 Not Found');
    echo 'Unknown link.';
}



public static function retrieveAddress($name)
    {
        $con = new PDO(Config::$host,
                  Config::$user,
                  Config::$password);
        if (!$con) {
    die('Could not connect: ' . mysql_error());
        }

        $sql = $con->prepare('SELECT address FROM links WHERE name = ?');
        $sql->execute($name);
        $location = $sql->fetchAll(PDO::FETCH_ASSOC);

        $con = null;

        return $location;

    }

这个脚本应该允许我进入我的数据库,在那里我保存链接,然后重定向到那个位置,在使用简单的url缩短器时制作它,我可以轻松添加链接,以便数据库配置工作,但是当我尝试在这里检索没有出现。我也试过使用error_reporting(E_ALL);但我什么都没得到。任何人都有任何想法,看到有什么不对,我没看错?(我确定有什么不对,但我无法注意到

*编辑:我通过链接到达文件,没有使用ajax。我删除了所有的文本回声,我不知道如何检查$ location的值,看看我是否在不使用echo的情况下得到了正确的值,我还编辑了mysql只抓取地址,我也是得到这个名字,这是另一个错误,但我似乎还有一个地方。

1 个答案:

答案 0 :(得分:3)

忘记我的评论,我刚刚看到你发送输出:

echo "before all";

发送标题之前。 这是一个很大的禁忌。您永远不会在重定向之前发送输出,并且通常在输出后不会发送标头。这也包括whitespace

此外,$location所有脚本都保留NULL,因为您正在从retrieveAddress更改它,但由于您的变量是全局变量,因此您需要声明它在函数内部global $location或将其作为$GLOBALS["location"]

访问

如果你刚从函数返回$ location,会更容易。

<强>更新

显然,错误是在类

之外使用public static
public static function retrieveAddress($name)
    {

结果是某种方式服务器混淆了而没有返回任何错误或输出。我们得到的唯一线索(我和OP)是通过萤火虫Reload the page to get source for..发出的神秘信息。可以找到有关此消息的更多信息 here

因此,如果有人从他的服务器获得有趣的回复,没有错误,请更好地检查上述情况。