PHP包含/ require而不传递变量

时间:2011-12-12 18:23:03

标签: php ajax authentication joomla include

是否可以在PHP 中包含一些内容而不传递传递给原始脚本的变量?

我正在使用Joomla,我收到错误记录here(“非法变量......”)。 php脚本是一个AJAX脚本,它将数据发送回浏览器,因此这个脚本需要大量的POST变量,进行数据库查询,然后回显结果。我试图收紧安全性,所以我在这个脚本中添加了一个include来使用构建的Joomla模块对用户进行身份验证。我从here获得了用户身份验证脚本的想法   验证脚本适用于某些页面,但与其他页面一起,我得到上面提到的错误。所以我希望包含身份验证脚本而不向其传递任何变量。这可能吗?

编辑:这里有一些细节。

在ajax脚本中我有这个:

<?php
    include '/var/www/joomla-auth.php';
...
下面是

脚本,基本上“joomla-auth.php”包含的脚本负责获取mysql查询的用户名和密码。 joomla-auth的内容:

<?php

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.");

$user =& JFactory::getUser();

我很确定是定义或要求行引发错误:

  

非法变量_files或_env或_get或_post或   _cookie或_server或_session或globals传递给脚本。

如上面第一个链接所述。

编辑2:

'joomla-auth.php'脚本生成$ username和$ password变量,然后在AJAX脚本中使用。我在AJAX脚本的顶部尝试了这个:

function get_creds(){
    include '/var/www/joomla-auth.php';
    return Array($username,$password);
}

$creds = get_creds();
$username = $creds[0];
$password = $creds[1];
....

但仍然将$ _POST变量传递给/var/www/joomla-auth.php: - (

3 个答案:

答案 0 :(得分:2)

如果您将错误中提到的其中一个变量传递给url(或通过mod_rewrite),Joomla会抛出此错误:

_files或_env或_get或_post或_cookie或_server或_session

此外,如果您传递一个完整的数字变量,我认为会抛出相同的错误,例如:

http://yoursite.com/?123456=abc

请确保您没有在网址中传递任何这些变量。如果找不到问题,请尝试在抛出错误之前检查请求中的内容。

我希望它有所帮助!

答案 1 :(得分:1)

将include包装在另一个函数中以创建(几乎)空范围 function foo($path){ include($path); }

编辑:如果确实需要传递一些变量,可以在第二个参数中将它们作为数组传递,并在函数中提取()它:

function foo($path, array $vars=array()) { extract($vars); include($path); }

这类似于Kohana的视图引擎中出于类似目的(在View :: capture()中)。您可能想看看他们是如何实现它以及它们是如何使用它的。

答案 2 :(得分:0)

Namespaces可能有助于以不那么黑客的方式解决您的问题。