在看源代码时,发现codeigniter框架的控制器中,总是加上这样一段话;

if(!defined('BASEPATH'))exit('No direct script access allowed');
1
刚接触codeigniter,一直没有领会它的作用,后来通过查资料发现其作用是:

为了防止跨站攻击,直接通过访问文件路径用的

另外要注意,这里定义的是:defined()而不是define(),如果你误将defined写成define,将会报一下错误:

A PHP Error was encountered
Severity: Warning
Message: define() expects at least 2 parameters, 1 given

<?php
2 //放止用户直接通过路径来访问控制器,如果这样的话会显示找不到
3 if ( ! defined('BASEPATH')) exit('No direct script access allowed');
4
5 class Hello extends CI_Controller {
6
7 public function sayhello($name,$name2){
8 echo $name,",Hello CI to ",$name2;
9 }
10 }

  

注意
1、defined() 函数仅对 constants 有效(上面的例子不是define(),写成define()的话会报错的)

经常看到这样的语句:

$file = fopen($filename, r) or die("抱歉,无法打开: $filename");

or 在这里是这样理解的,因为在PHP中并不区分数据类型,所以$file既可以是int也可以bool,所以这样的语句不会报错。

其实在大多数的语言中, bool or bool这样的语句中,如果前一个值为真后一个值就不会再判断了。这里也是的,所以如果fopen函数执行正确的话,会返回一个大于0的int值(这其实就

是“真”),后面的语句就不会执行了。如果fopen函数执行失败,就会返回false,那么就会判断后面的表达式是否为真了。

结果执行了die()之后,不管返回什么,程序都已经停止执行了,并且显示指定的出错信息,也就达到了调试的目的。

同理:

defined('THINK_PATH')   or define('THINK_PATH',     __DIR__.'/');

如果 THINK_PATH 这个常量已经被定义了,那么就不执行 or 后面的 define('THINK_PATH',     __DIR__.'/');

相反,如果没有定义 THINK_PATH  这个常量,那么就会执行后面的 define('THINK_PATH',     __DIR__.'/');  定义 THINK_PATH 常量

if ( ! defined('BASEPATH')) exit('No direct script access allowed')的作用的更多相关文章

  1. ci 框架中defined('BASEPATH') OR exit('No direct script access allowed');

    作用: OR 就是前面的是true时,就不走后面了. 加这个是为了防止不是从index.php访问到的控制器

  2. [中英对照]Introduction to Remote Direct Memory Access (RDMA) | RDMA概述

    前言: 什么是RDMA? 简单来说,RDMA就是指不通过操作系统(OS)内核以及TCP/IP协议栈在网络上传输数据,因此延迟(latency)非常低,CPU消耗非常少. 下面给出一篇简单介绍RDMA的 ...

  3. DMA(Direct Memory Access)简介

    什么是DMA(Direct Memory Access) DMA绕过CPU,在内存和外设之间开辟了一条 "隧道" ,直接控制内存与外设之间的操作,并完全由硬件控制. 这样数据传送不 ...

  4. DMA(direct memory access)直接内存访问

    DMA(Direct Memory Access),这里的 memory,指的是计算机的内存,自然与外存(storage)相对.这里的关键词在 Direct (直接),与传统的相对低效的,需要通过 C ...

  5. (转)DMA(Direct Memory Access)

    DMA(Direct Memory Access) DMA(Direct Memory Access)即直接存储器存取,是一种快速传送数据的机制. 工作原理 DMA是指外部设备不通过CPU而直接与系统 ...

  6. Remote Direct Memory Access (RDMA)

    RDMA有三类实现方式,包括RoCE,iWARP和InfiniBand.RDMA的基础是Virtual Interface Architechure (VIA). 参考文档: https://en.w ...

  7. 直接存储器存取(Direct Memory Access,DMA)详细讲解

    一.理论理解部分. 1.直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输. 2.无须CPU干预,数据可以通过DMA快速移动,这就节省了CPU的资源来做其他操作. ...

  8. DMA(Direct Memory Access直接存储器访问)总结

    转载于http://blog.csdn.net/peasant_lee/article/details/5594753 DMA一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,不需要CP ...

  9. String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";作用!!!!!

    <%String path = request.getContextPath();String basePath = request.getScheme()+"://"+re ...

随机推荐

  1. UML类图的几种关系总结

    本文摘自:UML类图关系总结 在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregati ...

  2. Java经典逻辑编程50题 (转)

    注: 转自https://blog.csdn.net/Alias_fa/article/details/52985112  (摘了题目部分和部分分析,想看原作代码的见原作链接) [程序1] 題目:古典 ...

  3. SetCurrentCellAddressCore 函数的可重入调用

    绑定数据在线程中 private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) { if (Di ...

  4. Python学习日记(八) 函数

    函数的结构: 函数的返回值: 1.当函数执行时运到return关键字将不再往下执行 def func(): print("hello world!") print("he ...

  5. Linux学习django-CentOS部署自己本地的django项目

    前言 自己本地写好的django项目,如何部署到linux服务器上,让其他的小伙伴也能访问呢?本篇以centos系统为例,把本地写好的django项目部署到linux服务器上环境准备: 环境准备:1. ...

  6. redis 设置密码并运行外部连接

    redis默认是不能远程访问的,如果希望多台机子共用redis数据库,那就需要开启redis远程连接访问.既然可以远程连接了,那就需要密码登陆,否则不安全.下面是具体的方法,按照步骤一步一步来就OK了 ...

  7. 二叉搜索树(python)

    # -*- coding: utf-8 -*- class BSTNode(object): def __init__(self, key, value, left=None, right=None) ...

  8. Python正则提取数据单引号内数据,并判断是否是空列表(是否提取到数据)

    #coding=utf- import re string1="asdfgh'355'dfsfas" string2="fafafasfasdfasdf" pa ...

  9. keras模块学习之model层【重点学习】

    本笔记由博客园-圆柱模板 博主整理笔记发布,转载需注明,谢谢合作! model层是keras模块最重要的一个层,所以单独做下笔记,这块比较难理解,本博主自己还在学习这块,还在迷糊中. model的方法 ...

  10. 图表可视化highcharts和百度的echarts

    前端数据可视化插件有很多,有 Highcharts(https://www.hcharts.cn/) Echarts(http://echarts.baidu.com/) D3(https://d3j ...