王新阳

wangxinyang

PHP文件系统函数

  • basename — 返回路径中的文件名部分
  • chgrp — 改变文件所属的组
  • chmod — 改变文件模式
  • chown — 改变文件的所有者
  • clearstatcache — 清除文件状态缓存
  • copy — 拷贝文件
  • delete — 参见 unlink 或 unset
  • dirname — 返回路径中的目录部分
  • disk_free_space — 返回目录中的可用空间
  • disk_total_space — 返回一个目录的磁盘总大小
  • diskfreespace — disk_free_space 的别名
  • fclose — 关闭一个已打开的文件指针
  • fdatasync — Synchronizes data (but not meta-data) to the file
  • feof — 测试文件指针是否到了文件结束的位置
  • fflush — 将缓冲内容输出到文件
  • fgetc — 从文件指针中读取字符
  • fgetcsv — 从文件指针中读入一行并解析 CSV 字段
  • fgets — 从文件指针中读取一行
  • fgetss — 从文件指针中读取一行并过滤掉 HTML 标记
  • file_exists — 检查文件或目录是否存在
  • file_get_contents — 将整个文件读入一个字符串
  • file_put_contents — 将一个字符串写入文件
  • file — 把整个文件读入一个数组中
  • fileatime — 取得文件的上次访问时间
  • filectime — 取得文件的 inode 修改时间
  • filegroup — 取得文件的组
  • fileinode — 取得文件的 inode
  • filemtime — 取得文件修改时间
  • fileowner — 取得文件的所有者
  • fileperms — 取得文件的权限
  • filesize — 取得文件大小
  • filetype — 取得文件类型
  • flock — 轻便的咨询文件锁定
  • fnmatch — 用模式匹配文件名
  • fopen — 打开文件或者 URL
  • fpassthru — 输出文件指针处的所有剩余数据
  • fputcsv — 将行格式化为 CSV 并写入文件指针
  • fputs — fwrite 的别名
  • fread — 读取文件(可安全用于二进制文件)
  • fscanf — 从文件中格式化输入
  • fseek — 在文件指针中定位
  • fstat — 通过已打开的文件指针取得文件信息
  • fsync — Synchronizes changes to the file (including meta-data)
  • ftell — 返回文件指针读/写的位置
  • ftruncate — 将文件截断到给定的长度
  • fwrite — 写入文件(可安全用于二进制文件)
  • glob — 寻找与模式匹配的文件路径
  • is_dir — 判断给定文件名是否是一个目录
  • is_executable — 判断给定文件名是否可执行
  • is_file — 判断给定文件名是否为一个正常的文件
  • is_link — 判断给定文件名是否为一个符号连接
  • is_readable — 判断给定文件名是否可读
  • is_uploaded_file — 判断文件是否是通过 HTTP POST 上传的
  • is_writable — 判断给定的文件名是否可写
  • is_writeable — is_writable 的别名
  • lchgrp — 修改符号链接的所有组
  • lchown — 修改符号链接的所有者
  • link — 建立一个硬连接
  • linkinfo — 获取一个连接的信息
  • lstat — 给出一个文件或符号连接的信息
  • mkdir — 新建目录
  • move_uploaded_file — 将上传的文件移动到新位置
  • parse_ini_file — 解析一个配置文件
  • parse_ini_string — 解析配置字符串
  • pathinfo — 返回文件路径的信息
  • pclose — 关闭进程文件指针
  • popen — 打开进程文件指针
  • readfile — 输出文件
  • readlink — 返回符号连接指向的目标
  • realpath_cache_get — 获取真实目录缓存的详情
  • realpath_cache_size — 获取真实路径缓冲区的大小
  • realpath — 返回规范化的绝对路径名
  • rename — 重命名一个文件或目录
  • rewind — 倒回文件指针的位置
  • rmdir — 删除目录
  • set_file_buffer — stream_set_write_buffer 的别名
  • stat — 给出文件的信息
  • symlink — 建立符号连接
  • tempnam — 建立一个具有唯一文件名的文件
  • tmpfile — 建立一个临时文件
  • touch — 设定文件的访问和修改时间
  • umask — 改变当前的 umask
  • unlink — 删除文件

