这些PHP选项和信息函数能让我们获得许多关于PHP本身的参数。比如:运行时的配置,被加载的扩展,版本等。

  • assert/assert_options

    assert在php7中是语言结构,不再是函数。

assert() 会检查指定的 assertion 并在结果为 FALSE 时采取适当的行动。

```php
assert_options(ASSERT_ACTIVE,1);
assert_options(ASSERT_BAIL,0);
assert_options(ASSERT_CALLBACK,"assert_fail");

function assert_fail($file, $line, $code){
    echo "<hr>Assertion Failed:
    File '$file'<br />
    Line '$line'<br />
    Code '$code'<br /><hr />";
}

assert(1==2);

echo "end.";
```

正常输出:
```
Assertion Failed: File '/var/www/html/php-shiyanchang/FunctionsReference/assert.php'
Line '26'
Code ''

Warning: assert(): assert(1 == 2) failed in /var/www/html/php-shiyanchang/FunctionsReference/assert.php on line 26
end.
```

很多人参考官方文档去测试例子,发现assert根本不工作,找遍国内网站,基本找不到解决方案。比如上面的例子复制过去执行,发现只返回:end.,没有其他信息可以参考:


[Assert not working in php. So simple. What am I doing wrong? - Stack Overflow](https://stackoverflow.com/questions/40129963/assert-not-working-in-php-so-simple-what-am-i-doing-wrong)

问题在于php.ini配置,zend.assertions = 1时,php才会编译assertions:
```
[Assertion]
; Switch whether to compile assertions at all (to have no overhead at run-time)
; -1: Do not compile at all
;  0: Jump over assertion at run-time
;  1: Execute assertions
; Changing from or to a negative value is only possible in php.ini! (For turning assertions on and off at run-time, see assert.active, when zend.assertions = 1)
; Default Value: 1
; Development Value: 1
; Production Value: -1
; http://php.net/zend.assertions
;zend.assertions = -1
zend.assertions = 1 

```
  • extension_loaded — 检查一个扩展是否已经加载

  • get_current_user — 获取当前 PHP 脚本所有者名称

  • get_defined_constants — 返回所有常量的关联数组,键是常量名,值是常量值

  • get_extension_funcs — 返回模块函数名称的数组

  • getenv — 获取一个环境变量的值

    $ip = getenv('REMOTE_ADDR');
    
    // 或简单仅使用全局变量($_SERVER 或 $_ENV)
    $ip = $_SERVER['REMOTE_ADDR'];
    
  • getlastmod — 获取页面(即当前脚本文件)最后修改的时间

  • ini_get_all — 获取所有配置选项

  • ini_get — 获取一个配置选项的值

  • ini_set — 为一个配置选项设置值

  • ini_restore — 恢复配置选项的值

  • memory_get_usage — 返回分配给 PHP 的内存量

  • memory_get_peak_usage — 返回分配给 PHP 内存的峰值

  • php_ini_loaded_file — 取得已加载的 php.ini 文件的路径

  • php_ini_scanned_files — 返回从额外 ini 目录里解析的 .ini 文件列表

  • php_sapi_name — 返回 web 服务器和 PHP 之间的接口类型。比如:CGI PHP

  • php_uname — 返回运行 PHP 的系统的有关信息

  • phpinfo — 输出关于 PHP 配置的信息

  • phpversion — 获取当前的PHP版本

  • set_time_limit — 设置脚本最大执行时间

    设置允许脚本运行的时间,单位为秒。如果超过了此设置,脚本返回一个致命的错误。默认值为30秒,或者是在php.ini的max_execution_time被定义的值。

    当此函数被调用时,set_time_limit()会从0开始重新启动超时计数器。换句话说,如果超时默认是30秒,在脚本运行了了25秒时调用 set_time_limit(20),那么,脚本在超时之前可运行总时间为45秒。

    注意:只影响脚本本身执行的时间。只影响脚本本身执行的时间。任何发生在诸如使用system()的系统调用,流操作,数据库操作等的脚本执行的最大时间不包括其中,当该脚本已运行。

  • sys_get_temp_dir — 返回用于临时文件的目录

    // 使用 sys_get_temp_dir() 在目录里创建临时文件
    $temp_file = tempnam(sys_get_temp_dir(), 'Tux');
    //结果创建文件:/tmp/TsinghYEccT
    
  • version_compare — 对比两个「PHP 规范化」的版本数字字符串

    其实这个函数也可以用来对比规范化的产品版本数字字符串,比如:团队管理08-研发约定与规范 - 产品号管理 - 9ong

    注意:是数字,数字字符串,但甚至支持带有字符的字符串,主要要有数字版本号。

    if (version_compare('v7.1.1.beta', 'v7.2.0') >= 0) {
        print_r("我们使用的版本大于7.2.0\n");
    }else{
        print_r("我们使用的版本小于7.2.0\n");    
    }
    

    很多公司内部的框架对于这种满足数字字符串版本号的判断,都是自己封装函数来处理,还经常处理不好,入门php的开发人员还是应该通读一次php手册,至少一次。