我正在编写一个应用程序,我希望允许一些用户在我的服务器上编写/运行/测试他们的代码,并从我的应用程序中预加载一些代码。我希望这些用户只能在他们的目录中工作,这个任务可以使用open_basedir();
完成,但问题是,如果我想要包含我的应用程序的代码,我会被权限拒绝如果require
或include
位于function
或class
内,那么在调用open_basedir
之前不会包含该文件。
示例:
<?php
function test()
{
require 'test.php';
}
test(); // ok
ini_set('open_basedir', 'users/username/');
test(); // permission denied
是否有可能允许&#34;信任&#34;要包含的应用程序的代码但不允许用户的代码访问其他目录?如果有可能,给我一个例子或主要想法,我将如何解决这个问题,即使这与open_basedir()无关
在我的例子中,我希望不会被拒绝。这样我就可以为我的应用程序添加一些很棒的功能。
另一个例子:
spl_autoload_register(function($class) {
require $class . '.php';
});
ini_set('open_basedir', 'folder/');
new Test(); // Warning: require(): open_basedir restriction in effect.
答案 0 :(得分:0)
好吧,如果没有其他解决方案,我会展示自己的解决方案。
我确信这不是最好的方法,但它按预期工作。
首先,我可以选择编写/运行自定义代码的所有用户都必须将其上传到我的服务器,或者将其写在网站上(然后保存),所以我必须检查代码只有在保存之前,才能模仿沙盒,并对我的应用程序进行抽象化。接下来我将在沙盒中运行该代码(具有修改的open_basedir限制)并且如果代码没有致命错误(并且它没有修改工作目录中的另一个文件[如果修改,那么这些文件也将被检查])那么它将是保存。之后,用户可以选择在实际应用程序中运行代码。
缺点:
优点: