“小编整理了一份计算机类的资料,包含打造PHP程序员简历、java、Linux、Go语言等。获取方式:关注公众号:爱码仕,回复:1024,就可以获得这份超级大礼!
echo implode(‘’,[‘a’, ‘b’, ‘c’]);
echo join([‘a’, ‘b’, ‘c’],'');
$str=‘aAbB’;
echo strpos($str,"A");
(1)使用函数
echo strrev("Hello World!");
(2) 不使用函数
$s = '1234567890';
$o = '';
$i = 0;
while(isset($s[$i]) && $s[$i] != null) {
$o = $s[$i++].$o;
}
echo $o;
function F($n){
if($n==0){
return 1;
}else{
return $n* F($n-1);
}
}
var_dump(F(5);
//方法一
//ucfirst() 函数:把字符串中的首字符转换为大写,字符串参数为string。
function Fun($str){
if(isset($str) && !empty($str)){
$newStr='';
if(strpos($str,'-')>0){
$strArray=explode('-',$str);
$len=count($strArray);
for ($i=0;$i<$len;$i++){
$newStr.=ucfirst($strArray[$i]);
}
}
return $newStr;
}
}
//方法二
//ucwords() 函数:把字符串中每个单词的首字符转换为大写。该函数是二进制安全的。
function Fun($str){
$arr1=explode('_',$str);
$str = implode(' ',$arr1);
return ucwords($str);
}
var_dump(Fun("fang-zhi-gang")); //FangZhiGang
sort($array); //数组升序排序
rsort($array); //数组降序排序
asort($array); //根据值,以升序对关联数组进行排序
ksort($array); //根据建,以升序对关联数组进行排序
arsort($array); //根据值,以降序对关联数组进行排序
krsort($array); // 根据键,以降序对关联数组进行排序
$_SERVER["REMOTE_ADDR"]
$_SERVER["SERVER_ADDR"]
include与require除了在处理引入文件的方式不同外,最大的区别就是:
- include在引入不存在的文件时,产生一个警告且脚本还会继续执行
- require则会导致一个致命性错误且脚本停止执行。
<?php
include 'hello.php';
echo 'world';
?>
//如果hello.php不存在,echo ‘world’这句是可以继续执行的。
<?php
require 'hello.php';
echo 'world';
?>
//如果hello.php不存在,echo ‘hello’这句是不会执行的,到require时就停止了。
if(FALSE){
include 'file.php'; //file.php不会被引入
}
if(FALSE){
require 'file.php'; //file.php将会被引入
}
//include有返回值,而require没有
$retVal = include(’somefile.php’);
if(!empty($retVal)){
echo "文件包含成功";
}else{
echo "文件包含失败";
}
//可以用include_once,require_once代替,
//表示文件只引入一次,引入之后则不在引入,作为优化点
list($b,$a)=array($a,$b);
var_dump($a,$b);
//方法一
function get_extension($file){
return substr(strrchr($file,'.'), 1);
}
//strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。
//方法二
function get_extension($file){
return end(explode('.', $file));
}
echo get_extension('fangzhigang.png'); //png
//end() 函数将内部指针指向数组中的最后一个元素,并输出。
$a = date("Y-m-d H:i:s", strtotime("-1 days"));
public function authenticationApi($data,$url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
//输出格式可以转为数组形式的json格式
$tmpInfo = curl_exec($ch);
curl_close($ch);
return $tmpInfo;
}
Header("HTTP/1.1 404 Not Found");
Composer是PHP的一个依赖(dependency)管理工具,在我们的项目中声明所依赖的外部工具库 (libraries),Composer 可以帮助我们安装这些依赖的库文件。Composer可以全局安装也可以局部安装,默 认不是全局安装的,是基于指定项目的某个目录进行安装的。
用户请求进来,先加载配置文件,框架初始化,然后匹配路由地址,寻找到对应的controller的文件地址,引入加载文件,实例化controller,根据路由匹配得到的方法和参数,调用并传参到方法,此处可能需要读取db,model层则负责数据库存取,提供封装好的方法给到controller层调用,controller层得到数据后,通过引入 view 层文件,传递数据到view层,渲染html模板后输出。
Session用于保存每个用户的专用信息,变量的值保存在服务器端,通过SessionID来区分不同的客户。
标量类型声明
返回值类型声明
语法糖:null合并运算符,太空船操作符
define允许定义常量数组,
匿名类,
新增了一些函数intdiv(),随机函数,
1、php7.0相比于php5.6的新特性
参考:http://php.net/manual/zh/migration70.new-features.php
2、php7.1相对于php7.0的新特性
参考:http://php.net/manual/zh/migration71.new-features.php
3、php7.2相对于php7.1的新特性
参考:http://php.net/manual/zh/migration72.new-features.php
JIT 和 opcache 区别
所谓单例模式,即在应用程序中最多只有该类的一个实例存在,一旦创建,就会一直存在于内存中! 单例设计模式常应用于数据库类设计,采用单例模式,只连接一次数据库,防止打开多个数据库连接。 单例模式的编写遵循三私一公,代码如下:
<?php
class Database {
private $instance;
private function__construct() {
// Do nothing.
}
private function__clone() {
// Do nothing.
}
public static function getInstance() {
if (!(self::$instance instanceof self)) {
self::$instance = new self();
}
return self::$instance;
}
}
$a = Database::getInstance();
$b = Database::getInstance();
// true var_dump($a === $b);
关键词:使用了引用计数器
PHP5.3.3开始集成了php-fpm 模块,不再是第三方的包了。PHP-FPM 提供了更好的 PHP 进程管理方式,可以有效控制内存和进程、可以平滑重载 PHP 配置。
重点:php-fpm是fastcgi的实现。
多进程同步阻塞模式
cgi
cgi 是一个 web server 与 cgi 程序(这里可以理解为是 php 解释器)之间进行数据传输的协议,保证了传递的是标准数据。
php-cgi
php-cgi 是 php 解释器。他自己本身只能解析请求,返回结果,不会管理进程。php-fpm 是调度管理 php-cgi 进程的程序。
Fastcgi
Fastcgi 是用来提高 cgi 程序(php-cgi)性能的方案/协议。
cgi程序的性能问题在哪呢?
"PHP解析器会解析 php.ini 文件,初始化执行环境",标准的CGI对每个请求都会执行这些步骤,所以处理的时间会比较长。Fastcgi会先启一个 master,解析配置文件,初始化执行环境,然后再启动多个 worker。当请求过来时,master 会传递给一个 worker,然后立即可以接受下一个请求。这样就避免了重复劳动,效率自然提高。而且当 worker 不够用时,master 可以根据配置预先启动几个 worker 等着;当然空闲 worker 太多时,也会停掉一些,这样就提高了性能,也节约了资源。这就是 Fastcgi 的对进程的管理。
php-fpm
fastcgi 是一个方案或者协议,php-fpm 就是 FastCGI 的后端实现,也就是说,进程分配和管理是 FPM来 做的。官方对 FPM 的解释:【Fastcgi Process Manager】【Fastcgi 进程管理器】。
php-fpm 的管理对象是 php-cgi,他负责管理一个进程池,来处理来自 Web 服务器的请求。对于php.ini 文件的修改,php-cgi 进程是没办法平滑重启的,有了 php-fpm 后,就把平滑重启成为了一种可能,php-fpm 对此的处理机制是新的 worker 用新的配置,已经存在的 worker 处理完手上的活就可以歇着了,通过这种机制来平滑过度的。
修改php.ini之后,php-cgi 进程的确是没办法平滑重启的。php-fpm 对此的处理机制是新的 worker用新的配置,已经存在的 worker 处理完手上的活就可以歇着了,通过这种机制来平滑过度。
看下nginx的配置文件:
Nginx中fastcgi_pass 的配置:
location ~ .php$ {
root /home/wwwroot;
fastcgi\_pass 127.0.0.1:9000;
#fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
#fastcgi_pass unix:/tmp/php-cgi.sock;
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
因为nginx不能直接执行 php,所以需要借用 fastcgi 模块,和 php-fpm 进行通信。有两种方式;
方式1:
php-fpm.conf: listen = 127.0.0.1:9000
nginx.conf: fastcgi_pass 127.0.0.1:9000;
方式2:
php-fpm.conf: listen = /tmp/php-fpm.sock
nginx.conf: fastcgi_pass unix:/tmp/php-fpm.sock;
值得一提的是,MySQ命令行客户端连接mysqld服务也类似有这两种方式:
mysql -uroot -p --protocol=socket --socket=/tmp/mysql.sock
mysql -uroot -p --protocol=tcp --host=127.0.0.1 --port=3306
会初始化创建一部分worker,在运行过程中,动态调整worker数量,最大worker数受 pm.max_children 和 process.max
listen = 127.0.0.1:9001
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 6
启动固定大小数量的worker,也有1s的定时器,用于统计进程的一些状态信息,例如空闲worker个数,活动 worker个数
pm.max_children = 10 #必须配置这个参数,而且只有这个参数有效
php-fpm启动的时候不会启动worker进程,按需启动worker,有链接进来后,才会启动
listen = 127.0.0.1:9001
pm = ondemand
pm.process_idle_timeout = 60
pm.max_children = 10
连接到来时(只有链接,不没有数据也会创建,telnet也会创建),创建新worker进程,worker进程数的创建收 max_children 设置限制,也受限于全局的 process.max 设置(三种模式都受限此,下文中有全局配置项讲解),如果空闲时间超过了 process_idle_timeout 的设置就会销毁 worker 进程
动态建立进程个数
N+20% 到 M/m之间
N是cpu核数,M是内存,m是每个php进程内存数
静态进程个数
M/(m*1.2)
pm.max_requests, 设置最大请求数,达到这个数量以后,会自动长期worker进程,繁殖内存意外增长
注意:PHP程序在执行完成后,或多或少会有内存泄露的问题。这也是为什么开始的时候一个 php-fpm 进程只占用 3M 左右内存,运行一段时间后就会上升到 20-30M。所以需要每个 worker 进程处理完一定的请求后,销毁重新创建。
cpu密集型的 pm.max_children 不能超过 cpu 内核数,但是 web 服务属于 IO 密集型的,可以将 pm.max_children 的值设置大于 cpu 核数。
在负载较高的服务器上定时重载php-fpm,reload可以平滑重启而不影响生产系统的php脚本运行,每15分钟 reload一次,定时任务如下:
0-59/15 * * * * /usr/local/php/sbin/php-fpm reload
pm.max_requests = 1024
Laravel 是单入口文件的mvc重型框架,里面集成了消息队列,orm,ioc等功能模块。laravel的生命周期简述如下:
protected $app;
protected $router;
protected $bootstrappers \= \[
\\Illuminate\\Foundation\\Bootstrap\\LoadEnvironmentVariables::class,
# 加载 .env 中的配置信息
\\Illuminate\\Foundation\\Bootstrap\\LoadConfiguration::class,
# 加载 config 目录中所有配置文件的配置信息
\\Illuminate\\Foundation\\Bootstrap\\HandleExceptions::class,
# 异常处理
\\Illuminate\\Foundation\\Bootstrap\\RegisterFacades::class,
# 注册门面
\\Illuminate\\Foundation\\Bootstrap\\RegisterProviders::class,
# 注册Service Providers
\\Illuminate\\Foundation\\Bootstrap\\BootProviders::class,
# 注册启动器
\];
Middleware ,在 Kernel 以及它的基类 Illuminate\Foundation\Http\Kernel 中定义了一系列的 middlewares,借助这些中间件,就可以完成对用户请求的过滤和安全检查等等功能。
public function __construct(Application $app, Router $router){
$this->app = $app;
$this->router = $router;
$route->middlewarePriority = $this->middlewarePriority;
foreach ($this->middlewareGroups as $key => $middleware) {
$router->middlewareGroup($key, $middleware);
}
foreach ($this->routeMiddleware as $key => $middleware) {
$router->aliasMiddleware($key, $middleware);
}
}
中间件的作用:所有请求在处理前需要经过的 HTTP中间件,这些中间件处理 HTTP 会话的读写、判断应用是否处于维护模式、验证CSRF 令牌等等。
php 是通过 c 语言进行实现,但是 c 语言为强类型,那 php 的弱语言类型是通过 PHP 底层设计了一个zval(“Zendvalue”的缩写)的数据结构,可以用来表示任意类型的 PHP 值。通过共同体实现弱类型变量声明。
typedef struct _zval_struct zval;
...
struct _zval_struct {
/* Variable information */
zvalue_value value; /* value */
zend_uint refcount__gc;
zend_uchar type; /* active type */
zend_uchar is_ref__gc;
};
PHP使用这个结构来存储变量的所有数据。和其他编译性静态语言不同, PHP在存储变量时将PHP用户空间的变 量类型也保存在同一个结构体中。这样我们就能通过这些信息获取到变量的类型。
zval结构体中有四个字段,其含义分别为:
2 . 变量类型: zval结构体的type字段就是实现弱类型最关键的字段了,type的值可以为: IS_NULL、IS_BOOL、IS_LONG、IS_DOUBLE、IS_STRING、IS_ARRAY、IS_OBJECT和IS_RESOURCE 之一。 从字面上就很好理解,他们只是类型的唯一标示,根据类型的不同将不同的值存储到value字段。 除此之外,和他们定义在一起的类型还有 IS_CONSTANT 和 IS_CONSTANT_ARRAY。 这和我们设计数据库时的做法类似,为了避免重复设计类似的表,使用一个标示字段来记录不同类型的数据。
本文由哈喽比特于2年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/kUWFVwk5H39bB48KPUhwzg
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。