我有一个这样的PHP脚本:
<?php
include 'authorization_script.php';
foreach ($_POST as $key => $value){
//do something here
}
?>
问题是如果 "authorization_script.php"传递了一个只有数字名称的$_POST变量,脚本将崩溃。而不是修复这个问题,我只是希望确保没有$_POST变量被传递到包含脚本。
这个"authorization_script"不需要任何外部变量,但是由于$_POST变量在默认情况下是全局的,所以它们被传递给这个脚本。在我之前的一个问题中,有人建议我可以用PHP中的名称空间来解决这个问题。
我可以改变$_POST变量的命名空间,使它们不传递给包含脚本吗?如果有,有人能告诉我怎么做吗?还是有更好的办法?
Thx
编辑:而不是通过重命名$_POST变量来破解我的方法,就像你们中的一些人建议的那样,我应该解决真正的问题。这是Joomla网站内的一个AJAX脚本。当我调用这个ajax脚本时,我仍然希望对用户进行身份验证,然后从本地数据库对凭证进行分级。我发现从AJAX脚本对用户进行身份验证的方法如下:define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__));
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
/* Create the Application */
$mainframe =& JFactory::getApplication('site');
/* Make sure we are logged in at all. */
if (JFactory::getUser()->id == 0)
die("Access denied: login required.");
我认为错误是从joomla框架脚本内部抛出的(该脚本的第528行)。
有什么更好的方法来验证经验丰富的Joomla用户吗?
或者如果你不想修复你的include脚本,你可以做这个可怕的hack:
<?php
// watch this ugly hack
$post_hack = $_POST;
unset($_POST);
include 'authorization_script.php';
$_POST = $post_hack;
foreach ($_POST as $key => $value){
//do something here
}
?>
我是否可以更改$_POST变量的命名空间,使它们没有传递给包含脚本?
。全局变量是全局的,与命名空间无关。
还是有更好的方法?
修复include脚本。你应该努力使你的代码能够适应错误的输入——,特别是执行授权的代码。
对,这很难看,但应该修复它:
<?php
$aPost = $_POST;
unset($_POST);
include 'authorization_script.php';
foreach ($aPost as $key => $value){
//do something here
}
?>