PHP部署、nginx与PHP的整合、PHP动态添加模块
文章目录
- 前言
- 一、基本知识
- 1.php介绍
- 2.PHP能做什么
- 3.web工作原理
- 4.PHP脚本主要用于领域
- 5.php其他相关信息
- 6.memcache介绍
- 二、php的源码安装
- 1.php安装
- 2.php配置
- 三、nginx与php整合
- 四、php动态扩展模块(memcache模块)
前言
一、基本知识
1.php介绍
官方下载路径 http://www.php.net
php是一种服务器端的 HTML 脚本/编程语言,是一种简单的、面向对象的、解释型的、健壮的、安全的、性能非常之高的、独立于架构的、可移植的、动态的脚本语言。是一种广泛用于 Open Source(开放源代码)的尤其适合 Web 开发并可以嵌入 HTML 的多用途脚本语言。它的语法接近 C,Java 和 Perl,而且容易学习。该语言让 Web 开发人员快速的书写动态生成的网页。
PHP含义
早期PHP:Personal HomePage,Rasmus Lerdorf
后期PHP:PHP:Hypertext Preprocessor,超文本预处理器
PHP是一种脚本语言
编程语言:在执行前需要先进行编译的语言
脚本语言:是一种解释型语言
2.PHP能做什么
PHP什么都能做,但是很多情况下需要借助其他插件。
PHP是做动态网站的。(web)
web1.0:静态网站(都是请求已经存在的静态页,不需要和数据库进行任何交互),通常请求文件都是以路径+文件名.html/htm
web2.0:动态网站,用户能够与服务器进行交互(服务器能够与数据库进行交互)
PHP负责处理用户提交的请求,与数据库进行关联,由PHP操作数据库进行数据的交互。
3.web工作原理
网站:多个网页组成的集合。
用户访问:http://www.itcast.cn/teacher.html(URL:互联网的绝对路径)
网站管理员:一个网站就是一个文件夹(本地的绝对路径)
静态页的请求:http://localhost/index.html
请求步骤:
1.用户在浏览器中输入需要访问的网站的域名以及具体要请求的网页文件
2.域名解析:先找本地hosts文件,再找互联网上的DNS
3.web服务器接收请求,获取请求文件index.html
4.web服务器返回index.html
5.浏览器解析html代码,显示数据
动态页的请求:http://localhost/index.php
请求步骤:
1.用户在浏览器中输入需要访问的网站的域名以及具体要请求的网页文件
2.域名解析:先找本地hosts文件,再找互联网上的DNS
3.web服务器接收请求,获取请求文件index.php
4.将index.php文件交给php引擎处理
5.php引擎解析php代码,如果要连接数据库的话就调用mysql扩展,去操作数据库,最终解析完变成html文件
6.php引擎将生成的html文件交给Apache
7.web服务器返回index.php得到的最终html文件
8.浏览器解析html代码,显示数据
4.PHP脚本主要用于领域
服务端脚本
这是PHP最传统,也是最主要的目标领域。开展这项工作需要具备以下三点:PHP解析器(CGI或者无服务器模块)、web服务器和web浏览器。需要在运行web服务器时,安装并配置PHP,然后,可以用web浏览器来访问PHP程序的输出,即浏览服务器端的PHP页面。如果只是实验PHP编程,所有的这些都可以运行在自己家里的电脑中。
命令行脚本
可以编写一段PHP脚本,并且不需要任何服务器或者浏览器来运行它。通过这种方式,仅仅需要PHP解析器来执行。这种用法对于依赖cron(Unix或者Linux环境)或者Task Scheduler(Windows环境)的日常运行脚本来说是理想的选择。这些脚本也可以用来处理简单的文本。
编写桌面应用程序
对于有这图形界面的桌面应用程序来说,PHP或许不是一种最好的语言,但是如果用户非常精通PHP,并且希望在客户端应用程序中使用PHP的一些高级特性,可以利用PHP-GTK来编写这些程序。用这种方法,还可以编写跨平台的应用程序。PHP-GTK是PHP的一个扩展,在通常发布的PHP包中并不包含它。
5.php其他相关信息
PHP能够在所有的主流操作系统上使用,包括Linux、Unix的各种变种(包括HP-UX、Solaris和OpenBSD)、Windows、Mac OS X 、RiSC OS等。对于大多数的服务器,PHP提供了一个模块;还有一些PHP支持CGI标准,使得PHP能够作为CGI处理器来工作。
使用PHP,可以自由的选择操作系统和web服务器。同时,还可以在开发时选择使用面向过程和面向对象,或者两者混合的方式来开发。PHP4不支持OOP的所有的标准,PHP5弥补了PHP4的这一弱点,引入了完全的对象模型。
使用PHP,并不局限于输出HTML。PHP还能被用来动态输出图像、PDF文件甚至Flash动画(使用libswf和Ming)。还能够非常简便的输出文本,例如XHTML以及任何其他形式的XML文件。PHP能够自动生成这些文件,在服务端开辟出一块动态内容的缓存,可以直接把它们打印出来,或者将它们存储到文件系统中。
PHP最强大最显著的特性之一,是它支持很大范围的数据库。使用任何针对某数据库的扩展(例如mysql)编写数据库支持的网页非常简单,或者使用抽象层如PDO,或者通过ODBC扩展连接到任何支持ODBC标准的数据库。其他一些数据库也可能会用cURL或者sockets,例如CouchDB。
PHP还支持利用诸如LDAP、IMAP、SNMP、NNTP、POP3、HTTP 、COM(Windows环境)等不计其数的协议的服务。还可以开放原始网络端口,使得任何其他的协议能够协同工作。PHP支持和所有的web开发语言之间的WDDX复杂数据交换。关于相互连接,PHP已经支持了对Java对象的即时连接,并且可以透明的将其作用PHP对象。
PHP具有极其有效的文本处理特性,包括Perl兼容正则表达式(PCRE)以及许多扩展和工具可用于解析和访问XML文档。PHP将所有的XML功能标准化于坚实的libxml2扩展,并且还增加了SimpleXML,XmlReader以及XMLWriter支持以扩充其功能。
6.memcache介绍
MemCache是一个自由、源码开放、高性能、分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串、对象等)所使用的key-value存储,数据可以来自数据库调用、API调用,或者页面渲染的结果。MemCache设计理念就是小而强大,它简单的设计促进了快速部署、易于开发并解决面对大规模的的许多难题,而所开放的API使得MemCache能用于Java、C/C++/C#、Perl、Python、PHP、Ruby等大部分流行的程序语言。
Memcache官方网站:memcached - a distributed memory object caching system
核心优化概述
什么是优化:以更小的资源支持更大负载网站的运行,以小博大。
思路:尽量减少用户等待时间,节省系统资源开销,节省带宽使用。
优化的三方面:Memcache内存缓存技术、静态化技术、mysql优化
二、php的源码安装
1.php安装
官方下载路径 http://www.php.net
[root@server1 ~]# yum install -y bzip2 systemd-devel libxml2-devel sqlite-devel libpng-devel libcurl-devel ##解压软件 ##systemd-devel解决--with-fpm-systemd依赖性##一般通过yum search xml找--enable-xml依赖性[root@server1 ~]# yum install -y oniguruma-6.8.2-1.el7.x86_64.rpm oniguruma-devel-6.8.2-1.el7.x86_64.rpm通过阿里云或者清华下载站下载软件包##也是解决依赖性,两个包需同时安装
[root@server1 ~]# tar xf php-7.4.12.tar.bz2 ##解压
[root@server1 ~]# cd php-7.4.12/
[root@server1 php-7.4.12]# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc
--enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-curl --with-iconv --with-mhash --with-zlib
--with-openssl --enable-mysqlnd --with-mysqli --with-pdo-mysql --disable-debug --enable-sockets --enable-soap
--enable-inline-optimization --enable-xml --enable-ftp --enable-gd --enable-exif --enable-mbstring
--enable-bcmath --with-fpm-systemd
--enable-soap ##动态模块,以上策略根据公司需求添加
[root@server1 php-7.4.12]# make
[root@server1 php-7.4.12]# make install ##完成编译三部曲


