基于变量名称调用脚本

时间:2015-02-04 15:38:57

标签: php

我有一个父函数,它传递一个名为$scriptName的变量。根据{{​​1}}中存储的内容,我想调用相应的脚本。

我有一个名为childOneScript.php的文件

如果$scriptName,我该如何致电$scriptName=="childOne"

4 个答案:

答案 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)。

读取: require_once() | PHP

答案 2 :(得分:1)

只需在If条件中使用include语句即可。

if $scriptName == "childOne" {
     include childOneScript.php;
   }

答案 3 :(得分:1)

您可以使用PHP

中的includerequire方法
<?php
function loadScript($scriptName) {
  if ($scriptName=="childOne") {
    include("childOneScript.php");
  }
}
?>

请记住,包含的脚本包含在您加载的位置。所以它在loadScript函数中。这意味着您无法访问其范围之外的内容。