Form和FPDF - 使用$ _SESSION初始化变量 - >为什么$ _SESSION在它为空时被覆盖?

时间:2013-01-02 13:32:57

标签: php variables null initialization session-variables

我已经构建了非常简单的php表单,该表单发布到$ _SESSION,然后从$ _SESSION数据生成pdf。我正在使用fpdf生成pdf。在通过fpdf输出任何内容之前,我想检查上传的文件$ _SESSION是否为空(因为我想更改输出)

一切都按预期工作,但我真的很困惑,如果session为null,为什么$ _SESSION数据会被覆盖:

if(isset($_SESSION['attachments']) && !empty($_SESSION['attachments'])) {
    $attachments = $_SESSION['attachments'];
}
else {
    $attachments = "No attachments";
}

现在,$ _SESSION ['attachments']包含附件的序列化路径,但如果没有上传附件,则为null。为什么这个if子句初始化并覆盖SESSION如下:

var_dump($_SESSION['attachments']);

输出:

string 'No attachments' (length=14)

剥离fpdf脚本以演示我正在做的事情:

<?php
require('fpdf.php');

if(!isset($_SESSION)){
    session_start();
}

//Lot of other checking

if(isset($_SESSION['attachments']) && !empty($_SESSION['attachments'])) {
    $attachments = $_SESSION['attachments'];
}
else {
    $attachments = "No attachments";
}

//a lot of fpdf functions. AddMultiRow is my own function

$pdf = new PDF();
$pdf->AddPage();
$pdf->AddMultiRow(utf8_decode("Required attachments:"), $attachments, 1);
$pdf->Output(//output comes here);
?>

1 个答案:

答案 0 :(得分:1)

会话变量被register_globals功能注册为全局变量(指向$ _SESSION中的条目的引用)。

您需要在PHP.ini中禁用register_globals。

http://php.net/manual/en/ini.core.php#ini.register-globals
http://php.net/manual/en/security.globals.php