PHP常用header状态

转自:https://www.cnblogs.com/limeng951/p/5634107.html

<?php
//200 正常状态
header('HTTP/1.1 200 OK');
// 301 永久重定向,记得在后面要加重定向地址 Location:$url
header('HTTP/1.1 301 Moved Permanently');
// 重定向,其实就是302 暂时重定向
header('Location: http://www.maiyoule.com/');
// 设置页面304 没有修改
header('HTTP/1.1 304 Not Modified');
// 显示登录框,
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm="登录信息"');
echo '显示的信息!';
// 403 禁止访问
header('HTTP/1.1 403 Forbidden');
// 404 错误
header('HTTP/1.1 404 Not Found');
// 500 服务器错误
header('HTTP/1.1 500 Internal Server Error');
// 3秒后重定向指定地址(也就是刷新到新页面与 <meta http-equiv="refresh" content="10;http://www.jb51.net/ /> 相同)
header('Refresh: 3; url=http://www.jb51.net/');
echo '10后跳转到http://www.jb51.net';
// 重写 X-Powered-By 值
header('X-Powered-By: PHP/5.3.0');
header('X-Powered-By: Brain/0.6b');
//设置上下文语言
header('Content-language: en');
 // 设置页面最后修改时间(多用于防缓存)
$time = time() - 60; //建议使用filetime函数来设置页面缓存时间
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT');
// 设置内容长度
header('Content-Length: 39344');
// 设置头文件类型,可以用于流文件或者文件下载
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="example.zip"');
header('Content-Transfer-Encoding: binary');
readfile('example.zip');//读取文件到客户端

//禁用页面缓存
header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Pragma: no-cache');

//设置页面头信息
header('Content-Type: text/html; charset=iso-8859-1');
header('Content-Type: text/html; charset=utf-8');
header('Content-Type: text/plain');
header('Content-Type: image/jpeg');
header('Content-Type: application/zip');
header('Content-Type: application/pdf');
header('Content-Type: audio/mpeg');
header('Content-Type: application/x-shockwave-flash');
//.... 至于Content-Type 的值 可以去查查 w3c 的文档库,那里很丰富
?>

设置页面不缓存的方法

转自:https://www.php.cn/php-ask-454686.html

一般我们要查看网上的一个网页,那么当您第一次访问这个网页的时候,系统首先要将这个网页下载到您的本地计算机的一个临时文件夹中进行缓存,当在一定的时间内,您第二次、第三次来访问这个网页的时候,浏览器就直接从您的本地计算机的临时文件夹中读取这个文件显示,这样做的好处就是避免每次都要重新下载而占用大量的时间和网络资源,不得不说页面的缓存加快了网页的显示,当然也有它的坏处,例如当服务器上的网页己经更新,而本地显示的还是没有更新的网页,这样就不能及时的显示更新后的内容,在某些情况下,我们需要禁止浏览器缓存,以使我们每次看到的页面都是最新的页面(例如后台操作、大型网站的实时新闻页面),这时我们就要禁用浏览器缓存,下面分别说明了在四种不同的页面环境下来禁止网页缓存:

一、对于静态页(就是通过meta标签来设置):

<!--expires用于设定网页的过期时间,一旦过期就必须从服务器上重新加载.时间必须使用GMT格式-->
<meta http-equiv="expires" content="Sunday 26 October 2008 01:00 GMT" />

或者通过pragma no-cache来设置,pragma出现在http-equiv属性中,使用content属性的no-cache值表示是否缓存网页(为了提高速度一些浏览器会缓存浏览者浏览过的页面,通过下面的定义,浏览器一般不会缓存页面,而且浏览器无法脱机浏览)。

二、对于ASP页面:

<%
Response.Buffer=true
Response.CacheControl="no-cache" '禁止代理服务器缓存本页面
Response.Expires=-1000 '让页面立即过期(这儿最好设置一个绝对值较大的负数)
%>

三、对于JSP页面:

<%
if(request.getProtocol().compareTo("HTTP/1.0")==0){
	response.setHeader("Pragma","no-cache");
}
if(request.getProtocol().compareTo("HTTP/1.1")==0){
	response.setHeader("Cache-Control","no-cache");
}
response.setDateHeader("Expires",0);
%>

