当前位置:网站首页>php组件漏洞
php组件漏洞
2022-08-02 09:33:00 【鲨鱼饿死了】
前言:
composer
环境搭建
https://blog.csdn.net/weixin_29528865/article/details/116255667
https://www.phpcomposer.com/
git客户端 (composer 在安装第三方库时也要用到git,所以也要优先安装git.)
composer安装包
composer 需要选择php.exe,对应php环境所使用的php.exe;
安装php工具箱后, composer 安装时选择如下, 选择php环境所用的php版本下的php.exe即可
在PHP项目中使用 Composer 2.0
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
举例,假设项目要使用 monolog 日志工具,就需要在composer.json里告诉composer:
{
"require": {
"monolog/monolog": "1.*"
}
}
之后执行:
php composer.phar install
安装完,怎么使用呢?
Composer自动生成了一个autoload文件,你只需要引用它
require '/path/to/vendor/autoload.php';
然后就可以非常方便的去使用第三方的类库了,是不是感觉很棒啊!对于我们需要的monolog,就可以这样用了:
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('/path/to/log/log_name.log', Logger::WARNING));
// add records to the log
$log->addWarning('Foo');
$log->addError('Bar');
在这个过程中,Composer做了什么呢?
它生成了一个autoloader,再根据各个包自己的autoload配置,从而帮我们进行自动加载的工作。
使用composer命令加载ThinkPHP框架下vendor中的第三方类库
1、首先下载需要的第三方类库,放在TP框架下的vendor文件夹下
2、给第三方类库SDK写上命名空间,命名空间为该类库的文件夹对应的名字
3、在composer.json文件中添加需要加载的第三方类库
"autoload": {
"psr-4": {
"sina\\": "vendor/sina"
}
},
sina代表命名空间,后面的是路径,
4、打开cmd,进入到项目根目录,使用composer命令加载第三方类库,执行composer dump-autoload
,如下,成功即可
5、使用
在使用的地方直接用use引用需要的第三方类库即可。
要使用第3条中的 "sina\\": "vendor/sina"
(sina为命名空间,vendor/sina 为对应的文件位置),和 第4条中的命令才可以使用use引入,否则只能使用vendor()方法引入
php的rpc框架详解
https://blog.csdn.net/veloi/article/details/111636500
phprpc的简单使用
远程调用框架(Remote Procedure Call)
“
通常我们调用一个php中的方法,比如这样一个函数方法: localAdd(10, 20),localAdd方法的具体实现要么是用户自己定义的,要么是php库函数中自带的,也就说在localAdd方法的代码实现在本地,它是一个本地调用!远程调用意思就是:被调用方法的具体实现不在程序运行本地,而是在别的某个远程地方。
”
远程调用原理:
比如 A (client) 调用 B (server) 提供的remoteAdd方法:
1、首先A与B之间建立一个TCP连接;
2、然后A把需要调用的方法名(这里是remoteAdd)以及方法参数(10, 20)序列化成字节流发送出去;
3、B接受A发送过来的字节流,然后反序列化得到目标方法名,方法参数,接着执行相应的方法调用(可能是localAdd)并把结果30返回;
4、A接受远程调用结果,输出30。
RPC框架就是把以上这几点细节给封装起来,给用户暴露简单友好的API使用。
远程调用的好处:
解耦:当server需要对方法内实现修改时,client完全感知不到,不用做任何变更;这种方式在跨部门,跨公司合作的时候经常用到,并且方法的提供者我们通常称为:服务的暴露
。
php中流行的RPC框架有哪些呢?
先列举下: phprpc,yar, thrift, gRPC, swoole, hprose
RPC原理是一样的,都是Client/Server模式,只是每个框架的使用方式不一样而已。
主要讲解一下 phprpc 和 yar 。
phprpc
下载,解压
有很多文件和文件夹,结构如下:
其中有dhparams和pecl是文件夹,pecl中的是php的xxtea
扩展,按照官网的描述,可以安装也可以不安装,不安装phprpc也是可以运行的。但是如果你需要更快的加密处理能力,可以安装下。
安装步骤如下,先将pecl下的xxtea文件夹复制到php源码的etx目录:/lamp/php-5.4.11/ext下。然后用phpize进行扩展重新编译。
[[email protected] /]# cd /lamp/php-5.4.11/ext/xxtea
[[email protected] xxtea]# /usr/local/php/bin/phpize
[[email protected] xxtea]# ./configure --enable-xxtea=shared --with-php-config=/usr/local/php/bin/php-config
编译完成,提示xxtea.so已经在/usr/local/php/lib/php/extensions/no-debug-zts-20100525/xxtea.so
下了。
下面,我们就需要在php.ini的最后将这个xxtea.so加上:
[[email protected] /]# vi /usr/local/php/etc/php.ini
[xxtea]
extension=xxtea.so
加好了后,我们需要重启下apache或者php-fpm
重启apache
[[email protected] /]# /usr/local/apache/bin/apachectl restart
平滑重启php-fpm
kill -USR2 cat /usr/local/php/var/run/php-fpm.pid
重启完毕后,打开phpinfo()页面,搜索一下,应该就能够看到xxtea了。
使用:
服务端:server.php
<?php
include ("phprpc/phprpc_server.php");
function HelloWorld() {
return 'Hello World!';
}
$server = new PHPRPC_Server();
$server->add('HelloWorld');
$server->start();
客户端:client.php
<?php
include ("phprpc/phprpc_client.php");
$client = new PHPRPC_Client('http://127.0.0.1/server.php');
echo $client->HelloWorld();
?>
执行client.php,输出Hello Word
!
yar
使用纯C编写的用于php的扩展,效率应该是蛮高的,而且支持异步并行
下载 :http://pecl.php.net/package/yar
边栏推荐
- Facebook's automated data analysis solution saves worry and effort in advertising
- The love-hate relationship between C language volatile keyword, inline assembly volatile and compiler
- 【微信小程序】本地服务页面案例实现
- The perceptron perceptron of Li Hang's "Statistical Learning Methods" notes
- 中国发布丨滴滴因违反网络安全法等被罚80.26亿元!调查细节公布
- The k-nearest neighbor method in the notes of Li Hang's "Statistical Learning Methods"
- 【Redis】Jedis
- LeetCode_2357_使数组种所有元素都等于零
- Jetpack Compose 中的状态管理
- Daily practice of dynamic programming (2)
猜你喜欢
【微信小程序2】事件绑定
HikariCP database connection pool, too fast!
AutoJs学习-密码生成器
裁员趋势下的大厂面试:“字节跳动”
要长续航还是更安全?海豹与深蓝SL03对比导购
Supervised learning of Li Hang's "Statistical Learning Methods" Notes
Jenkins--部署--3.1--代码提交自动触发jenkins--方式1
Navicat连接MySQL时弹出:1045:Access denied for user ‘root’@’localhost’
【技术分享】OSPFv3基本原理
Openwrt_树莓派B+_Wifi中继
随机推荐
单机部署flink,创建oracle19c rac的连接表时报错 ORA-12505 ,怎么回事?
leetcode:81. 搜索旋转排序数组 II
LeetCode_2358_分组的最大数量
关于缓存数据的探讨
The love-hate relationship between C language volatile keyword, inline assembly volatile and compiler
ABAP 和json转换的方法
Using the TCP protocol, will there be no packet loss?
The use of thread pool and analysis of ThreadPoolExecutor source code
ConvNeXt论文及实现
李航《统计学习方法》笔记之监督学习Supervised learning
AlterNET Studio用户界面设计功能扩展
Re22:读论文 HetSANN An Attention-based Graph Neural Network for Heterogeneous Structural Learning
The 17th day of the special assault version of the sword offer
Golang ORM框架 — GORM
node制作一个视频帧长图生成器
spark:热门品类中每个品类活跃的SessionID统计TOP10(案例)
2022牛客暑期多校训练营4(ADHKLMN)
AutoJs学习-实现谢尔宾斯基三角
system_error错误处理库学习
在全志V853开发板试编译QT测试