2.php配置
编译完成之后我们进行启动
首先将php服务复制到系统默认的启动目录中
[root@server1 php-7.4.12]# cd /usr/local/php/etc
将default模板文件复制为系统能够识别的conf文件
[root@server1 etc]# cp php-fpm.conf.default php-fpm.conf
[root@server1 etc]# vim php-fpm.conf
去掉注释
pid = run/php-fpm.pid
[root@server1 etc]# cd php-fpm.d/
拷贝主配置文件,但不用修改(监听端口在此目录可修改)
[root@server1 php-fpm.d]# cp www.conf.default www.conf
[root@server1 ~]# cd php-7.4.12/
将php.ini生产环境复制到系统的默认目录下
[root@server1 php-7.4.12]# cp php.ini-production /usr/local/php/etc/php.ini
[root@server1 php-7.4.12]# vim /usr/local/php/etc/php.ini
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Aisa/Shanghai #修改时区
[root@server1 php-7.4.12]# cd sapi/fpm
[root@server1 fpm]# cp php-fpm.service /usr/lib/systemd/system
== 复制到启动脚本目录==
关闭php服务的下面这个选项,因为开启之后会将许多目录设置为只读,由于系统要写入文件来开启服务,所以我们要给他添加权限,不能让它只读
[root@server1 fpm]# vim /usr/lib/systemd/system/php-fpm.service
注释此行
#ProtectSystem=full
[root@server1 fpm]# systemctl daemon-reload
[root@server1 fpm]# systemctl start php-fpm.service
测试:启动服务,查看9000端口,发现存在,说明服务已经启动
[root@server1 fpm]# netstat -antlp|grep :9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 24709/php-fpm: mast
[root@server1 fpm]# systemctl enable php-fpm
一般我们不会直接访问9000端口,因为并发能力较差,且nginx并发性强,所以需要nginx整合后使用
三、nginx与php整合
[root@server1 sapi]# cd /usr/local/nginx/conf/
[root@server1 conf]# vim nginx.conf ##对nginx.conf中的内容进行修改
...
location ~ \.php$ {root html;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;include fastcgi.conf;}
[root@server1 conf]# nginx -s reload

