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
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(); } ?>
简单实例
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密码)
mysql_secure_installation
#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(); } ?>
systemctl restart httpd mariadb
标签:httpd,php,web,知识,LAMP,mysql,服务器,PHP From: https://www.cnblogs.com/Yuanbangchen/p/16602238.html