编程日记:PHP实用函数记录

PHP sleep() 函数

  1. sleep(sec) 函数延迟执行当前脚本若干秒。
  2. usleep(micro) — 以指定的微秒数延迟执行。
  3. time_nanosleep(sec,na) — 延缓执行若干秒和纳秒。
  4. time_sleep_until(timestamp) — 使脚本睡眠到指定的时间为止。
  5. set_time_limit(int $seconds) — 设置允许脚本运行的时间,单位为秒。如果超过了此设置,脚本返回一个致命的错误。默认值为30秒,或者是在php.ini的max_execution_time被定义的值,如果此值存在。当此函数被调用时,set_time_limit()会从零开始重新启动超时计数器。换句话说,如果超时默认是30秒,在脚本运行了25秒时调用 set_time_limit(20),那么,脚本在超时之前可运行总时间为45秒。如果设置为0(零),没有时间方面的限制。

系列(二)

  1. ignore_user_abort() ,可以实现当客户端关闭后仍然可以执行PHP代码,可保持PHP进程一直在执行,可实现所谓的计划任务功能与持续进程,只需要开启执行脚本,除非 apache等服务器重启或有脚本有输出,该PHP脚本将一直处于执行的状态;
    <?php
    //如果设置为 TRUE,则忽略与用户的断开(脚本将继续运行)。默认情况下是设置为 FALSE,与客户机断开会导致脚本停止运行。
    ignore_user_abort();  //输出当前设置
    
  2. connection_aborted() - 检查客户端是否已经断开
  3. connection_status() - 返回连接的状态位
  4. 关于PHP连接处理的完整描述:https://www.php.net/manual/zh/features.connection-handling.php
资料来源
参考:https://www.php.net/manual/zh/book.misc.php(PHP杂项函数)

ob系列函数中常用函数集锦

  1. ob_start(); //打开一个输出缓冲区,所有的输出信息不再直接发送到浏览器,而是保存在输出缓冲区里面。
  2. ob_clean(); //删除内部缓冲区的内容,不关闭缓冲区(不输出)。
  3. ob_end_clean(); //删除内部缓冲区的内容,关闭缓冲区(不输出)。
  4. ob_get_clean(); //返回内部缓冲区的内容,关闭缓冲区。相当于执行 ob_get_contents() and ob_end_clean()
  5. ob_flush(); //发送内部缓冲区的内容到浏览器,删除缓冲区的内容,不关闭缓冲区。
  6. ob_end_flush(); //发送内部缓冲区的内容到浏览器,删除缓冲区的内容,关闭缓冲区。
  7. ob_get_flush(); //返回内部缓冲区的内容,并关闭缓冲区,再释放缓冲区的内容。相当于ob_end_flush()并返回缓冲区内容。
  8. flush(); //将ob_flush释放出来的内容,以及不在PHP缓冲区中的内容,全部输出至浏览器;刷新内部缓冲区的内容,并输出。
  9. ob_get_contents(); //返回缓冲区的内容,不输出。
  10. ob_get_length(); //返回内部缓冲区的长度,如果缓冲区未被激活,该函数返回FALSE。
  11. ob_get_level(); //Return the nesting level of the output buffering mechanism.
  12. ob_get_status(); //Get status of output buffers.
  13. ob_implicit_flush(); //打开或关闭绝对刷新,默认为关闭,打开后ob_implicit_flush(true),所谓绝对刷新,即当有输出语句(e.g: echo)被执行时,便把输出直接发送到浏览器,而不再需要调用flush()或等到脚本结束时才输出
  14. ob_gzhandler //ob_start回调函数,用gzip压缩缓冲区的内容。
  15. ob_list_handlers //List all output handlers in use
  16. output_add_rewrite_var //Add URL rewriter values
  17. output_reset_rewrite_vars //Reset URL rewriter values
心得
在调用Flush系列函数之前任何输出方式都将会被缓存到内存,只有调用了Flush函数之后才会发送给浏览器;

1. ob_start

ob_start(callable $output_callback = null, int $chunk_size = 0, int $flags = PHP_OUTPUT_HANDLER_STDFLAGS): bool

此函数将打开输出缓冲。当输出缓冲激活后,脚本将不会输出内容(除http标头外),相反需要输出的内容被存储在内部缓冲区中。