nginx判断访问的地址为.php结尾,会访问PHP
在html下新建一个index.php,在里边写入函数(此函数用来查看PHP信息),我们在浏览器访问我们这个页面就可以看到相应的内容
[root@server1 conf]# vim /usr/local/nginx/html/index.php
<?php
phpinfo()
?>

测试: http://192.168.117.11/index.php

rpm安装和源码安装PHP只能使用其中之一
添加php环境变量
我们新加入一个memcache模块,当我们想要使用phpize脚本的时候会发现用不了,但是它php里边存在,这是因为系统的环境变量没有检测到它,我们就要修改环境变量
[root@server1 ~]# vim .bash_profile
# .bash_profile# Get the aliases and functions
if [ -f ~/.bashrc ]; then. ~/.bashrc
fi# User specific environment and startup programsPATH=$PATH:$HOME/bin:/usr/local/php/binexport PATH[root@server1 ~]# source .bash_profile[root@server1 ~]# which php ##查看环境变量,看到加入成功就可以继续
/usr/local/php/bin/php


四、php动态扩展模块(memcache模块)
我们新加入一个memcache模块,当我们想要使用phpize脚本的时候会发现用不了,但是它php里边存在,这是因为系统的环境变量没有检测到它,我们就要修改环境变量
memcache的作用是做高速缓存,因为它是运行在物理内存中,所以我们要是从memcache中取数据,那么速度会比从数据库中取数据快
当我们进行压测时候会发现,这种方式来处理数据效率会非常高,几乎没有报错出现
[root@server1 ~]# tar xf memcache-4.0.5.2.tgz
[root@server1 ~]# cd memcache-4.0.5.2/
[root@server1 memcache-4.0.5.2]# yum install -y autoconf ##安装自动配置[root@server1 memcache-4.0.5.2]# phpize
Configuring for:
PHP Api Version: 20190902
Zend Module Api No: 20190902
Zend Extension Api No: 320190902[root@server1 memcache-4.0.5.2]# ./configure[root@server1 memcache-4.0.5.2]# make
[root@server1 memcache-4.0.5.2]# make install
[root@server1 memcache-4.0.5.2]# ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/
memcache.so opcache.a opcache.so[root@server1 memcache-4.0.5.2]# php -m |grep memcache ##没有memcache模块,刚刚的操作只是静态的cp至目录[root@server1 memcache-4.0.5.2]# cd /usr/local/php/etc
[root@server1 etc]# vim php.ini
extension=memcache #添加memcache模块,让memcache可读,910行左右[root@server1 etc]# systemctl reload php-fpm
[root@server1 etc]# php -m |grep memcache ##已有memcache模块
memcache[root@server1 etc]# cd /root/memcache-4.0.5.2
[root@server1 memcache-4.0.5.2]# cp example.php memcache.php /usr/local/nginx/html/##example.php测试文件;memcache.php为监控页面,测试时可以看到内存的缓存状态[root@server1 memcache-4.0.5.2]# cd /usr/local/nginx/html/
[root@server1 html]# yum install -y memcached
[root@server1 html]# systemctl enable --now memcached
[root@server1 html]# netstat -antlp|grep :11211
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 27984/memcached
tcp6 0 0 :::11211 :::* LISTEN 27984/memcached[root@server1 memcache-4.0.5.2]# cd /usr/local/nginx/html/
[root@server1 html]# vim memcache.php ##为监控页面,测试时可以看到内存的缓存状态$VERSION='$Id$';define('ADMIN_USERNAME','admin'); // Admin Username
define('ADMIN_PASSWORD','westos'); // Admin Password
define('DATE_FORMAT','Y/m/d H:i:s');
define('GRAPH_SIZE',200);
define('MAX_ITEM_DUMP',50);$MEMCACHE_SERVERS[] = 'localhost:11211'; // add more as an array
#$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array测试:
访问http://192.168.117.11/example.php,多刷新几次页面
查看缓存命中状态
http://192.168.117.11/memcache.php

