【问题标题】:CodeIgniter BASEPATHCodeIgniter 基本路径
【发布时间】:2014-11-18 08:57:01
【问题描述】:

您好,我是 Codeigniter 的新手。根据我对BASEPATH 的理解,它是用来激活Codeigniter 框架的。代码

defined('BASEPATH') OR exit('No direct script access allowed');

用于页面顶部以防止直接访问控制器。但它在我的代码中不起作用。当我尝试通过控制器直接访问视图时,视图会被加载。我检查了index.phpBASEPATH 是在那里定义的。请指教。

【问题讨论】:

  • 你能告诉我们不工作的 PHP 代码吗?
  • When I try to directly access a view via controller,你是怎么直接访问控制器的?
  • 你能显示控制器代码吗?

标签: php codeigniter


【解决方案1】:

defined('BASEPATH') OR exit('No direct script access allowed'); 用于确保请求已通过根目录中的index.php。这是为了确保所有 Codeigniter 基类都被加载并确保某些变量已设置等。

所以,是的,如果您通过控制器,您将能够访问视图文件。

希望这会有所帮助!

【讨论】:

  • 所以它不用于安全目的。如果我在没有登录的情况下将视图的 url 放在浏览器中,则会显示该视图。
  • 当您说视图的 url 时,您的意思是:localhost/application/views/view_file.php?如果是这样,那么您不应该因为应用程序文件夹中的 .htaccess 文件而无法使用。
  • 在浏览器中显示“不允许直接脚本访问”文本的可能性是什么?
  • @151291 上面应该做到这一点。
  • @RossWilson - 我试图打印但得到forbiddenserver not found this file 这样。不是来自 exit() 的消息。
【解决方案2】:
defined('BASEPATH') OR exit('No direct script access allowed');
  • defined:检查给定的命名常量是否存在
  • BASEPATH:这是来自 codeigniter reserved names 的常量
  • OR exit 打印字符串:'No direct script access allowed'
  • exit — 输出一条消息并终止当前脚本。

其他参考:PHP 5 Constants

【讨论】:

    【解决方案3】:

    defined('BASEPATH') OR exit('No direct script access allowed'); 执行以下操作:

    1. defined('BASEPATH') => 检查是否定义了名为 BASEPATH 的 CodeIgniter 常量。如果它被定义,它会返回TRUE 并且不会再发生任何事情。如果未定义,则返回FALSE,从而使用'No direct script allowed'信息执行前面的代码exit('...');

    当您说它不适用于您的代码时。你指的是哪个代码?你能分享一下上面的代码吗?视图文件通常由控制器加载。

    【讨论】:

      【解决方案4】:

      实际上,codeigniter 不允许其任何文件直接访问所有请求都由 index.php 处理,该 index.php 位于 code igniter 的根文件夹中。 每当我们请求任何 codeigniter url index.php 处理它并定义一个常量。 defined('BASEPATH') OR exit('No direct script access allowed'); 检查是否定义了常量,如果没有,则 php 脚本退出并且不会进一步处理。

      如果您从控制器调用任何视图文件,那么它会工作并且不会退出您的脚本,因为当您点击任何控制器时,index.php 已经处理了您的请求。 如果您尝试访问直接查看文件,那么它将无法工作并且 php 脚本退出

      【讨论】:

        【解决方案5】:

        用户通过控制器访问框架 (http://example.com/index.php/controllername)。相应的控制器是 通过 URL 参数激活。 由于 PHP 假定框架中的类已经声明,因此 行确保框架正确启动并且服务器没有 运行单个 PHP 文件。不使用它可能是潜在的安全漏洞, 如果框架没有启动,控制器文件将自行运行 并失败。

        声明详情。

        1. defined('BASEPATH') OR exit('不允许直接脚本访问');函数defined()检查常量是否存在
        2. BASEPATH 是在 Codeigniter 保留名称中定义的常量,其中包含系统文件夹的路径。
        3. exit() 函数只是打印字符串并终止脚本执行。

        来源-->https://www.quora.com/profile/Gursharan-Singh-Dhanjal

        【讨论】:

          【解决方案6】:

          无论你做什么,如果没有进入 index.php,你就无法访问视图页面(除非你关闭 php 服务器或更改“.htaccess”文件)所以任何请求都会首先进入 index.php!这就是它被加载的原因

          【讨论】:

            【解决方案7】:

            在 Class start 之前使用此代码,例如:

            defined('BASEPATH') OR exit('No direct script access allowed');
            
            class Dataentry extends CI_Controller { }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2023-03-17
              • 2023-04-06
              • 1970-01-01
              • 1970-01-01
              • 2018-08-13
              • 1970-01-01
              • 2018-01-22
              • 1970-01-01
              相关资源
              最近更新 更多