我在php文件中声明了一个变量数组,并在包含该文件后更改了它的数组值。然后,在更改之后我想要数组变量将具有更新的值,因此如果我从第三个文件访问它,我将获得新的数组值。我该怎么做? 我从在线测验页面需要它。每当用户从数据库加载页面时,我都会收到随机问题。提交后,为了显示结果,我需要在submit.php页面中提取问题的ID号(提交后重定向的页面)。我已将问题ID存储在问题页面的数组中,我希望可以从submit.php页面访问该数组。
答案 0 :(得分:0)
这取决于您对阵列的行为。
如果它是一个特定于浏览您的Web应用程序的实例的数组,每个人都有自己的变量可以随意使用,那么您可能希望使用会话设置它,并且{ {1}}全局变量。 也许是这样的:
$_SESSION
但是,如果访问应用程序的任何人都可以全局访问数组中的数据,那么您可能希望使用数据库或APC来存储数组。简单地使用平面文件的危险在于,一个用户可能导致写入操作而另一个用户导致读取操作,这可能导致不可预测的结果。像MySQL这样的数据库和像APC这样的缓存扩展主要以先到先得的方式运行,并且不会遇到这个问题。
如果您的数据很重要,请使用数据库,因为数据将在服务器重启后继续存在:
//file1.php
<?php
session_name("applicationName"); //give your session a unique and static name, so that other apps on your server don't interfere
session_start(); //must always start the session before working with session variables
$_SESSION['data'] = array(1, 3, 6, 9); //set your array into the session global
include("file2.php");
?>
//file2.php
<?php
$_SESSION['data'][0]++; //for demonstration purposes, increment the first key of the array
?>
//file3.php
<?php
session_name("applicationName"); //same session name
session_start();
print_r($_SESSION['data']); //shows the contents of your array,
//which will now contain 2, 3, 6, 9
?>
//store the variable to a row in the database
$query = $dbconn->query("INSERT INTO tblVariables(variableName, variableValue)
VALUES ('someVariable', '".$dbconn->real_escape_string(serialize($yourArray))."';");
//retrieve the variable from that row
$query = $dbconn->query("SELECT variableValue FROM tblVariables WHERE variableName = 'someVariable';");
if($query) {
while($row = $query->fetch_assoc())
$yourArray = deserialize($row['variableValue']);
}
/ serialize()
是将数组或对象合并为单个可存储字符串的便捷方式。确保存储的数据库列的大小为deserialize()
,或VARCHAR
。
如果您的数据属于临时性质,APC可以执行此操作,只要它在您的服务器上可用:
TEXT
APC不要求您使用//store the array in APC
apc_store('variableName', $yourArray);
//retrieve the array from APC
$yourArray = apc_fetch('variableName');
。
您必须弄清楚应用程序中数据库或APC的位置,但会话示例应足以让您根据自己的问题了解如何组织代码。