下图可以查看缓存命中率,都是从内存命中


访问index.php和example.php进行对比
http://192.168.117.11/example.php页面的代码逻辑是访问memcache,不会去读盘,直接从内存里命中
http://192.168.117.11/index.php不断需要后端PHP解析完成访问
Failed失败表示超过处理能力


除了用内存,用PHP的memcache模块连接memcache程序,把数据写到memcache中,memcache是内存;
另一种方法,通过反向代理将php结尾的请求,反向交给负载均衡列表,从而解决PHP处理能力;

传统缓存逻辑如上图
处理能力由后端的9000端口处决定!更好的办法是把数据缓存到nginx中,即把memcache放到nginx层面中

相关文章:
PHP部署、nginx与PHP的整合、PHP动态添加模块
文章目录前言一、基本知识1.php介绍2.PHP能做什么3.web工作原理4.PHP脚本主要用于领域5.php其他相关信息6.memcache介绍二、php的源码安装1.php安装2.php配置三、nginx与php整合四、php动态扩展模块(memcache模块)前言 一、基本知识 1.php介绍 官方下载…...
SpringCloud与SpringBoot的版本对应
一、SpringCloud与SpringBoot的版本对应 SpringCloud版本 SpringBoot版本 2021.0.1-SNAPSHOT Spring Boot >2.6.4-SNAPSHOT and <2.7.0-M1 2021.0.0 Spring Boot >2.6.1 and <2.6.4-SNAPSHOT 2021.0.0-RC1 Spring Boot >2.6.0-RC1 and <2.6.1 2021.0.0-M3 Sp…...
华为OD机试题,用 Java 解【N 进制减法】问题
最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…...
Linux->进程概念于基本创建
1. 进程基本概念 当一个可执行程序被加载到内存当中,并由操作系统将其管理起来,此时这个程序就被称之为进程。也就是下方的: 程序的一个执行实例,正在执行的程序等 担当分配系统资源(CPU时间,内存ÿ…...
【MySQL】5.7版本解压安装配置
前言 之所以使用解压版本,而不使用exe安装,因为exe的安装方式删除过于麻烦!!! 如果安装MySQL过程中,出错了或者想重新在来一把,删除mysql服务即可 sc delete mysql # 删除已经安装好的Mysql&a…...
c++类对象数据成员和虚函数的内存布局
一直想搞清楚类对象的数据成员和虚函数的内存布局,今天刚好有时间,所以就写了个demo查看了一下具体的内存布局情况(使用的编译器为微软的)。下面是自己demo的代码:#include <iostream> #include <windows.h&g…...
Python 模块和包
1. 模块和包 **容器:**列表、元组、字符串、字典等,对数据的封装**函数:**对语句的封装**类:**对方法和属性的封装,即对函数和数据的封装 而模块(module)就是个程序,一个.py 文件&…...
Java零基础专栏——面向对象
1 面向对象思想1.1 什么是面向对象?2 类和对象2.1 类和对象的理解2.2 类的定义2.3定义类的补充注意事项2.4 对象的使用2.5 练习3 封装3.1 封装思想3.1.1 封装概述3.1.2 封装的步骤3.1.3 封装代码实现3.2 private关键字3.3 练习—private的使用4 构造方法4.1 构造方法…...
离散无记忆与有记忆信源的序列熵
本专栏包含信息论与编码的核心知识,按知识点组织,可作为教学或学习的参考。markdown版本已归档至【Github仓库:information-theory】,需要的朋友们自取。或者公众号【AIShareLab】回复 信息论 也可获取。 文章目录离散无记忆信源的…...
算法该不该刷?如何高效刷算法?
一、算法该不该刷?最近有小伙伴向我咨询一个问题,就是算法该不该刷,该如何刷算法呢?这个问题可谓太大众化了,只要你去某乎、某度搜索一下相关的解答,会有无数种回答,可见这个问题困扰了多少学习…...
Allegro如何在关闭飞线模式下查看网络连接位置操作指导
Allegro如何在关闭飞线模式下查看网络连接位置操作指导 在用Allegro做PCB设计的时候,有时会因为设计需要,关闭飞线显示。 如何在关闭飞线显示模式下查看网络连接的位置,如下图 除了能看到网络连接的点位以外,还能看到器件的pin Number 如何显示出这种效果,具体操作如下 …...
啊哈 算法读书笔记 第 1 章 一大波数正在靠近——排序
目录 排序算法: 时间复杂度: 排序算法和冒泡排序之间的过渡: 冒泡排序 冒泡排序和快速排序之间的过渡: 快速排序 排序算法: 首先出场的是我们的主人公小哼,上面这个可爱的娃就是啦。期末考试完了老…...
Servlet笔记(5):HTTP请求与响应
1、HTTP请求 当浏览器请求网页时,它会向Web服务器发送特定信息,这些信息不能被直接读取,而是通过传输HTTP请求时,封装进请求头中。 有哪些头信息? 头信息描述Accept这个头信息指定浏览器或其他客户端可以处理的 MIME…...
信号的运算与变换
目录 前言 本章内容介绍 信号的运算与变换 相加 相乘 时移 反折 尺度变换 微分(差分) 积分(累加) 信号的奇偶求解 信号的实虚分解 合适的例题 1、时移反折 2、时移尺度 3、时移反折尺度 4、反求x(t) 前言 《信号…...
【GO】K8s 管理系统项目9[API部分--Secret]
K8s 管理系统项目[API部分–Secret] 1. 接口实现 service/dataselector.go // secret type secretCell corev1.Secretfunc (s secretCell) GetCreation() time.Time {return s.CreationTimestamp.Time }func (s secretCell) GetName() string {return s.Name }2. Secret功能…...
ESP32 Arduino EspNow点对点双向通讯
ESP32 Arduino EspNow点对点双向通讯✨本案例分别采用esp32和esp32C3之间点对点单播无线通讯方式。 🌿esp32开发板 🌾esp32c3开发板 🔧所需库(需要自行导入到Arduino IDE library文件夹中,无法在IDE 管理库界面搜索下载到该库)&am…...
Linux SID 开发指南
Linux SID 开发指南 1 前言 1.1 编写目的 介绍Linux 内核中基于Sunxi 硬件平台的SID 模块驱动的详细设计,为软件编码和维护提供基 础。 1.2 适用范围 内核版本Linux-5.4, Linux-4.9 的平台。 1.3 相关人员 SID 驱动、Efuse 驱动、Sysinfo 驱动的维护、应用开…...
Matlab进阶绘图第2期—线型热图
线型热图由共享X轴的多条渐变直线组成,其颜色表示某一特征值。 与传统热图相比,线型热图适应于X轴数据远多于Y轴(条数)的情况,可以很好地对不同组数据间的分布情况进行比较,也因此可以在一些期刊中看到它的…...
【Redis中bigkey你了解吗?bigkey的危害?】
一.Redis中bigkey你了解吗?bigkey的危害? 如果面试官问到了这个问题,不必惊慌,接下来我们从什么是bigkey?bigkey划分的类型?bigkey危害之处? 二.什么是bigkey?会有什么影响ÿ…...
C++回顾(一)——从C到C++
前言 在学习了C语言的基础上,C到底和C有什么区别呢? 1.1 第一个C程序 #include <iostream>// 使用名为std的命名空间 using namespace std;int main() {// printf ("hello world\n");// cout 标准输出 往屏幕打印内容 相当于C语言的…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...





