0

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

一切都按预期工作,但我真的很困惑为什么如果会话为空,为什么 $_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);
?>
4

1 回答 1

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

于 2013-01-02T14:26:32.920 回答