为什么有些PHP脚本里没有?>作为结束符呢?
这个问题太经典了,简单说来,这是为了避免包含php文件时带来额外字符导致的错误,PHP规定如下:
1. 所有PHP文件必须使用Unix LF (linefeed)作为行的结束符。
2. 所有PHP文件必须以一个空白行作为结束。
3. 纯PHP代码文件必须省略最后的?>结束标签。
为啥这样规定咧,举个例子:
a.php:
<?php
// some code 注意最末尾 ?> 之后有空白字符
?>
b.php:
<?php
require "a.php";
header('xxxx');
?>
a.php末尾的空白字符也会被输出,然后就报错了,然而不带?>
就不会出现这个问题。
__DIR__ :当前内容写在哪个文件就显示这个文件目录
__FILE__ : 当前内容写在哪个文件就显示这个文件目录+文件名
define() 函数定义一个常量。
常量类似变量,不同之处在于:
- 在设定以后,常量的值无法更改
- 常量名不需要开头的美元符号($)
- 作用域不影响对常量的访问
- 常量值只能是字符串和数字
语法
define(name,value,case_insensitive)
参数 | 描述 |
---|---|
name | 必需。规定常量的名称。 |
value | 必需。规定常量的值。PHP7 支持数组,实例如下: <?php // PHP7+ 支持 define('ANIMALS', [ 'dog', 'cat', 'bird' ]); echo ANIMALS[1]; // 输出 "cat" ?> |
case_insensitive | 可选。规定常量的名称是否对大小写敏感。可能值:
|
技术细节
返回值: | 如果成功则返回 TRUE,如果失败则返回 FALSE。 |
---|
实例
定义一个大小写不敏感的常量:
<?php
define("GREETING","Hello you! How are you today?",TRUE);
echo constant("greeting");
?>
HTTP报头主要是用来相互传递信息的。
include (或 require)语句会获取指定文件中存在的所有文本/代码/标记,并复制到使用 include 语句的文件中。
包含文件很有用,如果您需要在网站的多张页面上引用相同的 PHP、HTML 或文本的话。
PHP include 和 require 语句
通过 include 或 require 语句,可以将 PHP 文件的内容插入另一个 PHP 文件(在服务器执行它之前)。
include 和 require 语句是相同的,除了错误处理方面:
- require 会生成致命错误(E_COMPILE_ERROR)并停止脚本
- include 只生成警告(E_WARNING),并且脚本会继续
::的用法
双冒号操作符即作用域限定操作符Scope Resolution Operator可以访问静态、const和类中重写的属性与方法。
好了,学完了,下面进入system.php里面,看看里面有什么?
at符号(@)在PHP中用作错误控制操作符。当表达式附加@符号时,将忽略该表达式可能生成的错误消息。如果启用了track_errors功能,则表达式生成的错误消息将保存在变量$ php_errormsg中。每个错误都会覆盖此变量。
注意:使用@是非常糟糕的编程习惯,因为它不会使错误消失,它只是隐藏它们,并且它使调试变得更糟,因为我们无法看到我们的代码实际上有什么问题。
php中的ini_set函数是php自带的用来修改设置php.ini配置文件的函数,用这个函数很方便,不用去手动修改php.ini文件,有时候我们也没有权限去修改php.ini文件,这时就用这个函数。
语法:ini_set("选项","值");该函数用时最好放到php的脚本最头部
比如:ini_set("max_execution_time", "180");//设置php的脚本超时时间为180秒
具体php选项可参考phpinfo文件的 Configuration PHP Core 部分
ini_get正好和ini_set相反,用来取php.ini文件里的环境变量的值.
语法:string ini_get (string varname );返回选项的值,如果选项的值为布尔型则返回为0或1
比如:echo ini_get('max_execution_time');//输出 30
如果想获取整个php.ini里的变量值,我们可以用ini_get的加强函数 ini_get_all()它以数组的形式返回整个php的环境变量。
isset查看一个变量是否已经被设置并且不为空(Determine if a variable is set and is not NULL)
empty查看一个变量是否为空 ""、0、"0"、NULL、FALSE、array()、$var($var是一个没有赋值的变量)
另外需要注意的是从PHP5.5开始,empty()只能支持变量,其他任何东西传递进来都将会导致介解析错误。
$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。
- $_SERVER['HTTP_HOST'] 请求头信息中的Host内容,获取当前域名。
- $_SERVER["SERVER_NAME"] 输出配置文件httpd.conf中的ServerName,一般情况下与HTTP_HOST值相同,但如果服务器端口不是默认的80端口,或者协议规范不是HTTP/1.1时,HTTP_HOST会包含这些信息,而SERVER_NAME不一定包含。(主要看配置文件的设置)。
- $_SERVER["HTTP_USER_AGENT"] 获取用户相关信息,包括用户浏览器、操作系统等信息。
- $_SERVER['HTTP_ACCEPT'] 当前请求的ACCEPT头部信息。
- $_SERVER["HTTP_ACCEPT_LANGUAGE"] 这个值是由浏览器发送,表明用户默认的语言设置,后面的q值表示用户对该语言的喜好程度。
- $_SERVER["HTTP_ACCEPT_ENCODING"] 大部分的现代浏览器都支持gzip压缩,并会把这一信息报告给服务器。这时服务器就会压缩过的HTML发送给浏览器。这可以减少近80%的文件大小,以节省下载时间和带宽。
- $_SERVER["HTTP_COOKIE"] 浏览器的cookie信息。
- $_SERVER["HTTP_CONNECTION"] 当前请求的连接情况。
- $_SERVER["HTTP_UPGRADE_INSECURE_REQUESTS"] 表示浏览器可读懂服务器发过来的请求,
- $_SERVER["HTTP_CACHE_CONTROL"] 表示浏览器是否会缓存这个页面信息。
- $_SERVER["PATH"] 当前脚本所在文件系统。
- 等等
strpos() f函数查找字符串在另一字符串中第一次出现的位置(区分大小写)。
注释:strpos() 函数是区分大小写的。
注释:该函数是二进制安全的。
相关函数:
- strrpos() - 查找字符串在另一字符串中最后一次出现的位置(区分大小写)
- stripos() - 查找字符串在另一字符串中第一次出现的位置(不区分大小写)
- strripos() -查找字符串在另一字符串中最后一次出现的位置(不区分大小写)
php ob_start 与 ob_end_flush() 是 php 的缓冲输出函数。
ob_start([string output_callback])- 打开输出缓冲区,所有的输出信息不在直接发送到浏览器,而是保存在输出缓冲区里面,可选得回调函数用于处理输出结果信息。
ob_end_flush - 结束(发送)输出缓冲区的内容,关闭输出缓冲区。
php 输出东西,会保存在一个 php 维护的内存里,称为 buffer 也行,缓存也行,都是一个意思。然后当这个 buffer 满了,php 会自动往 web server 发送这些数据。
也就是说每次 echo,并不一定会输出东西,而是保存在 buffer 里。
ob_start() 的意思,可以理解为(但是实际上和我下面的说法有区别),这个 buffer 由
ob_ 系列函数来来控制,也就是,PHP 不会维护自己的 buffer,不会自动把buffer 的内容自动发送到 web server,直到你
ob_end() 或者类似的 ob 操作。
ob_函数一般用来捕获当前的输出,跟效率是没什么关系的。至于为什么捕获输出,原因很多,例如我捕捉输出,缓存到一个文件里,下次请求就可以直接读这个 cache 文件的内容作为输出了。
ob_gzhandler()目的是用在ob_start()中作回调函数,以方便将gz 编码的数据发送到支持压缩页面的浏览器.
在php.ini中修改output_handler指令为:
output_handler = "ob_gzhandler"
那么在数据返回给浏览器之前都会经过压缩,所有支持HTTP/1.1 的主流浏览器都支持。
require_once语句和require语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含。
这时候进入init.php,看看里面有什么,注意system是包括在index中的,所以现在都是在index.php中执行的操作
HHVM (HipHop Virtual Machine)会将PHP代码转换成高级别的字节码(通常称为中间语言)。然后在运行时通过即时(JIT)编译器将这些字节码转换为x64的机器码。在这些方面,HHVM十分类似于C#的CLR和Java的JVM,一个 加快运行速度的编译器类型的。
die() 函数输出一条消息,并退出当前脚本。
该函数是 exit() 函数的别名。
microtime() 函数返回当前 Unix 时间戳的微秒数。
time() 函数返回自 Unix 纪元(January 1 1970 00:00:00 GMT)起的当前时间的秒数。
function_exists()
PHP function_exists() 函数用于检测函数是否被定义,检测的函数可以是 PHP 的内置函数,也可以是用户的自定义函数。如果被检测的函数存在则返回 TRUE ,否则返回 FALSE 。
PHP内置函数memory_get_usage()能返回当前分配给PHP脚本的内存量,单位是字节(byte)。在WEB实际开发中,这些函数非常有用,我们可以使用它来调试PHP代码性能。
memory_get_usage()函数返回内存使用量,memory_get_peak_usage()函数返回内存使用峰值,getrusage()返回CUP使用情况。但有一点请注意,在这些函数需要在Linux上运行。
定义和用法
rtrim() 函数移除字符串右侧的空白字符或其他预定义字符。
相关函数:
进入enterprise.php里面看看有什么。。。
可惜没有这段脚本。
get_magic_quotes_gpc函数介绍
取得 PHP 环境变数 magic_quotes_gpc 的值,属于 PHP 系统功能。
语法: long get_magic_quotes_gpc(void);
返回值: 长整数
get_magic_quotes_gpc函数是一个用来判断是否为用户提供的数据增加斜线了,这个在php.ini配置文件中哦
当 magic_quotes_gpc 打开时,所有的 ‘ (单引号), ” (双引号), (反斜线) and 空字符会自动转为含有反斜线的溢出字符。
magic_quotes_gpc设置是否自动为GPC(get,post,cookie)传来的数据中的'”加上反斜线。可以用get_magic_quotes_gpc()检测系统设置。
定义和用法
array_walk_recursive() 函数对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数。该函数与 array_walk() 函数的不同在于可以操作更深的数组(一个数组中包含另一个数组)。
看看version.php里面的东西,今天把init里面的看完吧?
version没有,都没有。
SEO(Search Engine Optimization):汉译为搜索引擎优化。
date_default_timezone_set() 函数设置脚本中所有日期/时间函数使用的默认时区。
CMS是Content Management System的缩写,意为"内容管理系统"。
好,接下来看