四、对于PHP页面:

<?php
header('Cache-Control:no-cache,must-revalidate');
header('Pragma:no-cache');
?>

强调说明:对于动态页面,缓存的代码必须放在任何HTML标签输出之前,否则将会出错。

解决阿里云虚拟主机(linux系统)不支持中文文件名的问题

网站根目录有如下文件:


通过浏览器访问时,问题如下图:

原因 linux 系统文件名都是utf-8编码,所以只需要把文件名改为utf-8格式即可:
1、通过utf-8编码的php上传时,文件名会自动变为utf-8格式,而且看起来像乱码,如下:

此时可直接通过浏览器访问下载。
2、中文.docx,使用ftp工具上传到服务器后,文件名还是gbk编码,虽然看起来正常,但是通过浏览器访问时却是 404 Not Found。

echo convert_encoding('中文.docx', 'utf-8', 'gbk'); //GBK转UTF-8

人工复制生成的字符,重命名服务器上的文件,即可通过浏览器访问中文名称的文件了。

这只是提供一种思路,而且问题都是在"本地为WINDOWS系统,服务器为LINUX系统"的情况下遇到的。

FileReader文件转base64并上传简单示例

FileReader手册 https://developer.mozilla.org/en-US/docs/Web/API/FileReader

html_html5增强的文件上传域_使用FileReader读取文件内容https://www.cnblogs.com/isXianYue/p/13196444.html

HTML

<input type="file" id="file">
<script>
$('#file').change(function(){
	var This=$(this);
	var reader=new FileReader();
	reader.onload=function(){
		$.post('/base64.php',{
				base64:reader.result,
				name:This.get(0).files[0]['name']
			}, function(res){
				alert(res);
		},'text');
	};
	//console.log(This.get(0).files[0]);
	reader.readAsDataURL(This.get(0).files[0]);
});
</script>

PHP

<?php
$base64 = $_POST['base64'];
$name = $_POST['name'];
$file = substr($base64,strpos($base64,','));
$mime = substr(substr($base64, 0, strpos($base64,';')), 5);

file_put_contents($name, base64_decode($file));
echo 'ok';

php解析html dom的类库 simple_html_dom

simple_html_dom可以像jQuery一样操作html dom。

下载:https://github.com/samacs/simple_html_dom
https://sourceforge.net/projects/simplehtmldom/files/

官方文档:https://simplehtmldom.sourceforge.io/manual.htm


PHP从7.2升级到7.3(7.4)后需要注意的地方

1、数组不再支持大括号调用,必须使用中括号。 $array{0} 会报错:

Severity: 8192
Array and string offset access syntax with curly braces is deprecated 

2、switch 中使用 continue 会出现警告:

Severity: Warning
"continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"?

需要根据实际情况改为 break (仅退出switch) 或 continue 2 (退出for/foreach等)

CodeIgniter获取header信息

以下两个用于获取 Request Headers

$this->input->request_headers()
返回 HTTP 请求头数组

$this->input->get_request_header()
返回某个指定的 HTTP 请求头,如果不存在,则返回 NULL

以下用于获取使用 header() 设置的 Response Headers

$this->output->get_header($header)
返回请求的 HTTP 头,如果 HTTP 头还没设置,返回 NULL

PHP过滤器预定义常量

PHP过滤器函数

  • filter_has_var — 检测是否存在指定类型的变量
  • filter_id — 返回与某个特定名称的过滤器相关联的id
  • filter_input_array — 获取一系列外部变量,并且可以通过过滤器处理它们
  • filter_input — 通过名称获取特定的外部变量,并且可以通过过滤器处理它
  • filter_list — 返回所支持的过滤器列表
  • filter_var_array — 获取多个变量并且过滤它们
  • filter_var — 使用特定的过滤器过滤一个变量




以下转自:https://blog.csdn.net/asty9000/article/details/83186890

变量类型

