我读过很多与我要问的问题非常类似的帖子,但我只是想确保没有更复杂的方法来做到这一点。非常感谢任何反馈。
我想创建一种机制来检查登录用户是否可以访问当前正在调用的php脚本。如果是这样,脚本将继续;如果没有,脚本就会失败,使用像die('you have no access')
这样的东西。
我想出了两种方法来实现这个目标:
(请假设我的会话内容已编码/工作正常 - 即我调用session_start(),正确设置会话变量等)
首先定义一个全局变量,然后检查所需头文件中的全局变量。例如:
current_executing_script.php的内容:
// the role the logged in user must have to continue on
$roleNeedToAccessThisFile = 'r';
require 'checkRole.php''
checkRole.php的内容:
if ($_SESSION['user_role'] != $roleNeedToAccessThisFile) die('no access for you');
在头文件中定义一个函数,并在包含/要求后立即调用该函数:
checkRole.php的内容:
function checkRole($roleTheUserNeedsToAccessTheFile) {
return ($_SESSION['user_role'] == $roleTheUserNeedsToAccessTheFile);
}
current_executing_script.php的内容:
require 'checkRole.php';
checkRole('r') or die('no access for you');
我想知道是否有办法基本上只将参数传递给checkRole.php作为include或require构造的一部分?
提前致谢。
答案 0 :(得分:34)
没有办法将参数传递给include或require。
但是,包含的代码在包含它的位置加入程序流,因此它将继承范围内的任何变量。因此,例如,如果您在include之前立即设置$ myflag = true,那么您包含的代码将能够检查$ myflag的设置。
那就是说,我不建议使用那种技术。包含文件包含函数(或类)而不是直接运行的代码要好得多。如果你已经包含了一个包含函数的文件,那么你可以在程序的任何一点用你想要的任何参数调用你的函数。它更灵活,通常是更好的编程技术。
希望有所帮助。
答案 1 :(得分:2)
这是我在最近的Wordpress项目中使用的东西
创建一个函数functions.php
:
function get_template_partial($name, $parameters) {
// Path to templates
$_dir = get_template_directory() . '/partials/';
// Unless you like writing file extensions
include( $_dir . $name . '.php' );
}
获取cards-block.php
中的参数:
// $parameters is within the function scope
$args = array(
'post_type' => $parameters['query'],
'posts_per_page' => 4
);
调用模板index.php
:
get_template_partial('cards-block', array(
'query' => 'tf_events'
));
例如,显示的帖子总数:
将functions.php
更改为:
function get_template_partial($name, $parameters) {
// Path to templates
$_dir = get_template_directory() . '/partials/';
// Unless you like writing file extensions
include( $_dir . $name . '.php' );
return $callback;
}
将cards-block.php
更改为:
// $parameters is within the function scope
$args = array(
'post_type' => $parameters['query'],
'posts_per_page' => 4
);
$callback = array(
'count' => 3 // Example
);
将index.php
更改为:
$cardsBlock = get_template_partial('cards-block', array(
'query' => 'tf_events'
));
echo 'Count: ' . $cardsBlock['count'];
答案 2 :(得分:0)
过去,很多人不同意这种做法。但我认为这是一个意见问题。
您无法通过require()或include()传递_GET或_POST参数,但您可以先设置_SESSION键/值并将其拉到另一侧。
答案 3 :(得分:0)
您可以让所需的文件返回一个匿名函数,然后在之后立即调用它。
//required.php
$test = function($param)
{
//do stuff
}
return $test
//main.php
$testing = require 'required.php';
$testing($arg);