CSS 多行文本溢出时显示省略号
display:block;display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;-webkit-box-orient:vertical;
多行
display:block; display:-webkit-box; overflow:hidden; text-overflow:ellipsis; -webkit-line-clamp:2; -webkit-box-orient:vertical;
单行
display:block; overflow:hidden; text-overflow:ellispis; white-space:nowrap;
CodeIgniter同数据库/跨数据库复制表
同数据库复制表结构和数据:
$this->db->query('CREATE TABLE tab_new SELECT * FROM tab_old');
跨数据库复制表结构和数据:
//从db2获取原表的创建表sql语句 $query = $this->db2->query("SHOW CREATE TABLE $table_name")->row_array(); $query = $query[''Create Table']; //在当前数据库创建新表 $this->db->query($query); //遍历原表数据并写入新表 $res = $this->db2->get($table_name)->result_array(); foreach($res as $row){ $this->db->insert($table_name, $row); }
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_POST | 0 | POST变量 |
INPUT_GET | 1 | GET变量 |
INPUT_COOKIE | 2 | COOKIE变量 |
INPUT_ENV | 4 | ENV变量 |
INPUT_SERVER | 5 | SERVER变量 |
INPUT_SESSION | 6 | SESSION变量 |
INPUT_REQUEST | 99 | REQUEST变量 |
过滤器标记
常量名 | 值(PHP7.2.4) | 说明 |
FILTER_FLAG_NONE | 0 | 表示没有使用标记 |
FILTER_FLAG_ALLOW_OCTAL | 1 | 允许八进制的字符(0[0-7]+)。 |
FILTER_FLAG_ALLOW_HEX | 2 | 允许十六进制的字符(0x[0-9a-fA-F]+)。 |
FILTER_NULL_ON_FAILURE | 134217728 | 过滤失败时返回null,而不是false。 |
FILTER_FLAG_ALLOW_THOUSAND | 8192 | 允许使用千分位分隔符(,)。 |
FILTER_FLAG_SCHEME_REQUIRED | 65536 | url需要带协议部分(PHP5.2.1FILTER_VALIDATE_URL隐式使用)。 |
FILTER_FLAG_HOST_REQUIRED | 131072 | url需要带ip地址或域名部分(PHP5.2.1FILTER_VALIDATE_URL隐式使用)。 |
FILTER_FLAG_PATH_REQUIRED | 262144 | url需要带路径部分。 |
FILTER_FLAG_QUERY_REQUIRED | 524288 | url需要带数据部分。 |
FILTER_FLAG_EMAIL_UNICODE | 1048576 | PHP7.1起,在邮件地址用户名部分允许 Unicode 字符。 |
FILTER_FLAG_IPV4 | 1048576 | 仅允许IPv4地址。 |
FILTER_FLAG_IPV6 | 2097152 | 仅允许IPv6地址。 |
FILTER_FLAG_NO_PRIV_RANGE | 8388608 | ip地址不在私有地址范围内。 |
FILTER_FLAG_NO_RES_RANGE | 4194304 | ip地址不在保留地址范围内(PHP5.2.10起,支持IPv6地址)。 |
FILTER_FLAG_HOSTNAME | 1048576 | PHP7.0起,验证主机名(必须以字母数字字符开头,并且只包含字母数字或连字符)。 |
FILTER_FLAG_NO_ENCODE_QUOTES | 128 | 不对'和"进行编码。 |
FILTER_FLAG_STRIP_LOW | 4 | 去掉ASCII编码值小于32的字符。 |
FILTER_FLAG_STRIP_HIGH | 8 | 去掉ASCII编码值大于127的字符。 |
FILTER_FLAG_STRIP_BACKTICK | 512 | PHP5.3.2起,去掉反引号(`)。 |
FILTER_FLAG_ENCODE_LOW | 16 | 对ASCII编码值小于32的字符进行编码。 |
FILTER_FLAG_ENCODE_HIGH | 32 | 对ASCII编码值大于127的字符进行编码。 |
FILTER_FLAG_ENCODE_AMP | 64 | 对&进行编码。 |
FILTER_FLAG_ALLOW_FRACTION | 4096 | 保留小数点(.)。 |
FILTER_FLAG_ALLOW_THOUSAND | 8192 | 保留千位符(,)。 |
FILTER_FLAG_ALLOW_SCIENTIFIC | 16384 | 保留科学计数符(e或E)。 |
FILTER_REQUIRE_SCALAR | 33554432 | 需要值为标量。 |
FILTER_REQUIRE_ARRAY | 16777216 | 需要值为数组。 |
FILTER_FORCE_ARRAY | 67108864 | 如果值为标量,则将其作为数组处理,标量值作为数组元素。 |
FILTER_FLAG_EMPTY_STRING_NULL | 256 | PHP5.4起,如果是空字符串,则返回null。 |
验证过滤器
常量名 | 值(PHP7.2.4) | 说明 |
FILTER_VALIDATE_INT | 257 | 整型验证过滤器 |
FILTER_VALIDATE_BOOLEAN | 258 | 布尔验证过滤器 |
FILTER_VALIDATE_FLOAT | 259 | 浮点验证过滤器 |
FILTER_VALIDATE_REGEXP | 272 | 正则验证过滤器 |
FILTER_VALIDATE_URL | 273 | URL地址验证过滤器 |
FILTER_VALIDATE_EMAIL | 274 | 邮件地址验证过滤器 |
FILTER_VALIDATE_IP | 275 | IP地址验证过滤器 |
FILTER_VALIDATE_MAC | 276 | PHP5.5起,MAC地址验证过滤器 |
FILTER_VALIDATE_DOMAIN | 277 | 域名验证过滤器 |
清洗过滤器
常量名 | 值(PHP7.2.4) | 说明 |
FILTER_SANITIZE_STRING | 513 | 字符串过滤器 |
FILTER_SANITIZE_STRIPPED | 513 | 字符串过滤器的别名 |
FILTER_SANITIZE_ENCODED | 514 | url编码过滤器 |
FILTER_SANITIZE_SPECIAL_CHARS | 515 | 特殊字符过滤器 |
FILTER_UNSAFE_RAW | 516 | 原值过滤器 |
FILTER_SANITIZE_EMAIL | 517 | 邮件地址过滤器 |
FILTER_SANITIZE_URL | 518 | url地址过滤器 |
FILTER_SANITIZE_NUMBER_INT | 519 | 整型过滤器 |
FILTER_SANITIZE_NUMBER_FLOAT | 520 | 浮点过滤器 |
FILTER_SANITIZE_MAGIC_QUOTES | 521 | 转义过滤器 |
FILTER_SANITIZE_FULL_SPECIAL_CHARS | 522 | PHP5.3.3起,全部特殊字符过滤器 |
其他
常量名 | 值(PHP7.2.4) | 说明 |
FILTER_DEFAULT | 与配置的默认过滤器相同 | 与配置的默认过滤器相同 |
FILTER_CALLBACK | 1024 | 回调过滤器 |
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;
}
IP地址分类
Internet委员会定义了5种IP(Internet Protocol Address)地址类型以适合不同容量的网络,即A类~E类。其中A、B、C三类由InternetNIC在全球范围内统一分配,D、E类为特殊地址。
类别 | IP地址范围 Public address | 私有IP地址范围 Private address |
A | 1.0.0.0-127.255.255.255 | 10.0.0.0-10.255.255.255 |
B | 128.0.0.0-191.255.255.255 | 172.16.0.0-172.31.255.255 |
C | 192.0.0.0-223.255.255.255 | 192.168.0.0-192.168.255.255 |
D(多播/组播地址) | 224.0.0.0-239.255.255.255 | |
E(特殊/保留地址) | 0.0.0.0-0.255.255.255 255.255.255.255 240.0.0.0-247.255.255.255 127.0.0.1-127.255.255.255 169.254.0.0-169.254.255.255 |
PHP超全局变量
超全局变量是PHP4.1引入的在全部作用域中始终可用的内置变量。在函数或方法中无需使用global关键字就能访问超全局变量。
$GLOBALS:引用全局作用域中可用的全部变量。一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
$_SERVER:一个包含了诸如头信息(header)、路径(path)、以及脚本位置(srcipt location)等信息的数组。这个数组中的项目由Web服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。
$_GET:HTTP GET变量,通过 URL 参数传递给当前脚本的变量的数组。
$_POST:HTTP POST变量,当HTTP POST请求的Content-Type是application/x-www-form-urlencoded或 multipart/form-data时,会将变量以关联数组形式传入当前脚本。
$_FILES:HTTP文件上传变量,通过HTTP POST方式上传到当前脚本的项目的数组。
$_COOKIE:HTTP Cookies,通过HTTP Cookies方式传递给当前脚本的变量的数组。
$_SESSION:Session 变量,当前脚本可用SESSION变量的数组。
$_REQUEST:HTTP Request变量,默认情况下包含了$_GET,$_POST和$_COOKIE的数组。$_FILES信息从PHP4.1起被从$_REQUEST中移除。
$_ENV:环境变量,通过环境方式传递给当前脚本的变量的数组。这些变量被从 PHP 解析器的运行环境导入到 PHP 的全局命名空间。很多是由支持 PHP 运行的 Shell 提供的,并且不同的系统很可能运行着不同种类的 Shell,所以不可能有一份确定的列表。
————————————————
原文链接:https://blog.csdn.net/asty9000/java/article/details/80870358
访问IPv6网站时的 $_SERVER
Array ( [_FCGI_X_PIPE_] => \\.\pipe\IISFCGI-e45319dc-f612-43f6-ba91-233966c64843 [ALLUSERSPROFILE] => C:\ProgramData [APPDATA] => C:\WINDOWS\system32\config\systemprofile\AppData\Roaming [APP_POOL_CONFIG] => C:\inetpub\temp\apppools\DefaultAppPool\DefaultAppPool.config [APP_POOL_ID] => DefaultAppPool [CommonProgramFiles] => C:\Program Files\Common Files [CommonProgramFiles(x86)] => C:\Program Files (x86)\Common Files [CommonProgramW6432] => C:\Program Files\Common Files [COMPUTERNAME] => SC-201902101815 [ComSpec] => C:\WINDOWS\system32\cmd.exe [DriverData] => C:\Windows\System32\Drivers\DriverData [LOCALAPPDATA] => C:\WINDOWS\system32\config\systemprofile\AppData\Local [NUMBER_OF_PROCESSORS] => 4 [OS] => Windows_NT [Path] => C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files\Microsoft\Web Platform Installer\;C:\WINDOWS\system32\config\systemprofile\AppData\Local\Microsoft\WindowsApps [PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC [PROCESSOR_ARCHITECTURE] => AMD64 [PROCESSOR_IDENTIFIER] => Intel64 Family 6 Model 58 Stepping 9, GenuineIntel [PROCESSOR_LEVEL] => 6 [PROCESSOR_REVISION] => 3a09 [ProgramData] => C:\ProgramData [ProgramFiles] => C:\Program Files [ProgramFiles(x86)] => C:\Program Files (x86) [ProgramW6432] => C:\Program Files [PSModulePath] => C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules [PUBLIC] => C:\Users\Public [SystemDrive] => C: [SystemRoot] => C:\WINDOWS [TEMP] => C:\WINDOWS\TEMP [TMP] => C:\WINDOWS\TEMP [USERDOMAIN] => WorkGroup [USERNAME] => SC-201902101815$ [USERPROFILE] => C:\WINDOWS\system32\config\systemprofile [windir] => C:\WINDOWS [ORIG_PATH_INFO] => /index.php [URL] => /index.php [SERVER_SOFTWARE] => Microsoft-IIS/10.0 [SERVER_PROTOCOL] => HTTP/1.1 [SERVER_PORT_SECURE] => 0 [SERVER_PORT] => 80 [SERVER_NAME] => fb80::49d8:1f71:2038:410e [SCRIPT_NAME] => /index.php [SCRIPT_FILENAME] => D:\WEB\web10001\index.php [REQUEST_URI] => / [REQUEST_METHOD] => GET [REMOTE_USER] => [REMOTE_PORT] => 12368 [REMOTE_HOST] => fb80::86e2:c6f7:c749:2d43%15 [REMOTE_ADDR] => fb80::86e2:c6f7:c749:2d43%15 [QUERY_STRING] => [PATH_TRANSLATED] => D:\WEB\web10001\index.php [LOGON_USER] => [LOCAL_ADDR] => fb80::49d8:1f71:2038:410e%15 [INSTANCE_META_PATH] => /LM/W3SVC/6 [INSTANCE_NAME] => WEB10001 [INSTANCE_ID] => 6 [HTTPS_SERVER_SUBJECT] => [HTTPS_SERVER_ISSUER] => [HTTPS_SECRETKEYSIZE] => [HTTPS_KEYSIZE] => [HTTPS] => off [GATEWAY_INTERFACE] => CGI/1.1 [DOCUMENT_ROOT] => D:\WEB\web10001 [CONTENT_TYPE] => [CONTENT_LENGTH] => 0 [CERT_SUBJECT] => [CERT_SERIALNUMBER] => [CERT_ISSUER] => [CERT_FLAGS] => [CERT_COOKIE] => [AUTH_USER] => [AUTH_PASSWORD] => [AUTH_TYPE] => [APPL_PHYSICAL_PATH] => D:\WEB\web10001\ [APPL_MD_PATH] => /LM/W3SVC/6/ROOT [IIS_UrlRewriteModule] => 7,1,1993,2336 [HTTP_UPGRADE_INSECURE_REQUESTS] => 1 [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 [HTTP_HOST] => [fb80::49d8:1f71:2038:410e] [HTTP_ACCEPT_LANGUAGE] => zh-CN,zh;q=0.9 [HTTP_ACCEPT_ENCODING] => gzip, deflate [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 [HTTP_CONTENT_LENGTH] => 0 [HTTP_CONNECTION] => keep-alive [FCGI_ROLE] => RESPONDER [PHP_SELF] => /index.php [REQUEST_TIME_FLOAT] => 1586529155.0947 [REQUEST_TIME] => 1586529155 )
UNICODE 0x3000 -- 0x303f 中日韩符号
unicode字符百科:https://unicode-table.com/cn/
Unicode 编码 | 字符 | Unicode 编码 | 字符 | Unicode 编码 | 字符 | Unicode 编码 | 字符 | ||||
十进制 | 十六进制 | 十进制 | 十六进制 | 十进制 | 十六进制 | 十进制 | 十六进制 | ||||
12288 | 3000 | 12289 | 3001 | 、 | 12290 | 3002 | 。 | 12291 | 3003 | 〃 | |
12292 | 3004 | 〄 | 12293 | 3005 | 々 | 12294 | 3006 | 〆 | 12295 | 3007 | 〇 |
12296 | 3008 | 〈 | 12297 | 3009 | 〉 | 12298 | 300A | 《 | 12299 | 300B | 》 |
12300 | 300C | 「 | 12301 | 300D | 」 | 12302 | 300E | 『 | 12303 | 300F | 』 |
12304 | 3010 | 【 | 12305 | 3011 | 】 | 12306 | 3012 | 〒 | 12307 | 3013 | 〓 |
12308 | 3014 | 〔 | 12309 | 3015 | 〕 | 12310 | 3016 | 〖 | 12311 | 3017 | 〗 |
12312 | 3018 | 〘 | 12313 | 3019 | 〙 | 12314 | 301A | 〚 | 12315 | 301B | 〛 |
12316 | 301C | 〜 | 12317 | 301D | 〝 | 12318 | 301E | 〞 | 12319 | 301F | 〟 |
12320 | 3020 | 〠 | 12321 | 3021 | 〡 | 12322 | 3022 | 〢 | 12323 | 3023 | 〣 |
12324 | 3024 | 〤 | 12325 | 3025 | 〥 | 12326 | 3026 | 〦 | 12327 | 3027 | 〧 |
12328 | 3028 | 〨 | 12329 | 3029 | 〩 | 12330 | 302A | 〪 | 12331 | 302B | 〫 |
12332 | 302C | 〬 | 12333 | 302D | 〭 | 12334 | 302E | 〮 | 12335 | 302F | 〯 |
12336 | 3030 | 〰 | 12337 | 3031 | 〱 | 12338 | 3032 | 〲 | 12339 | 3033 | 〳 |
12340 | 3034 | 〴 | 12341 | 3035 | 〵 | 12342 | 3036 | 〶 | 12343 | 3037 | 〷 |
12344 | 3038 | 〸 | 12345 | 3039 | 〹 | 12346 | 303A | 〺 | 12347 | 303B | 〻 |
12348 | 303C | 〼 | 12349 | 303D | 〽 | 12350 | 303E | 〾 | 12351 | 303F | 〿 |
PHP学习资源
https://www.cnblogs.com/Renyi-Fan/category/1116999.html
怎么判断扩展是否启用
https://www.cnblogs.com/Renyi-Fan/p/9742246.html
1、使用 extension_loaded() 判断扩展是否已开始
2、使用 function_exists() 判断该扩展的某个函数是否存在
3、直接调用该扩展的函数看运行结果,如:gd_info()
……
PHP开发中常见的安全问题详解和解决方法https://www.cnblogs.com/walblog/articles/8331399.html
PHP扩展官方下载地址
https://windows.php.net/downloads/pecl/releases/
https://windows.php.net/