WEB的2种资源类型:
静态资源:原始数据的形式与响应内容一致;
动态资源:原始数据形式通常为程序文件,程序文件需要在服务器端执行后,将执行结果返回给客户端;
客户端技术:javascript;
服务器端技术:php,jsp;
1、CGI简介
==================
CGI:Common Gateway Interface,通用网关接口;
CGI可以让一个客户端从网页浏览器向执行在服务器上的程序传输数据;CGI描述了客户端与服务器程序之间数据传输的一种标准;
CGI工作原理:
1> 浏览器通过HTML表单或超链接请求指向一个CGI应用程序的URL;
2> 服务器收发到请求;
3> 服务器执行指定CGI应用程序;
4> CGI应用程序执行所需要的操作,通常是基于浏览者输入的内容;
5> CGI应用程序把结果格式化为网络服务器和浏览器能够理解的文档(通常是HTML网页);
6> 网络服务器把结果返回到浏览器中;
CGI环境变量:
SERVER_NAME:运行CGI序为机器名或IP地址;
SERVER_INTERFACE:WWW服务器的类型,如:CERN型或NCSA型;
SERVER_PROTOCOL:通信协议,应当是HTTP/1.0;
SERVER_PORT:TCP端口,一般说来web端口是80;
HTTP_ACCEPT:HTTP定义的浏览器能够接受的数据类型;
HTTP_REFERER:发送表单的文件URL(并非所有的浏览器都传送这一变量);
HTTP_USER-AGENT:发送表单的浏览的有关信息;
GETWAY_INTERFACE:CGI程序的版本,在UNIX下为 CGI/1.1;
PATH_TRANSLATED:PATH_INFO中包含的实际路径名;
PATH_INFO:浏览器用GET方式发送数据时的附加路径;
SCRIPT_NAME:CGI程序的路径名;
QUERY_STRING:表单输入的数据,URL中问号后的内容;
REMOTE_HOST:发送程序的主机名,不能确定该值;
REMOTE_ADDR:发送程序的机器的IP地址;
REMOTE_USER:发送程序的人名;
CONTENT_TYPE:POST发送,一般为application/xwww-form-urlencoded;
CONTENT_LENGTH:POST方法输入的数据的字节数;
2、PHP简介:
================
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言;
语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域;
PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页;
用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完 全生成HTML标记的CGI要高许多;
PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快;
PHP技术应用:伪静态、静态页面生成、数据库缓存、过程缓存、div+cssw3c标准、大负荷、分布式、支持MVC模型、Smarty模板引擎;
PHP Zend Engine:
————————
Zend Engine 是开源的、PHP脚本语言的解释器,由以色列理工学院(Technlon)的学生Andi Gutmans和Zeev Suraski所开发;
PHP的Opcode:
——————
Opcode是一种PHP脚本编译后的中间语言,就像JAVA的ByteCode或者.NET的MSL;
PHP执行PHP脚本代码一般经过如下4个步骤:
1> scanning(lexing):将PHP代码转换为语言片段(Tokens);
2> parsing:将Tokens转换成简单而有意义的表达式;
3> compilation:将表达式编译成Opcodes;
4> execution:顺次执行Opcodes,每次一条,从而实现PHP脚本的功能;
PHP的加速器:
————————-
基于PHP的特殊扩展机制如opcode缓存扩展也可以将opcode焕春与PHP的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译阶段一提高性能;
PHP常见加速器:
1>zend optimizer和zend Guard Loader
商业软件;
2>OPcache
OPcache 通过将PHP脚本预编译的字节码存储到共享内存中来提升PHP的性能,存储预编译字节码的好处就是省去了每次加载和解析PHP脚本的开销;
PHP 5.5.0 及后续版本中已经绑定了OPcache扩展;
PHP7.0.30源码包的目录结构:
php-7.0.30 ├── acinclude.m4 ├── aclocal.m4 ├── appveyor ├── build ---------------> 放置跟源码编译相关的文件; ├── buildconf ├── buildconf.bat ├── CODING_STANDARDS ├── config.guess ├── config.sub ├── configure ├── configure.in ├── CONTRIBUTING.md ├── CREDITS ├── ext -----------------> 官方的扩展目录,包括了绝大多数PHP函数的定义和实现,如array,pdo,sql等; ├── EXTENSIONS ├── footer ├── generated_lists ├── genfiles ├── header ├── INSTALL ├── install-sh ├── LICENSE ├── ltmain.sh ├── main --------------> PHP最核心的文件,是实现PHP的基础设施 ├── makedist ├── Makefile.frag ├── Makefile.gcov ├── Makefile.global ├── makerpm ├── missing ├── mkinstalldirs ├── netware ├── NEWS ├── pear ------------------> PHP扩展与应用仓库,包含PEAR的核心文件; ├── php7.spec.in ├── php.gif ├── php.ini-development ├── php.ini-production ├── README.EXT_SKEL ├── README.GIT-RULES ├── README.input_filter ├── README.MAILINGLIST_RULES ├── README.md ├── README.namespaces ├── README.NEW-OUTPUT-API ├── README.PARAMETER_PARSING_API ├── README.REDIST.BINS ├── README.RELEASE_PROCESS ├── README.SELF-CONTAINED-EXTENSIONS ├── README.STREAMS ├── README.SUBMITTING_PATCH ├── README.TESTING ├── README.TESTING2 ├── README.UNIX-BUILD-SYSTEM ├── README.WIN32-BUILD-SYSTEM ├── run-tests.php ├── sapi ---------------------> 各种服务器抽象层的代码,例如Apache的mod_php,cgi,fastcgi以及fpm等接口; ├── scripts ├── server-tests-config.php ├── server-tests.php ├── snapshot ├── stamp-h.in ├── stub.c ├── tests ------------------> PHP的测试脚本集合,包含PHP各项功能的测试文件; ├── travis ├── TSRM ------------------> 线程安全资源管理器;PHP的线程安全是构建在TSRM库之上的,PHP实现中常见的*G宏通常是对TSRM的封装; ├── UPGRADING ├── UPGRADING.INTERNALS ├── vcsclean ├── win32 ------------------> Windows平台相关的实现; └── Zend ------------------> zend引擎的实现目录,主要实现语言运行环境;比如脚本的词法语法解析,opcode的执行以及扩展机制的实现等;
3、YUM方式安装LAMP:
1>安装Apache:
~]# yum -y install httpd httpd-manual httpd-tools
2>安装PHP:
~]# yum install epel-release
~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
~]# yum -y install php70w-pdo php70w-fpm php70w-opcache php70w-common php70w-devel php70w-gd php70w-mbstring php70w-mcrypt php70w-mysqlnd php70w-pear php70w-pecl-apcu php70w-cli php70w-process php70w-xml
查看PHP安装后产生的目录文件:
[root@localhost httpd]# rpm -ql php70w-fpm
/etc/logrotate.d/php-fpm
/etc/php-fpm.conf
/etc/php-fpm.d
/etc/php-fpm.d/www.conf
/etc/sysconfig/php-fpm
/usr/lib/systemd/system/php-fpm.service
/usr/lib/tmpfiles.d/php-fpm.conf
/usr/sbin/php-fpm
/usr/share/doc/php70w-fpm-7.0.30
/usr/share/doc/php70w-fpm-7.0.30/fpm_LICENSE
/usr/share/doc/php70w-fpm-7.0.30/php-fpm.conf.default
/usr/share/fpm
/usr/share/fpm/status.html
/usr/share/man/man8/php-fpm.8.gz
/var/log/php-fpm
/var/run/php-fpm
[root@lucifer ~]# rpm -ql php70w-opcache
/etc/php-zts.d/opcache-default.blacklist
/etc/php-zts.d/opcache.ini
/etc/php.d/opcache-default.blacklist
/etc/php.d/opcache.ini
/usr/lib64/php-zts/modules/opcache.so
/usr/lib64/php/modules/opcache.so
修改/etc/httpd/conf.d/php.conf,取消注释;
#AddType application/x-httpd-php-source .phps
AddType application/x-httpd-php-source .phps
创建测试PHPinfo信息页(/var/www/html/):
~]# vim /var/www/html/phpinfo.php <?php phpinfo(); ?>
3>启动httpd、php-fpm:
~]# systemctl start httpd
~]# systemctl start php-fpm
4>浏览器测试PHPinfo:http://192.168.206.88/phpinfo.php
或者使用’elinks’命令:
[root@localhost ~]# elinks –dump http://192.168.206.66/phpinfo.php | more
5>安装MariaDB:
~]# vim /etc/yum.repos.d/MariaDB.repo
# MariaDB 10.1 CentOS repository list - created 2018-06-04 23:53 UTC # http://downloads.mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.1/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
~]# yum -y install MariaDB-server MariaDB-client
Package Arch Version Repository Size ==================================================================================================================================== Installing: MariaDB-client x86_64 10.1.33-1.el7.centos mariadb 39 M replacing mariadb.x86_64 1:5.5.56-2.el7 MariaDB-server x86_64 10.1.33-1.el7.centos mariadb 104 M replacing mariadb-server.x86_64 1:5.5.56-2.el7 MariaDB-shared x86_64 10.1.33-1.el7.centos mariadb 1.3 M replacing mariadb-libs.x86_64 1:5.5.56-2.el7 Installing for dependencies: MariaDB-common x86_64 10.1.33-1.el7.centos mariadb 123 k galera x86_64 25.3.23-1.rhel7.el7.centos mariadb 8.0 M jemalloc x86_64 3.6.0-1.el7 epel 105 k
说明:
MariaDB-server程序包提供的命令:mysqld,mysqld_safe,mysqld_multi;
MariaDB-client程序包提供的命令:mysql,mysqldump,mysqladmin;
关闭mariadb把IP地址解析成主机名:
~]# vim /etc/my.cnf.d/server.cnf
[mysqld]
skip-name-resolve=ON
innodb_file_per_table=ON
启动mariadb:
~]# systemctl start mariadb
测试PHP连接mariadb:
<?php $conn = mysqli_connect('127.0.0.1','root',''); if ($conn) echo "OK" else echo "FAIL" ?>
浏览器测试php连接mariadb:http://192.168.206.88/php-mysql.php
或者使用’elinks’命令:
[root@localhost ~]# elinks –dump http://192.168.206.66/php-mysql.php
OK
[root@localhost ~]#
4、安装phpMyAdmin-4.8.1-all-languages.zip注意事项:
1> 此版本对PHP和mysql的版本要求:
Future version compatible with PHP 5.5 to 7.2 and MySQL 5.5 and newer.
2> 软件依赖包:
mbstring
~]# yum -y install php70w-mbstring
解压程序包phpMyAdmin-4.8.1-all-languages.zip后,需要做如下操作:
3> 在解压后的”phpMyAdmin-4.8.1-all-languages”目录下重命名config文件;
~]# cp config.sample.inc.php config.inc.php
4> 编辑文件”config.inc.php”,添加随机数;
生成随机数:
[root@localhost wordpress]# openssl rand -base64 20
GSZ0xC1vlMtReG1e/Luv8pgMSbI=
[root@localhost wordpress]#
~]# vim config.inc.php
$cfg[‘blowfish_secret’] = ‘GSZ0xC1vlMtReG1e/Luv8pgMSbI‘; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
***************************************************************
5、下面仅供测试时使用:
——————–
如果fpm的status页面输出的URL为”/status”,测试接口的输出位置为”/ping”,
则可以在httpd.conf或者虚拟主机配置文件中添加如下URL跳转:
ProxyPassMatch ^/(status|ping)$ fcgi://192.168.206.99:9000/$1
本例采用虚拟主机:
Listen 8080 DirectoryIndex index.php <VirtualHost *:8080> ServerName www.abc.com DocumentRoot /data/web1 ProxyRequests Off ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.206.99:9000/data/php/$1 ProxyPassMatch ^/(status|ping)$ fcgi://192.168.206.99:9000/$1 <Directory "/data/web1"> Options None AllowOverride None Require all granted </Directory> </VirtualHost>
注意,首先要在’/etc/php-fpm.d/www.conf’文件中开启如下2项配置:
pm.status_path = /status
ping.path = /ping
http://192.168.206.55:8080/status 显示php-fpm主控进程的运行状态信息:
pool: www process manager: dynamic 进程是动态管理机制; start time: 07/Jun/2018:07:52:45 -0400 start since: 514 accepted conn: 14 listen queue: 0 等待队列长度; max listen queue: 0 最大请求队列长度; listen queue len: 128 监听队列; idle processes: 4 空闲进程数; active processes: 1 活动进程数; total processes: 5 总共开启的进程数; max active processes: 1 max children reached: 0 slow requests: 0
http://192.168.206.55:8080/status?full 显示php-fpm主控进程以及子进程的运行状态信息:
http://192.168.206.55:8080/status?xml xml格式显示php-fpm主控进程的运行状态信息:
<status> <pool>www</pool> <process-manager>dynamic</process-manager> <start-time>1528372365</start-time> <start-since>845</start-since> <accepted-conn>22</accepted-conn> <listen-queue>0</listen-queue> <max-listen-queue>0</max-listen-queue> <listen-queue-len>128</listen-queue-len> <idle-processes>4</idle-processes> <active-processes>1</active-processes> <total-processes>5</total-processes> <max-active-processes>1</max-active-processes> <max-children-reached>0</max-children-reached> <slow-requests>0</slow-requests> </status>