我已经构建了非常简单的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);
?>
答案 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