我有一个父函数,它传递一个名为$scriptName
的变量。根据{{1}}中存储的内容,我想调用相应的脚本。
我有一个名为childOneScript.php的文件
如果$scriptName
,我该如何致电$scriptName=="childOne"
?
答案 0 :(得分:2)
您可以使用普通require
require_once $scriptName . 'Script.php';
请记住,如果脚本不存在,PHP将引发致命错误,因此您应该检查脚本是否确实存在。
/**
Assumes that $name does not contain the PHP extension and
this function works with relative paths.
If the file does not exist, returns false, true otherwise
*/
function loadScript($name) {
$name = $name . '.php';
if (!file_exists($name) || !is_readable($name)) {
// raise an error, throw an exception, return false, it's up to you
return false;
}
require_once $name;
return true;
}
$loaded = loadScript('childOneScript');
或者您可以使用include
,PHP只会在找不到脚本时发出警告。
上述功能存在一些安全问题。例如,如果允许用户定义$scriptName
的值,则攻击者可以使用它来读取Web服务器用户可读的任何文件。
这是一种替代方法,可以将可以动态加载的文件数限制为只需要以这种方式加载的文件。
class ScriptLoader {
private static $whiteList = array(
// these files must exist and be readable and should only include
// the files that need to be loaded dynamically by your application
'/path/to/script1.php' => 1,
'/path/to/script2.php' => 1,
);
private function __construct() {}
public static function load($name) {
$name = $name . '.php';
if (isset(self::$whiteList[$name])) {
require_once $name;
return true;
}
// the file is not allowed to be loaded dynamically
return false;
}
}
// You can call the static method like so.
ScriptLoader::load('/path/to/script1'); // returns true
ScriptLoader::load('/path/to/script2'); // returns true
ScriptLoader::load('/some/other/phpfile'); // returns false
答案 1 :(得分:2)
您可以这样做:
if ($scriptName=="childOne"){
require_once(childOneScript.php);
}
require_once语句将检查文件是否已被包含,如果已包含,则不再包括(require)。
答案 2 :(得分:1)
只需在If条件中使用include语句即可。
if $scriptName == "childOne" {
include childOneScript.php;
}
答案 3 :(得分:1)