常量名值(PHP7.2.4)说明
INPUT_POST0POST变量
INPUT_GET1GET变量
INPUT_COOKIE2COOKIE变量
INPUT_ENV4ENV变量
INPUT_SERVER5SERVER变量
INPUT_SESSION6SESSION变量
INPUT_REQUEST99REQUEST变量

过滤器标记

常量名值(PHP7.2.4)说明
FILTER_FLAG_NONE0表示没有使用标记
FILTER_FLAG_ALLOW_OCTAL1允许八进制的字符(0[0-7]+)。
FILTER_FLAG_ALLOW_HEX2允许十六进制的字符(0x[0-9a-fA-F]+)。
FILTER_NULL_ON_FAILURE134217728过滤失败时返回null,而不是false。
FILTER_FLAG_ALLOW_THOUSAND8192允许使用千分位分隔符(,)。
FILTER_FLAG_SCHEME_REQUIRED65536url需要带协议部分(PHP5.2.1FILTER_VALIDATE_URL隐式使用)。
FILTER_FLAG_HOST_REQUIRED131072url需要带ip地址或域名部分(PHP5.2.1FILTER_VALIDATE_URL隐式使用)。
FILTER_FLAG_PATH_REQUIRED262144url需要带路径部分。
FILTER_FLAG_QUERY_REQUIRED524288url需要带数据部分。
FILTER_FLAG_EMAIL_UNICODE1048576PHP7.1起,在邮件地址用户名部分允许 Unicode 字符。
FILTER_FLAG_IPV41048576仅允许IPv4地址。
FILTER_FLAG_IPV62097152仅允许IPv6地址。
FILTER_FLAG_NO_PRIV_RANGE8388608ip地址不在私有地址范围内。
FILTER_FLAG_NO_RES_RANGE4194304ip地址不在保留地址范围内(PHP5.2.10起,支持IPv6地址)。
FILTER_FLAG_HOSTNAME1048576PHP7.0起,验证主机名(必须以字母数字字符开头,并且只包含字母数字或连字符)。
FILTER_FLAG_NO_ENCODE_QUOTES

128

