Вы можете просто использовать нормальный 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
, злоумышленник может использовать его для чтения любого файла, который читается пользователю веб-сервера.
Вот альтернатива, которая ограничивает количество файлов, которые могут быть динамически загружены только в файлы, которые необходимо загрузить таким образом.
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
Как будет вызван 'childOneScript.php'? По включению файла или ожидает ли его запрос в браузере? –
'require 'childOneScript.php''. – meagar