LAMP知识
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 | LAM(M)P: L:linux A:apache (httpd) NGINX M:mysql, mariadb M:memcached P:php, perl, python WEB资源类型: 静态资源:原始形式与响应内容一致,在客户端浏览器执行 动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端 注意:静态和动态的区别,不在于网页是否能动态变化,而在于服务端的页面文件和客户端得到页面文件是否一致 Web相关语言 客户端技术: html,javascript,css,jpg 服务器端技术:php, jsp,python,asp LNMP工作原理 浏览器发送http request(请求)请求到服务器(Nginx),服务器响应并处理web请求,将一些静态资源(CSS,图片,视频等)保存服务器上, 然后将php脚本通过接口传输协议(网关协议)PHP-FCGI(fast-cgi)传输给PHP-FPM(进程管理程序),PHP-FPM不做处理,然后PHP-FPM调用PHP解析器进程, PHP解析器解析php脚本信息。PHP解析器进程可以启动多个,进行并发执行。然后将解析后的脚本返回到PHP-FPM,PHP-FPM再通过fast-cgi的形式将脚本信息传送给Nginx. 服务器再通过Http response(响应)的形式传送给浏览器。浏览器再进行解析与渲染然后进行呈现。 LAMP的实现原理 浏览器向服务器发送http请求,服务器 (Apache) 接受请求,由于php作为Apache的组件模块也会一起启动,它们具有相同的生命周期。 Apache会将一些静态资源保存,然后去调用php处理模块进行php脚本的处理。脚本处理完后,Apache将处理完的信息通过http response的方式发送给浏览器, 浏览器解析,渲染等一系列操作后呈现整个网页。 1.当客户端请求的静态资源时,WEB服务器会直接把静态资源返回客户端 2.当客户端请求的动态资源时,http的php模块会进行相应的动态资源运算,如果此过程还需要数据库的数据作为运算参数时,php会连接数据库取得数据然后进行运算, 运算结果转为静态资源由WEB服务器返回到客户端。 CGI CGI:Common Gateway Interface 公共网关接口 更早的时候用得比较多,以前web服务器一般只处理静态的请求,如果碰到一个动态请求怎么办呢?web服务器会根据这次请求的内容, 然后会fork一个新进程来运行外部c程序(或bash,perl脚本等), 这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户, 刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本,那么web服务器又再次fork一个新进程,周而复始的进行。 CGI 可以让一个客户端,从网页浏览器通过http服务器向执行在网络服务器上的程序传输数据;CGI描述了客户端和服务器程序之间传输的一种标准 请求流程: Client -- (http) --> httpd -- (cgi) --> application server (program file) -- (mysql) --> mysql fastcgi fastcgi的方式是,web服务器收到一个请求时,不会重新fork一个进程(因为这个进程在web服务器启动时就开启了,而且不会退出), web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用了别的方式,tcp方式通信),这个进程收到请求后进行处理,把结果返回给web服务器, 最后自己接着等待下一个请求的到来,而不是退出 请求流程: Client — (http协议) –> httpd — (fastcgi协议) –> fastcgi服务器 — (mysql协议) –> mysql php: 脚本编程语言、嵌入到html中的嵌入式web程序语言 基于zend编译成opcode(二进制格式的字节码,重复运行,可省略编译环境) PHP简介 PHP是通用服务器端脚本编程语言,主要用于web开发实现动态web页面,也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时, php还提供了一个命令行接口,因此,其也可以在大多数系统上作为一个独立的shell来使用 Zend Engine是开源的、PHP脚本语言的解释器。 Zend Engine的出现将PHP代码的处理过程分成了两个阶段:首先是分析PHP 代码并将其转换为称作Zend opcode的二进制格式opcode(类似Java的字节码), 并将其存储于内存中;第二阶段是使用Zend Engine去执行这些转换后的Opcode Opcode是一种PHP脚本编译后的中间语言,类似于Java的ByteCode,或 者.NET的MSL。PHP执行PHP脚本代码一般会经过如下4个步骤(确切的来说,应该是PHP的语言引擎Zend) 1、Scanning 词法分析,将PHP代码转换为语言片段(Tokens) 2、Parsing 语义分析,将Tokens转换成简单而有意义的表达式 3、Compilation 将表达式编译成Opcode 4、Execution 顺次执行Opcode,每次一条,从而实现PHP脚本的功能 即:扫描-->分析-->编译-->执行 php:脚本语言解释器 配置文件:/etc/php.ini, /etc/php.d/*.ini 配置文件在php解释器启动时被读取 对配置文件的修改生效方法 Modules:重启httpd服务 FastCGI:重启php-fpm服务 /etc/php.ini配置文件格式: (php-common) [foo]:Section Header directive = value 注释符:较新的版本中,已经完全使用;进行注释 #:纯粹的注释信息 ;:用于注释可启用的directive <br> php常见设置:rpm -ql php max_execution_time= 30 最长执行时间30s memory_limit=128M 生产不够,可调大 display_errors=off 调试使用,不要打开,否则可能暴露重要信息 display_startup_errors=off 建议关闭 post_max_size=8M 最大上传数据大小,生产可能调大,比下面项大 upload_max_filesize =2M 最大上传文件,生产可能要调大 max_file_uploads = 20 同时上传最多文件数 date.timezone =Asia/Shanghai 指定时区 short_open_tag= on 开启短标签,如<? phpinfo();?> expose_php = On #在响应报文显示首部字段x-powered- by : PHP/x.y.z,暴露php版本,建议设为off httpd与php结合的方式: 1.modules (将php编译成为httpd的模块,默认方式)1.prefork: libphp5.so 3. event , worker: libphp5-zts.so 2.FastCGI: php-fpm CentOS 8或7: Modules:httpd, php, php-mysql, mariadb-server 基于php模块方式安装LAMP,注意:要使用prefork模型 FastCGI:httpd, php-fpm, php-mysql, mariadb-server CentOS 6: Modules:httpd, php, php-mysql, mysql-server FastCGI:默认不支持 静态资源: Client — http –> httpd 动态资源: Client — http –> httpd –> libphp5.so () — mysql –> MySQL server Client — http –> httpd –> fastcgi–> mysql –> MySQL server CentOS 6: Module yum install httpd, php, mysql-server, php-mysql FastCGI 默认不支持 CentOS 7: Module yum install httpd, php, php-mysql, mariadb-server 注意:要使用prefork模型 FastCGI yum install httpd mariadb-server php-fpm php-mysqlnd CentOS 8: Module dnf install httpd mariadb-server php php-mysqlnd FastCGI dnf install httpd mariadb-server php-fpm php-mysqlnd 基于php模块方式安装LAMP php测试代码 <?php echo date( "Y/m/d H:i:s" ); phpinfo(); ?> php 连接数据库的接口方式: php使用mysql扩展连接数据库的测试代码 <?php $conn = mysql_connect( 'localhost' , 'root' , '123456' ); if ($conn) echo "OK" ; else echo "Failure" ; #echo mysql_error(); mysql_close(); ?> php使用mysqli扩展连接数据库的测试代码(只能连接mysql) <?php $mysqli= new mysqli( "localhost" , "root" , "123456" ); if (mysqli_connect_errno()){ echo "Failure" ; $mysqli= null ; exit; } echo "OK" ; $mysqli->close(); ?> php使用pdo(PHP Data Object)扩展连接数据库的测试代码(常用方式) <?php $dsn= 'mysql:host=mysqlhost;dbname=test' ; $username= 'root' ; $passwd= '123456' ; $dbh= new PDO($dsn,$username,$passwd); var_dump($dbh); ?> dsn:数据库( oracle mysql) host:localhost或IP dbname:数据库 实例: php使用pdo扩展连接数据库的测试代码 <?php try { $user= 'root' ; $pass= 'passwd1234' ; $dbh = new PDO( 'mysql:host=localhost;dbname=mysql' , $user, $pass); foreach ($dbh->query( 'SELECT user,host from user' ) as $row) { print_r($row); }$dbh = null ; } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>" ; die(); } ?> |
简单实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | CentOS 7: 基于php模块方式安装 yum install httpd, php, php-mysql, mariadb-server #php测试代码 [root@localhost7C ~]# cat / var /www/html/index.php <?php echo date( "Y/m/d H:i:s" ); phpinfo(); ?>运行数据库脚本设置root密码)<br>mysql_secure_installation<em id= "__mceDel" > #php使用pdo(PHP Data Object)扩展连接数据库的测试代码 [root@localhost7C ~]# cat / var /www/html/mysql.php <?php try { $user= 'root' ; $pass= 'zzhz2022' ; $dbh = new PDO( 'mysql:host=localhost;dbname=mysql' , $user, $pass); foreach ($dbh->query( 'SELECT user,host from user' ) as $row) { print_r($row); }$dbh = null ; } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>" ; die(); } ?><br><br>systemctl restart httpd mariadb</em> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | php的加速器(适合老版本,版本7以上不用) php的加速器:基于PHP的特殊扩展机制如opcode缓存扩展也可以将opcode缓存于php的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译 阶段以提高性能。这些加速器并非真正提高了opcode的运行速度,而仅是通过分析opcode后并将它们重新排列以达到快速执行的目的 常见的php加速器有: 1、APC (Alternative PHP Cache) 2、eAccelerator 3、XCache 4、Zend Optimizer和Zend Guard Loader 5、NuSphere PhpExpress 实验:编译安装xcache实现加速 1.安装方法 rpm包:来自epel源<br>yum install php-xcache<br> 2.编译安装 (本步骤接,基于LAMP应用实现wordpress个人博客系统) yum -y install php-devel gcc 下载并解压缩xcache-3.2.0. tar .bz2 cd xcache-3.2.0 cat INSTALL 查看安装信息 phpize 生成编译环境 . /configure -- enable -xcache make && make install ...省略... Installing shared extensions: /opt/remi/php56/root/usr/lib64/php/modules/ cp xcache.ini /etc/php .d/ #复制模块到php配置目录下。 systemctl restart httpd.service 使用ab命令测试对比。 <br><br> 3.opcache加速php 7.X [root@centos8 ~] #dnf install php-opcache [root@centos8 ~] #cat /etc/php.ini [opcache] zend_extension=opcache.so opcache. enable =1 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律