不对'和"进行编码。
FILTER_FLAG_STRIP_LOW4去掉ASCII编码值小于32的字符。
FILTER_FLAG_STRIP_HIGH8去掉ASCII编码值大于127的字符。
FILTER_FLAG_STRIP_BACKTICK512PHP5.3.2起,去掉反引号(`)。
FILTER_FLAG_ENCODE_LOW16对ASCII编码值小于32的字符进行编码。
FILTER_FLAG_ENCODE_HIGH32对ASCII编码值大于127的字符进行编码。
FILTER_FLAG_ENCODE_AMP64对&进行编码。
FILTER_FLAG_ALLOW_FRACTION4096保留小数点(.)。
FILTER_FLAG_ALLOW_THOUSAND8192保留千位符(,)。
FILTER_FLAG_ALLOW_SCIENTIFIC16384保留科学计数符(e或E)。
FILTER_REQUIRE_SCALAR33554432需要值为标量。
FILTER_REQUIRE_ARRAY16777216需要值为数组。
FILTER_FORCE_ARRAY67108864如果值为标量,则将其作为数组处理,标量值作为数组元素。
FILTER_FLAG_EMPTY_STRING_NULL256PHP5.4起,如果是空字符串,则返回null。

验证过滤器

常量名值(PHP7.2.4)说明
FILTER_VALIDATE_INT257整型验证过滤器
FILTER_VALIDATE_BOOLEAN258布尔验证过滤器
FILTER_VALIDATE_FLOAT259浮点验证过滤器
FILTER_VALIDATE_REGEXP272正则验证过滤器
FILTER_VALIDATE_URL273URL地址验证过滤器
FILTER_VALIDATE_EMAIL274邮件地址验证过滤器
FILTER_VALIDATE_IP275IP地址验证过滤器
FILTER_VALIDATE_MAC276PHP5.5起,MAC地址验证过滤器
FILTER_VALIDATE_DOMAIN277域名验证过滤器

清洗过滤器

常量名值(PHP7.2.4)说明
FILTER_SANITIZE_STRING

513

字符串过滤器
FILTER_SANITIZE_STRIPPED513字符串过滤器的别名
FILTER_SANITIZE_ENCODED514url编码过滤器
FILTER_SANITIZE_SPECIAL_CHARS515特殊字符过滤器
FILTER_UNSAFE_RAW516原值过滤器
FILTER_SANITIZE_EMAIL517邮件地址过滤器
FILTER_SANITIZE_URL518url地址过滤器
FILTER_SANITIZE_NUMBER_INT519整型过滤器
FILTER_SANITIZE_NUMBER_FLOAT520浮点过滤器
FILTER_SANITIZE_MAGIC_QUOTES521转义过滤器
FILTER_SANITIZE_FULL_SPECIAL_CHARS522PHP5.3.3起,全部特殊字符过滤器

其他

常量名值(PHP7.2.4)说明
FILTER_DEFAULT

与配置的默认过滤器相同

与配置的默认过滤器相同
FILTER_CALLBACK1024回调过滤器

PHP原生函数判断IP格式是否正确

一般我们都是通过正则表达式来判断IP格式是否正确,其实从php5.2.0之后,PHP就有专门的函数来做这个判断了。

filter_var — 使用特定的过滤器过滤一个变量
过滤器预定义常量见:http://wangxinyang.cn/wxy/view.asp?id=253

判断是否是合法IP方法如下:

if(filter_var($ip, FILTER_VALIDATE_IP)) {
// it's valid
}
else {
// it's not valid
}
  
//判断是否是合法的IPv4 IP地址
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
// it's valid
}
else {
// it's not valid
}
//判断是否是合法的公共IPv4地址,192.168.1.1这类的私有IP地址将会排除在外
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE)) {
// it's valid
}
else {
// it's not valid
}
//判断是否是合法的IPv6地址
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE)) {
// it's valid
}
else {
// it's not valid
}
//判断是否是public IPv4 IP或者是合法的Public IPv6 IP地址
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
// it's valid
}
else {
// it's not valid
}

以上转自:https://www.haibakeji.com/archives/313.html


/**
* 是否有效ipv4地址
*/
function is_ip($str){
return preg_match("/^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$/", (string)$str) === 1 ? TRUE : FALSE;
}
/**
* 是否有效ipv6地址
* 1、可以是纯IPv6地址,如 fb80::86e2:c6f7:c749:2d43
* 2、可以是嵌入IPv4的IPv6地址,如 fb80::86e2:c6f7:c749:2d43:192.168.1.1
* 3、不能是带网卡interface标识的IPv6地址,如 fb80::86e2:c6f7:c749:2d43%15
* 4、$_SERVER['REMOTE_ADDR'] 获取的可能是3中所指的带网卡标识的IPv6,所以在判断前要先去掉网卡标识部分
*/
function is_ipv6($str){
return preg_match("/^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:)|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}(:[0-9A-Fa-f]{1,4}){1,2})|(([0-9A-Fa-f]{1,4}:){4}(:[0-9A-Fa-f]{1,4}){1,3})|(([0-9A-Fa-f]{1,4}:){3}(:[0-9A-Fa-f]{1,4}){1,4})|(([0-9A-Fa-f]{1,4}:){2}(:[0-9A-Fa-f]{1,4}){1,5})|([0-9A-Fa-f]{1,4}:(:[0-9A-Fa-f]{1,4}){1,6})|(:(:[0-9A-Fa-f]{1,4}){1,7})|(([0-9A-Fa-f]{1,4}:){6}(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3})|(([0-9A-Fa-f]{1,4}:){5}:(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3})|(([0-9A-Fa-f]{1,4}:){4}(:[0-9A-Fa-f]{1,4}){0,1}:(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3})|(([0-9A-Fa-f]{1,4}:){3}(:[0-9A-Fa-f]{1,4}){0,2}:(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3})|(([0-9A-Fa-f]{1,4}:){2}(:[0-9A-Fa-f]{1,4}){0,3}:(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3})|([0-9A-Fa-f]{1,4}:(:[0-9A-Fa-f]{1,4}){0,4}:(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3})|(:(:[0-9A-Fa-f]{1,4}){0,5}:(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}))$/", (string)$str) === 1 ? TRUE : FALSE;
}


2025-04-04 星期五 农历三月初七