内部缓冲区的内容可以用 ob_get_contents() 函数复制到一个字符串变量中。 想要输出存储在内部缓冲区中的内容,可以使用 ob_end_flush() 函数。另外, 使用 ob_end_clean() 函数会静默丢弃掉缓冲区的内容。

  • $output_callback, 当输出缓冲区被( ob_flush(), ob_clean() 或者相似的函数)冲刷(送出)或者被清洗的时候;或者在请求结束之际输出缓冲区内容被冲刷到浏览器的时候该函数将会被调用。 当调用 output_callback 时,它将收到输出缓冲区的内容作为参数 并预期返回一个新的输出缓冲区作为结果,这个新返回的输出缓冲区内容将被送到浏览器。
提示
输出缓冲区是可堆叠的,这即意谓着,当有一个 ob_start() 是活跃的时, 你可以调用另一个 ob_start() 。 只要确保又正确调用了 ob_end_flush() 恰当的次数即可。 如果有多重输出回调函数是活跃的,输出内容会一直按嵌套的顺序依次通过它们而被过滤。

PHP parse_str() 函数

parse_str() 函数把查询字符串解析到变量中。
parse_str(string,array);
parse_str("name=Peter&age=43",$myArray);

注释:如果未设置 array 参数,由该函数设置的变量将覆盖已存在的同名变量。
注释:php.ini 文件中的 magic_quotes_gpc 设置影响该函数的输出。如果已启用,那么在 parse_str() 解析之前,变量会被 addslashes() 转换。

PHP date_parse() 函数

date_parse(date);

date_parse() 函数返回一个包含指定日的详细信息的关联数组。
date 必需。规定日期(格式由 strtotime() 接受)。

返回值: 如果成功则返回包含被解析日期信息的关联数组,如果失败则返回 FALSE。

date_parse_from_format(format,date); //指定格式转换时间字符串,返回关联数组
date_create_from_format(format,time,timezone); //指定格式转换,返回DateTime对象

PHP parse_ini_file() 函数

parse_ini_file() 函数解析一个配置文件(ini 文件),并以数组的形式返回其中的设置。
parse_ini_file(file,process_sections)

  • file 必需。规定要检查的 ini 文件。
  • process_sections 可选。如果设置为 TRUE,则返回一个多维数组,包括了配置文件中每一节的名称和设置。默认是 FALSE。
