从小白到拍簧片
- 位异或运算(^ )
- 引用符号(&)
- strlen() 函数
- base64_encode
- 预定义 $_POST 变量
- session_start($array);
- @操作符
- php 命令
- set_time_limit(7200)
- isset()
- PHP 命名空间(namespace)
- new 实例化类
- extends 继承 一个类使用另一个类方法
- error_reporting()
- static 声明的成员变量属于静态成员变量
- Function类型函数实际上是对象
- :: 类中 静态方法和静态属性的引用方法
- => 是数组成员访问符号
- -> 是对象成员访问符号
- defined() 检测某个常量的名称是否存在.
- strpos() 函数
- 关键字
- 对象克隆/复制
- ===是包括变量值与类型完全相等
- ==只是比较两个数的值是否相等
- trim()函数
- substr() 函数
- 魔术常量 __DIR__
- php redis 支持
- phpstorm远程开发配置
- No input file specified.(apache)
- 作业外包 学生管理系统
- PHP实战-在线聊天室
<?php
位异或运算(^ )
5=
0000 0000 0000 0101
^
7=
0000 0000 0000 0111
=
0000 0000 0000 0010
function encode($D,$K){
for($i=0;$i<strlen($D);$i++) {
$c = $K[$i+1&15];
$D[$i] = $D[$i]^$c;
}
return $D;
}
引用符号(&)
操作符
意为and
逻辑上表示两者属于缺一不可的关系
strlen() 函数
返回字符串的长度,中文字符串的处理使用 mb_strlen() 函数
base64_encode
base64_decode加密解密函数
预定义 $_POST 变量
收集来自 method=“post” 的表单中的值。
POST 方法的发送信息的量最大值为 8 MB(可通过设置 php.ini 文件中的 post_max_size 进行更改)
session_start($array);
用于创建新会话或者重用现有会话的内置函数; 成功开始会话返回true,反之返回false。
session_start() 函数必须位于 标签之前 启动会话 //开启Session功能
Session信息的存储与读取
session_id();//获取用户Session ID值,如需修改在括号中传值即可
利用Session变量存储信息:
$_SESSION[“Session名称”]=变量或字符串信息;
读取Session变量信息(可赋值给一个变量或者直接输出):
变量=$_SESSION[“Session名称”];
@操作符
禁止php中的所有错误,包括通知、警告甚至严重错误
php 命令
php是流行的web语言
php语言还可嵌入到html中运行
php命令功能:
用于调用php解释器,管理相应的脚本
php命令的语法格式:
php [参数]
-----常用参数说明------
-q:安静模式,HTTP头输出(只有CGI)
-g:在脚本中使变量为全局变量
-f:解析和执行文件
-a:运行PHP交互方式
-b:为外部FASTCGI服务器模式(CGI)绑定路径
-r:运行PHP代码,而无需使用脚本标记“..?>”
-e:为调试器/分析器生成扩展信息
-n:没有php.ini文件将被使用
-z:加载Zend扩展文件
-H:从外部工具隐藏脚本名称(文件)和参数
--rf:返回有关函数名信息
-l:只进行语法检查
--rc:返回有关类名的信息
--re:返回有关扩展名的信息
--ri:名字显示
--ini:返回配置文件名
-C:不chdir到脚本的目录
-c:在指定目录路径中查找php.ini文件,或使用指定的文件
-i:PHP信息和配置
-T:测量脚本重复次数的执行时间
-m:在模块中显示编译
-s:输出HTML语法高亮显示源代码
-F:对每个输入行解析和执行文件
-E:处理所有的输入行后运行PHP代码
-B:处理输入行之前运行PHP代码
-w:输出源,注释和空白
-R:对每一个输入行运行PHP代码
-v:返回版本信息
clearstatcache() 函数清除文件状态缓存
basename() 函数返回路径中的文件名部分
is_file() 函数检查指定的文件是否是常规的文件
set_time_limit(7200)
设置程序执行时间的函数
0为一直等程序执行结束。
来控制运行时间 【建议使用】
当你的页面有大量数据时, 默认是30s,
所以需要你将执行时间加长点
设定一个程式所允许执行的秒数,如果到达限制的时间,程式将会传回错误
exit() 函数输出一条消息,并退出当前脚本。 该函数是 die() 函数的别名
date_default_timezone_set(‘PRC’);
date_default_timezone_set(‘Asia/Chongqing’);
date_default_timezone_set() 函数设置脚本中所有日期/时间函数使用的默认时区
echo() 函数输出一个或多个字符串
查看php运行目录命令:
which php
/usr/bin/php
查看php-fpm进程数:
ps aux | grep -c php-fpm
查看运行内存
/usr/bin/php -i|grep mem
重启php-fpm
/etc/init.d/php-fpm restart
isset()
检测变量是否设置
PHP 命名空间(namespace)
语法要求 :
命名空间必须是程序脚本的第一条语句
重名问题:
class名 函数名 const常量名(define 无效) ------>redeclare 报错
便可 利用命名空间 进行分割区分
调用空间元素时候 :\xx\xxx();
-
多级命名空间
子集命名空间 - 子空间
空间(文件)元素较多
(TP自动加载 命名空间虚拟目录名称转化路径)
利于 -快速 判断文件 定位 -
三种方式引用
-
访问静态成员
-
引入机制
- 空间引入
use 空间;
限定子空间访问元素;
2. 空间类元素引入
- 公共空间 没有namespace关键字的
元素应用 要注意 :
有命名空间 include 引入公共空间——对当前空间没有影响
优先级 查找当前空间+引用
反之亦然
尽量用完全限定空间进行引用;
-
TP框架 虚拟命名空间实例
相互对应: 实际文件夹 —— 虚拟命名空间
实现自动加载
use 引用空间类元素 -
eg 加载模版
new 实例化类
extends 继承 一个类使用另一个类方法
declare(encoding=‘UTF-8’);
定义多个命名空间和不包含在命名空间中的代码
error_reporting()
error_reporting(0);
设置当前脚本的错误报告级别
函数规定你给应该报告何种 PHP 错误 E_ALL | E_STRICT
static 声明的成员变量属于静态成员变量
Function类型函数实际上是对象
每个函数实际上都是 Function 类型的实例
:: 类中 静态方法和静态属性的引用方法
不需要实例化对象,直接通过类名对类中的方法进行引用
class Test{
public static $test = 1;
public static function test(){
}
}
Test:: t e s t 来取得 test 来取得 test来取得test属性的值
Test::test(); 直接调用静态方法test
try {
//尝试执行的代码块
}
catch (异常类型1 异常的变量名1) {
//捕获错误的代码块1
}
...
catch (异常类型2 异常的变量名2) {
//捕获错误的代码块2
}
finally {
//最终执行的代码块
}
=> 是数组成员访问符号
-> 是对象成员访问符号
比如:
$array = array("site map"=>"map.php");
//定义了一个数组
包含一个数组成员:键名为site map,值为map.php
t h i s − > this-> this−>name = $value
$this 在php里是个特定的变量,它代表了类本身,
->是访问其类成员的操作符,
t
h
i
s
−
>
this->
this−>name = $value,
这句代码意思是:将当前类的name变量的值设置为 $value.
printStackTrace对调试程序有帮助 重构获取异常栈信息
count() 函数返回数组中元素的数目
microtime() 函数返回当前Unix 时间戳的微秒数
memory_get_usage()能返回当前分配给PHP脚本的内存量,单位是字节(byte)【PHP内置函数】
使用它来调试PHP代码性能
DIRECTORY_SEPARATOR【内置常量】
使用“\”作为文件分隔符 linux上系统不认识这个标识,于是就要引入这个php内置常量了
defined() 检测某个常量的名称是否存在.
如果已定义返回 true 未定义返回 false
短路求值 计算逻辑或表达式 计算左侧如果是true,那么就不再计算右侧,直接返回true,
所以A or B;可以达到if(!A) B;的效果
如果左侧是false,那么同样会发生短路,不计算右侧直接返回false A and B;类似if(A) B;
短路求值在语意上比较接近英文,又回避了“if必加花括号”带来的视觉污染(?),
所以还算比较通行的做法(虽然严格意义上来说不算是好习惯)
defined or define
如果左定义 跳过右
否则不跳
$SERVER[‘SCRIPT_FILENAME’]本文件的绝对路径
指向当前执行脚本的绝对路径
strtoupper() 函数把字符串转换为大写
is_array() 函数用于检测变量是否是一个数组
getenv 取得系统的环境变量
putenv()
返回值:无
函数种类:PHP 系统功能
内容说明:本函数用来配置系统环境变量。
__FILE__指向当前执行脚本的绝对路径
PHP常量PHP_SAPI与函数php_sapi_name()
PHP运行环境检测
用来判断是使用命令行还是浏览器执行的,如果 PHP_SAPI==’cli’ 表示是在命令行下执行
三元运算符 语法:条件 ? 结果1 : 结果2
strpos() 函数
查找字符串在另一字符串中第一次出现的位置。
注释:strpos() 函数对大小写敏感。
注释:该函数是二进制安全的
获取当前操作系统类型 PHP_OS
is_file() 函数检查指定的文件是否是常规的文件。
如果文件是常规的文件,该函数返回 TRUE。
parse_ini_file() 函数解析一个配置文件(ini 文件),并以数组的形式返回其中的设置
foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement
关键字
对象克隆/复制
version_compare 用户对比两个【PHP规范化】版本数字字符串
PHP_VERSION:当前PHP的版本号
$_SERVER[‘SCRIPT_NAME’] 自动获取当前文件在网站中的路径
–127.0.0.1/2019/index.php
echo $_SERVER[‘SCRIPT_NAME’] ;
/2019/index.php
dirname 返回路径中的目录部分
<?php
echo dirname("c:/testweb/home.php") . "<br />";
echo dirname("/testweb/home.php");
?>
上面的代码将输出:
c:/testweb
/testweb
/2019
str_replace 以其他字符替换字符串中的一些字符
===是包括变量值与类型完全相等
==只是比较两个数的值是否相等
trim()函数
移除字符串两侧的空白字符或其他预定义字符
substr() 函数
返回字符串的一部分
魔术常量 DIR
指向当前执行的PHP脚本所在的目录
当前执行的PHP文件为 /www/website/index.php
则__FILE__等于’/www/website/index.php’
而__DIR__等于’/www/website’
现在我们要包含当前文件目录或子目录下的文件,可以直接使用:
<?php require_once __DIR__ . 'test.inc.php'; ?>
realpath() 函数返回绝对路径。
该函数删除所有符号连接(比如 ‘/./’, ‘/…/’ 以及多余的 ‘/’),返回绝对路径名。
若失败,则返回 false。比如说文件不存在的话
define() 函数定义一个常量
chmod() 函数改变文件模式 bool(true)
2022.2.20
文档
https://pkg.xyz/#how-to-install-composer
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
全局安装是将 Composer 安装到系统环境变量 PATH 所包含的路径下面,然后就能够在命令行窗口中直接执行 composer 命令了。
Windows 系统:
找到并进入 PHP 的安装目录(和你在命令行中执行的 php 指令应该是同一套 PHP)。
将 composer.phar 复制到 PHP 的安装目录下面,
也就是和 php.exe 在同一级目录。
在 PHP 安装目录下新建一个 composer.bat 文件,
并将下列代码保存到此文件中。
@php "%~dp0composer.phar" %*
最后重新打开一个命令行窗口试一试执行
composer --version 看看是否正确输出版本号。
不要忘了经常执行 composer selfupdate 以保持 Composer 一直是最新版本哦!
php redis 支持
https://pecl.php.net/package/redis/5.3.7/windows
phpstudy 开启 redis缓存
phpstorm远程开发配置
官网下载地址:https://www.jetbrains.com/phpstorm/
java JVM
-vmargs: 说明后面是VM的参数
-Xms40m: 虚拟机占用系统的最小内存
-Xmx256m: 虚拟机占用系统的最大内存
-XX:PermSize:最小堆大小。一般报内存不足时,都是说这个太小,
堆空间剩余小于5%就会警告,建议把这个稍微设
大一点,不过要视自己机器内存大小来设置
-XX:MaxPermSize:最大堆大小。这个也适当大些
-Xmx512M的5%为25.6M,理论上要求-Xmx的数值与-XX:MaxPermSize必须大于25.6M
把里面的参数改为
-vmargs
-Xms128M
-Xmx512M
-XX:PermSize=128M
-XX:MaxPermSize=256M
便可以解决内存不足的问题了,而仅仅改-Xms和-Xmx是不太合理的。
别问我这个是什么连接:http://idea.lanyus.com/
phpstorm有一大堆的骚操作,
例如git,svn版本控制,sftp,ftp,ssh,http client,代码追踪,断点,主题自定义…
No input file specified.(apache)
phpstudy是win系统下面一个php环境一体包,可以通过这个工具轻松实现搭建php等网站。作为动态网站,采用php等页面暴露到公网依然存在一定安全隐患,一般可通过伪静态来隐藏真实地址。
在apache扩展菜单里面,找到rewrite_module模块,把它启用。勾上
也可以直接打开apache配置文件里面,“/apache/conf/” 下的 httpd.conf 文件,通过查找“LoadModule rewrite_module”,把前面的”#”号删除
查找AllowOverride None,替换为 AllowOverride All (有多处设置,需要替换)然后保存
https://blog.csdn.net/xgocn/article/details/79334296
即可。
apache No input filespecified,今天是我们配置apache RewriteRule时出现这种问题,解决办法很简单如下
apache No input filespecified,今天是我们配置apache RewriteRule时出现这种问题,解决办法很简单如下
打开.htaccess 在RewriteRule 后面的index.php教程后面添加一个“?”
完整代码如下
.htaccess
RewriteEngine on
RewriteCond $1 !^(index.php|images|robots.txt)
RewriteRule ^(.*)$ /index.php?/$1 [L]
如果是apache服务器出问题,看看是不是的Apache 把 .php 后缀的文件解析哪里有问题了。
总结
Apache 将哪些后缀作为 PHP 解析。例如,让 Apache 把 .php 后缀的文件解析为PHP。可以将任何后缀的文件解析为 PHP,只要在以下语句中加入并用空格分开。这里以添加一个 .phtml 来示例。
AddType application/x-httpd-php .php .phtml
为了将 .phps教程作为 PHP 的源文件进行语法高亮显示,还可以加上:
AddType application/x-httpd-php-source .phps
用通常的过程启动 Apache(必须完全停止 Apache 再重新启动,而不是用 HUP 或者USR1 信号使 Apache 重新加载)。
APACHE服务器出现No input file specified.解决方案 thinkcmf程序默认的.htaccess里面的规则:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
“No input file specified.”,是没有得到有效的文件路径造成的。
修改伪静态规则,如下:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>
就是正则结果“/$1”前面多加了一个“?”号。。
作业外包 学生管理系统
地址: https://pan-yz.chaoxing.com/views/external/thumb.html?name=4.%E5%AE%9E%E4%B9%A0%E9%A1%B9%E7%9B%AE1-%E5%AD%A6%E7%94%9F%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F.pdf&pagenum=43&thumb=https%3A%2F%2Fs3.ananas.chaoxing.com%2Fdoc%2F75%2Fc0%2Ff6%2Fb591b59d4ba8ad7e46aa996d673f3f1e%2Fthumb%2F
PHP实战-在线聊天室
- Workerman,高性能socket服务框架
- 纯PHP开发的开源高性能的PHP socket 服务框架
- 更底层更通用的socket服务框架
- 开发tcp代理、T子代理、做游戏服务器、邮件服务器、ftp服务器、甚至开发一个php版本的redis、php版本的数据库、php版本的nginx、php版本的php-fpm等等
- 类似一个PHP版本的nginx,核心也是多进程+Epoll+非阻塞IO。
- Workerman每个进程能维持上万并发连接
- 本身常住内存,不依赖Apache、nginx、php-fpm这些容器,拥有超高的性能
- 同时支持TCP、UDP、UNIXSOCKET,支持长连接,支持Websocket、HTTP、WSS、HTTPS等通讯协以及各种自定义协议
- 拥有定时器、异步socket客户端、异步Mysql、异步Redis、异步Http、异步消息队列等众多高性能组件
- 做即时通讯重要的就是保持长连接,实现客户端和客户端的通讯
简单实例