提示
该函数可以用来读取您自己的应用程序的配置文件,与 php.ini 文件没有关系。有些保留字不能作为 ini 文件中的键名,包括:null、yes、no、true 和 false。字符 {}|&~![()" 也不能用在键名的任何地方。

字符串函数

  • addcslashes() 返回在指定的字符前添加反斜杠的字符串。
  • addslashes() 返回在预定义的字符前添加反斜杠的字符串。
  • join() implode() 的别名。
  • html_entity_decode() 把 HTML 实体转换为字符。
  • htmlentities() 把字符转换为 HTML 实体。
  • htmlspecialchars_decode() 把一些预定义的 HTML 实体转换为字符。
  • htmlspecialchars() 把一些预定义的字符转换为 HTML 实体。
  • str_repeat() 计算字符串重复指定的次数。
  • substr_count($string,$sub),计算子串出现次数。
  • str_split(),按字符个数分割到数组。

PHP 过滤器

PHP 过滤器用于验证和过滤来自非安全来源的数据,比如用户的输入。
测试、验证和过滤用户输入或自定义数据是任何 Web 应用程序的重要组成部分。
PHP 的过滤器扩展的设计目的是使数据过滤更轻松快捷。
几乎所有的 Web 应用程序都依赖外部的输入。这些数据通常来自用户或其他应用程序(比如 web 服务)。通过使用过滤器,您能够确保应用程序获得正确的输入类型。
您应该始终对外部数据进行过滤!

输入过滤是最重要的应用程序安全课题之一。

1.什么是外部数据?

  • 来自表单的输入数据
  • Cookies
  • Web services data
  • 服务器变量
  • 数据库查询结果

详细:https://www.runoob.com/php/php-filter.html

PHP EOF(heredoc) 使用说明

PHP EOF(heredoc)是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字符串的方法。

使用概述:

  • 必须后接分号,否则编译通不过。
  • EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。
  • 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
  • 开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。
  • 当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,此处相当与q和qq的用法。

PHP iconv()

iconv()将字符串按要求的字符编码来转换
iconv(string$in_charset,string$out_charset,string$str):string
将字符串$str从$in_charset转换编码到$out_charset。

php版本比较函数version_compare()

语法:version_compare ( string $version1 , string $version2 [, string $operator ] )

PHP生成器

1.生成器语法

生成器函数看起来像普通函数——不同的是普通函数返回一个值,而生成器可以 yield 生成多个想要的值。 任何包含 yield 的函数都是一个生成器函数。

当一个生成器被调用的时候,它返回一个可以被遍历的对象.当你遍历这个对象的时候(例如通过一个foreach循环),PHP 将会在每次需要值的时候调用对象的遍历方法,并在产生一个值之后保存生成器的状态,这样它就可以在需要产生下一个值的时候恢复调用状态。

一旦不再需要产生更多的值,生成器可以简单退出,而调用生成器的代码还可以继续执行,就像一个数组已经被遍历完了。

2.yield关键字

生成器函数的核心是yield关键字。它最简单的调用形式看起来像一个return申明,不同之处在于普通return会返回值并终止函数的执行,而yield会返回一个值给循环调用此生成器的代码并且只是暂停执行生成器函数。

PHP parse_url()

parse_url(string $url, int $component = -1): mixed

本函数解析一个 URL 并返回一个关联数组,包含在 URL 中出现的各种组成部分。

本函数不是用来验证给定 URL 的合法性的,只是将其分解为下面列出的部分。不完整的 URL 也被接受,parse_url() 会尝试尽量正确地将其解析

如果省略了 component 参数,将返回一个关联数组 array,在目前至少会有一个元素在该数组中。如果指定了 component 参数, parse_url() 返回一个 string (或在指定为 PHP_URL_PORT 时返回一个 integer)而不是 array。如果 URL 中指定的组成部分不存在,将会返回 null。

PHP自动加载类

spl_autoload_register(callable $autoload_function = ?, bool $throw = true, bool $prepend = false): bool

spl_autoload_register — 注册给定的函数作为 __autoload 的实现 (PHP 5 >= 5.1.0, PHP 7, PHP 8)

__autoload — 尝试加载未定义的类,本函数已自 PHP 7.2.0 起被废弃,并自 PHP 8.0.0 起被移除。 强烈建议不要依赖本函数。由spl_autoload_register 代替

<?php
function my_autoloader($class) {      
        include 'classes/' . $class . '.class.php'; 
} 

spl_autoload_register('my_autoloader'); 

spl_autoload_register(
function ($class) { 
       include 'classes/' . $class . '.class.php'; 
}
);
// 或者,自 PHP 5.3.0 起可以使用一个匿名函数 

pack()、str_rot1()

str_rot13() 函数对字符串执行 ROT13 编码。

ROT13 编码把每一个字母在字母表中向前移动 13 个字母。数字和非字母字符保持不变。

pack()函数把数据装入一个字符串。

PHP流

PHP 带有很多内置 URL 风格的封装协议,可用于类似 fopen()、 copy()、 file_exists() 和 filesize() 的文件系统函数。 除了这些封装协议,还能通过 stream_wrapper_register() 来注册自定义的封装协议。

PHP临时文件

  • tmpfile(): resource|false,以读写(w+)模式创建一个具有唯一文件名的临时文件,然后返回该文件的句柄。
  • tempnam(string $dir, string $prefix): string,在指定目录中建立一个具有唯一文件名的文件。如果该目录不存在,tempnam() 会在系统临时目录中生成一个文件,并返回其文件名。
  • sys_get_temp_dir — 返回用于临时文件的目录

ini_set,动态设置配置文件

官方文档:https://www.php.net/manual/zh/function.ini-set.php

支持动态设置的配置:https://www.php.net/manual/zh/ini.list.php

extension_dir可设置为“./”代表当前的目录。

stream

1.stream_get_contents

function stream_get_contents ($handle, $maxlength = null, $offset = null) false|string

与 file_get_contents() 一样,但是 stream_get_contents() 是对一个已经打开的资源流进行操作,并将其内容写入一个字符串返回。 返回的内容取决于 maxlength 字节长度和 offset 指定的起始位置。

  • handle (resource),一个资源流(例如 fopen() 操作之后返回的结果)
  • maxlength (integer),需要读取的最大的字节数。默认是-1(读取全部的缓冲数据)。
  • offset (integer),在读取数据之前先查找指定的偏移量。如果这个数字是负数,就不进行查找,直接从当前位置开始读取。

2.stream_set_blocking

stream_set_blocking ($resource, $flag):boolean ;

$flag 取值为0或1

stream_set_blocking是否让流阻塞,0是非阻塞,1是阻塞。

此函数适用于支持非阻塞模式的任何资源流(常规文件,套接字资源流等)。该参数的设置将会影响到像 fgets() 和 fread() 这样的函数从资源流里读取数据。 在非阻塞模式下,调用 fgets(),总是会立即返回;而在阻塞模式下,将会一直等到从资源流里面获取到数据才能返回。

最近遇到的一些好用的函数

array_walk、md5_file、parse_url

array_map返回一个新数组,array_walk可通过应用修改元素值