zoukankan      html  css  js  c++  java
  • LAMP(一)之 PHP程序简介

    一 PHP简介

      PHP是一种通用服务器端脚本编程语言,其主要用于Web开发以实现动态Web页面,它也是最早实现将脚本嵌入HTML中的服务器端脚本语言之一。同时,PHP还提供了一个命令行接口,因此,PHP也可以在大多数系统上作为一个独立的shell来使用。

      Rasmus Lerdorf于1994年开始开发PHP,它最初是一组被Rasmus Lerdorf称作"Personal Home Page Tool" 的Perl脚本, 这些脚本可以用于显示作者的简历并记录用户对其网站的访问。后来,Rasmus Lerdorf使用C语言将这些Perl脚本重写为CGI程序,还为其增加了运行Web Forms的能力以及与数据库交互的特性,并将其重命名为"Personal Home Page/Forms Interpreter",简称为"PHP/FI"。此时,PHP/FI已经可以用于开发简单的动态Web程序了,这即是PHP 1.0。1995年6月,Rasmus Lerdorf把它的PHP发布于comp.infosystems.www.authoring.cgi Usenet讨论组,从此PHP开始走进人们的视野。1997年,PHP 2.0版本发布。

      1997年,两名以色列程序员Zeev Suraski和Andi Gutmans重写的PHP的分析器(parser)成为PHP发展到3.0的基础,而且从此将PHP重命名为PHP Hypertext Preprocessor。此后,这两名程序员开始重写整个PHP核心,并于1999年发布了Zend Engine 1.0,这也意味着PHP 4.0的诞生。2004年7月,Zend Engine 2.0发布,由此也将PHP带入了PHP 5时代。PHP5包含了许多重要的新特性,如增强的面向对象编程的支持、支持PDO(PHP Data Objects)扩展机制以及一系列对PHP性能的改进。

    二 PHP Zend Engine

      Zend Engine是开源的PHP脚本语言的解释器,它最早是由以色列理工学院(Technion)的学生Andi Gutmans和Zeev Suraski所开发,Zend也正是此二人名字的合称。后来两人联合创立了Zend Technologies公司。

      Zend Engine 1.0于1999年随PHP 4发布,由C语言开发且经过高度优化,并能够做为PHP的后端模块使用。Zend Engine为PHP提供了内存和资源管理的功能以及其它的一些标准服务,其高性能、可靠性和可扩展性在促进PHP成为一种流行的语言方面发挥了重要作用。

      Zend Engine的出现将PHP代码的处理过程分成了两个阶段:首先是分析PHP代码并将其转换为称作Zend Opcode的二进制格式(类似Java的字节码),并将其存储于内存中;第二阶段是使用Zend Engine去执行这些转换后的Opcode。

    三 PHP的Opcode

      Opcode是一种将PHP脚本编译后的中间语言,就像Java的ByteCode,或者.NET的MSL。PHP执行PHP脚本代码一般会经过如下4个步骤(确切的来说,应该是PHP的语言引擎Zend):

    • Scanning(Lexing) —— 将PHP代码转换为语言片段(Tokens)
    • Parsing —— 将Tokens转换成简单而有意义的表达式
    • Compilation —— 将表达式编译成Opocdes
    • Execution —— 顺次执行Opcodes,每次一条,从而实现PHP脚本的功能

      扫描-->分析-->编译-->执行

    四 PHP的加速器

      基于PHP的特殊扩展机制如Opcode缓存扩展也可以将Opcode缓存于PHP的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译阶段以提高性能。由此也可以看出,这些加速器并非真正提高了Opcode的运行速度,而仅是通过分析Opcode后并将它们重新排列以达到快速执行的目的。

      常见的php加速器有:

    • APC (Alternative PHP Cache)

      遵循PHP License的开源框架,PHP Opcode缓存加速器,目前的版本不适用于PHP 5.4。项目地址,http://pecl.php.net/package/APC。

    • eAccelerator

      源于Turck MMCache,早期的版本包含了一个PHP encoder和PHP loader,目前encoder已经不再支持。项目地址, http://eaccelerator.net/。

    • XCache

      快速而且稳定的PHP opcode缓存,经过严格测试且被大量用于生产环境。项目地址,http://xcache.lighttpd.net/。

    • Zend Optimizer和Zend Guard Loader

      Zend Optimizer并非一个opcode加速器,它是由Zend Technologies为PHP 5.2及以前的版本提供的一个免费、闭源的PHP扩展,其能够运行由Zend Guard生成的加密的PHP代码或模糊代码。 而Zend Guard Loader则是专为PHP5.3提供的类似于Zend Optimizer功能的扩展。项目地址,http://www.zend.com/en/products/guard/runtime-decoders

    • NuSphere PhpExpress

      NuSphere的一款开源PHP加速器,它支持装载通过NuSphere PHP Encoder编码的PHP程序文件,并能够实现对常规PHP文件的执行加速。项目地址:http://www.nusphere.com/products/phpexpress.htm

    五 PHP源码目录结构

      PHP的源码在结构上非常清晰。其代码根目录中主要包含了一些说明文件以及设计方案,并提供了如下子目录:

    • build —— 顾名思义,这里主要放置一些跟源码编译相关的文件,比如开始构建之前的buildconf脚本及一些检查环境的脚本等。
    • ext —— 官方的扩展目录,包括了绝大多数PHP的函数的定义和实现,如array系列,pdo系列,spl系列等函数的实现。 个人开发的扩展在测试时也可以放到这个目录,以方便测试等。
    • main —— 这里存放的就是PHP最为核心的文件了,是实现PHP的基础设施,这里和Zend引擎不一样,Zend引擎主要实现语言最核心的语言运行环境。
    • Zend —— Zend引擎的实现目录,比如脚本的词法语法解析,opcode的执行以及扩展机制的实现等等。
    • pear —— PHP 扩展与应用仓库,包含PEAR的核心文件。
    • sapi —— 包含了各种服务器抽象层的代码,例如apache的mod_php,cgi,fastcgi以及fpm等等接口。
    • TSRM —— PHP的线程安全是构建在TSRM库之上的,PHP实现中常见的*G宏通常是对TSRM的封装,TSRM(Thread Safe Resource Manager)线程安全资源管理器。
    • tests —— PHP的测试脚本集合,包含PHP各项功能的测试文件。
    • win32 —— 这个目录主要包括Windows平台相关的一些实现,比如sokcet的实现在Windows下和*Nix平台就不太一样,同时也包括了Windows下编译PHP相关的脚本。

    :php.ini官方文档: (有兴趣可以前往浏览)

      配置参数:http://www.php.net/manual/zh/ini.list.php
      核心配置参数详解:http://www.php.net/manual/zh/ini.core.php

      PHP官方站点:www.php.net

    六 httpd与PHP结合的方式

      下载PHP源程序后,需要解压、编译才能运行,PHP虽然是一种解释型语言,但PHP本身确是需要编译才能运行的程序,正如Bash,Bash开发的程序都是脚本,但Bash本身却是二进制程序。

      PHP既然是能够开发webapp的一种开发语言,这种语言只有在PHP的解释器中需要Zend Engine编译后才能执行,但编译结果如何能够跟httpd结合起来呢?PHP是一种动态开发语言,而Web服务器httpd也仅仅是能够提供静态HTML文档或者其他静态文件,如图形、图片、MP3等静态文件的一种服务器,那如果说要想执行PHP程序的话,httpd自身是不能执行PHP程序的,要想执行PHP脚本需要PHP解释器,那httpd进程与解释器之间如何建立关联关系?  

      httpd与PHP结合的方式大致有三种:

    • cgi

        CGI:Common Gateway Interface,通用网关接口,这是一种能够让Web服务器能够跟后端程序相结合的,调用后端程序执行应用程序的一种接口或者说协议

      

        基于CGI的模式,httpd进程如果发现客户端访问了PHP页面,它会调用PHP解释器解释器执行这段程序,执行代码时就会生成一个新进程,一旦执行结束以后这个进程即被销毁。由httpd管理用于执行脚本文件的应用程序进程,这种方式很少用;

        我们想象这样一种场景,若用户访问的程序既有1.php,又有2.php,3.php,它是开三个进程,还是一个进程访问3个页面呢?假如1.php调用了2.php,2.php又调用了3.php,则只需要一个进程即可。但如果说各自独立调用时则需要启动3个进程,这些进程什么时候启动什么时候结束由CGI控制,因此生命周期的管理也是由httpd管理的,更重要的是,假如Web服务器提供的内容很多都是PHP页面,假设有200个PHP页面,3000个静态内容(static content),那么若基于prefork模型,试想200个请求同时来访问PHP页面的时候(假设200个请求同时到达,而不考虑静态内容),那么当前服务器上应该运行多少个进程呢?至少是400个,因为每一个PHP也需要启动一个进程,同时httpd基于prefork模型时自身又会生成一个进程用以响应客户端请求,所以基于这种模式进行处理的时候会发现它运行的进程会超出想象。若一个httpd进程需要2M,而一个PHP进程的大小则取决于数据和程序的大小了,假如处理的数据比较大,一个进程10M,20M甚至于50M都有可能,而http是一种无状态的协议(stateless),所以每一个请求都是独立建立的,假如我们还没有使用长连接,随时在线访问的进程都有200个那就意味着频繁的创建与销毁进程系统开销是非常大的,系统性能会显著降低的。

        所以对于PHP来讲,CGI这种机制并不是一种优良的机制,对于大量用户并发来讲尤其如此。

    • modules

        将PHP作为httpd自己的模块来运行,这就不会产生额外的子进程的概念;

        正因为CGI的种种弊端,因此若将Web进程与CGI进程合二为一就简单多了,那么如何合二为一呢?httpd支持DSO(Dynamic Share Object,动态共享对象)机制,httpd有众多模块支持使用load moduling加载进来,不加载即表示不支持这个功能,而要想使用这个功能通过LoadModule加载即可。

        事实上,完全可以实现将PHP做成httpd的一个动态共享模块的,将PHP编译成php_mod,当httpd用到时,直接将这个模块装载进来用以解释PHP的内容即可。这也就意味着,在httpd进程内部其自身就能装载进这个模块来完成对于PHP页面的加载并且能够封装生成的结果而不用再进行进程间通信,直接转交给前端的处理程序即可。所以就使得就算有200个进程同时访问,我们的httpd也只需要启动200个进程处理即可。

    • fastcgi

        但上述情况还有一缺陷就是httpd进程既要处理静态内容又要处理动态内容,虽然已经大大简化了cgi这种模式所具有的缺陷,但依然有着性能上的缺陷,尤其是200个用户而服务器最多允许250个请求同时进来,而假如说在峰值的并发时刻,已经有400个用户同时到来了,服务器不能应付所有情况了。

        此时就需要在加一台服务器了,而且基于Nginx两台A记录做负载均衡,用户的请求有的到第一个服务器上,有的到第二个服务器上,这样就简单许多了。但进程本身需要处理动态和静态内容,进程本身处理的过程会很复杂,使得整个服务器的改进会变得非常困难。

        由此就有了第三种让PHP和httpd结合的模式,就是让httpd处理静态内容和处理动态内容相分离,这种方式同CGI类似,即使用不同的进程完成,但CGI是在用户请求时,httpd临时创建CGI进程。而另一种处理方式时我们可以安装一个PHP服务器,自身可以向httpd的prefork模型一样,事先生成很多空闲进程,而这些空闲进程不再需要httpd进行管理了,至于什么时候销毁这个进程,什么时候生成这个进程,都由这个服务器自我管理。当前端的httpd进程需要用到PHP的功能时,只需要向PHP服务器发送请求,PHP服务器找一个空闲进程分配给它响应即可,当分配给httpd的进程执行结束,这个进程被服务器收回来,由服务器自我管理销毁。此时httpd或后端服务器的通信就不再是CGI了,可以将此理解成是基于另外一种独立的服务器客户端之间的协议,这个时候httpd服务器是客户端,PHP是服务器,这种机制被称为FastCGI。类似于刚才解释的这种机制,在PHP5.4中已经自带了这种功能,叫fpm,fast php module,快速功能模块

      我们再明晰所谓动态网站内容请求响应的概念,想象一种场景,若httpd进程正在运行,突然间发现用户访问的是一个PHP页面如1.php,他发现这需要用PHP处理器处理,于是它通过CGI这种机制去调用PHP解释器去解释执行这段代码并且将解释的执行之后的代码返回给httpd,由httpd将这个返回的内容;需要说明的是,用户请求的一定是Web服务器对象,这个对象要么是一个纯文本文件、图片、视频等,但用户请求的是PHP文档,这个文档本质上是程序,这个程序需要执行,执行后的结果是什么?执行后的结果是一段数据流,httpd直接将这个数据流响应给客户端了,而httpd自身是不需要将数据流保存成数据文件的。同时,就算客户端请求的是静态文件,而这个文件保存在磁盘上,若这个文件要被httpd访问,它最后同样要转换成数据流(0、1代码),而数据流同样是通过网线发给客户端。由此可见,既然PHP解释器返回的是数据流,httpd直接把数据流响应给客户端即可。

      演示:

    [root@node1 ~]# vim /etc/httpd/conf/httpd.conf

    LoadModule cgi_module modules/mod_cgi.so    # 说明当前httpd是支持cgi的

    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"       # 要支持CGI要找到另外一个指令:ScriptAlias,用来定义在哪个目录中执行脚本的;/cgi-bin/:访问路径(URL或Alias),/var/www/cgi-bin/:访问的目录,因此到/var/www/cgi-bin/下写脚本;

    [root@node1 ~]# cd /var/www/cgi-bin/
    [root@node1 cgi-bin]# ls
    [root@node1 cgi-bin]# vim hello.sh

    #/bin/bash
    #
    /bin/date

    [root@node1 cgi-bin]# chmod +x hello.sh 
    [root@node1 cgi-bin]# ./hello.sh
    2020年 05月 29日 星期五 05:07:18 CST

    [root@node1 cgi-bin]# service httpd restart
    停止 httpd: [确定]
    正在启动 httpd: [确定]

    [root@node1 cgi-bin]# vim test.sh    # 从上图可看出,直接访问这个脚本,无法执行,因为httpd无法理解这个脚本;我们再写一个test.sh

    #!/bin/bash
    #
    cat << EOF
    Content-Type: text/html

    <pre>
    $(/bin/date)
    </pre>
    EOF

    [root@node1 cgi-bin]# chmod +x test.sh

      上述程序的执行结果并不是HTML格式的文档,因此浏览器最后显示为纯文本了。但这些纯文本信息的显示对用户体验并不友好。由此应该以HTML格式显示以增强用户体验。 

    七 配置Web服务器使用PHP的功能

      基于CentOS 6:

    [root@node1 cgi-bin]# yum list all | grep php

    php.x86_64 5.3.3-50.el6_10 @updates
    php-cli.x86_64 5.3.3-50.el6_10 @updates
    php-common.x86_64 5.3.3-50.el6_10 @updates
    php-mysql.x86_64 5.3.3-50.el6_10 @updates
    php-pdo.x86_64 5.3.3-50.el6_10 @updates
    cups-php.x86_64 1:1.4.2-81.el6_10 updates
    graphviz-php.x86_64 2.26.0-10.el6 base
    php-bcmath.x86_64 5.3.3-50.el6_10 updates
    php-dba.x86_64 5.3.3-50.el6_10 updates
    php-devel.x86_64 5.3.3-50.el6_10 updates
    php-embedded.x86_64 5.3.3-50.el6_10 updates
    php-enchant.x86_64 5.3.3-50.el6_10 updates
    php-fpm.x86_64 5.3.3-50.el6_10 updates
    php-gd.x86_64 5.3.3-50.el6_10 updates

      注意:5.3.3不支持fpm,到5.3.4才支持;

    [root@node1 cgi-bin]# yum install -y php php-mbstring    # php-mbstring:multi byte,对国际化的支持;

    [root@node1 ~]# rpm -ql php
    /etc/httpd/conf.d/php.conf
    /usr/lib64/httpd/modules/libphp5.so
    /var/lib/php/session
    /var/www/icons/php.gif
    [root@node1 ~]# cd /etc/httpd/conf.d/
    [root@node1 conf.d]# vim php.conf

    #
    # PHP is an HTML-embedded scripting language which attempts to make it
    # easy for developers to write dynamically generated webpages.
    #
    <IfModule prefork.c>      # httpd基于prefork或worker模型时,它们所依赖php的模块是不同的。

    LoadModule php5_module modules/libphp5.so
    </IfModule>
    <IfModule worker.c>
    LoadModule php5_module modules/libphp5-zts.so    
    </IfModule>

    #
    # Cause the PHP interpreter to handle files with a .php extension.
    #
    AddHandler php5-script .php      # 添加一个处理器,若是一个以.php结尾的文件的话,就使用php5-script工具处理。php5-script是httpd内置的一种处理机制,其能够实现在内部完成去识别这种文件。


    AddType text/html .php         # 添加类别,text/html,表示多媒体类型,此意为能将.php识别成纯文本格式;当然,.php是需要先执行的。

    #
    # Add index.php to the list of files that will be served as directory
    # indexes.
    #
    DirectoryIndex index.php        #  定义默认的主页面;

    #
    # Uncomment the following line to allow PHP to pretty-print .phps
    # files as PHP source code:
    #
    #AddType application/x-httpd-php-source .phps

    [root@node1 conf.d]# service httpd restart
    停止 httpd: [确定]
    正在启动 httpd: [确定]
    [root@node1 ~]# cd /var/www/html/
    [root@node1 html]# ls
    [root@node1 html]# vim index.php

    <title>test php</title>
    <h1>php info</h1>
    <?php
    phpinfo();      ; phpinfo():php内置函数,能够以web页面的方式显示服务器内部信息。
    ?>

      基于CentOS 7:

    [root@node1 ~]# yum install -y php php-mysql mariadb-server    # CentOS 6使用mysql-server,到CentOS 7及以后使用mariadb-server

    [root@node1 ~]# rpm -q mariadb
    mariadb-5.5.65-1.el7.x86_64
    [root@node1 ~]# rpm -q mariadb-server
    mariadb-server-5.5.65-1.el7.x86_64

    [root@node1 ~]# systemctl start mariadb.service

    [root@node1 ~]# ss -tnl
    State Recv-Q Send-Q Local Address:Port Peer Address:Port
    LISTEN 0 50 *:3306 *:*
    LISTEN 0 128 *:22 *:*
    LISTEN 0 100 127.0.0.1:25 *:*
    LISTEN 0 128 :::80 :::*
    LISTEN 0 128 :::22 :::*
    LISTEN 0 100 ::1:25 :::*
    [root@node1 ~]# mysql
    Welcome to the MariaDB monitor. Commands end with ; or g.
    Your MariaDB connection id is 2
    Server version: 5.5.65-MariaDB MariaDB Server

    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

    MariaDB [(none)]> quit
    Bye
    [root@node1 ~]# rpm -ql php
    /etc/httpd/conf.d/php.conf
    /etc/httpd/conf.modules.d/10-php.conf
    /usr/lib64/httpd/modules/libphp5.so
    /usr/share/httpd/icons/php.gif
    /var/lib/php/session

    [root@node1 ~]# cat /etc/httpd/conf.d/php.conf
    #
    # Cause the PHP interpreter to handle files with a .php extension.
    #
    <FilesMatch .php$>
    SetHandler application/x-httpd-php
    </FilesMatch>

    #
    # Allow php to handle Multiviews
    #
    AddType text/html .php

    #
    # Add index.php to the list of files that will be served as directory
    # indexes.
    #
    DirectoryIndex index.php

    #
    # Uncomment the following lines to allow PHP to pretty-print .phps
    # files as PHP source code:
    #
    #<FilesMatch .phps$>
    # SetHandler application/x-httpd-php-source
    #</FilesMatch>

    #
    # Apache specific PHP configuration options
    # those can be override in each configured vhost
    #
    php_value session.save_handler "files"
    php_value session.save_path "/var/lib/php/session"

    [root@node1 ~]# cd /var/www/html/
    [root@node1 html]# ls
    [root@node1 html]# vim index.php

    <?php
    phpinfo();    

    ?>

    [root@node1 html]# systemctl restart httpd

    [root@node1 html]# vim index.php

    <?php
    $link=mysql_connect('127.0.0.1','mysql','');
    if($link)
    echo "Success";
    else
    echo "Failure";

    mysql_close();
    ?>

    [root@node1 html]# systemctl stop mariadb.service

     

    php配置文件:/etc/php.ini

      其中每一段的标识的配置只对对应段生效,称为分段式的配置。因为php的模块很多,每一个模块使用的指令可能都不一样,所以分为全局的,对每一个模块都生效的,还有局部的,对每一个特定模块生效的;

      配置文件(php.ini)在PHP启动时被读取;对于服务器模块版本的PHP,仅在Web服务器启动时读取一次。而对于CGI和CLI版本,每次调用都会读取。

      ini格式的文件简要说明:

        [Foo]:Section Header

        director = value

        ;:注释符;

      注:若要在event或worker模式下使用php,需要lib-zts这样一个支持线程的包;

    php.ini核心配置选项:https://www.php.net/manual/zh/ini.core.php

    php.ini配置选项列表:https://www.php.net/manual/zh/ini.list.php

    八 基于CentOS 6以rpm包的方式组织提供LAMP

      LAMP即:L——Linux,A——Apache(httpd),M——Mysql(CentOS 7默认的rpm包为Mariadb),P——PHP;

      部署:

    [root@node1 html]# yum install -y httpd php php-mysql mysql-server

    [root@node1 html]# service mysqld start

    正在启动 mysqld: [确定]
    [root@node1 html]# service httpd start
    正在启动 httpd: [确定]

    [root@node1 html]# vim /var/www/html/index.php 

    <?php
    $conn = mysql_connect('127.0.0.1','root','');
    if($conn)
    echo "Connect Success";
    else
    echo "Connect Failure";
    mysql_close();
    phpinfo();
    ?>

    1 部署一个简单的应用——WordPress

      下载安装程序包 :

      安装:

    [root@node1 ~]# unzip wordpress-4.8.10.zip 

    [root@node1 ~]# ls wordpress
    index.php wp-activate.php wp-comments-post.php wp-cron.php wp-load.php wp-settings.php xmlrpc.php
    license.txt wp-admin wp-config-sample.php wp-includes wp-login.php wp-signup.php
    readme.html wp-blog-header.php wp-content wp-links-opml.php wp-mail.php wp-trackback.php

    [root@node1 ~]# cp -a wordpress /var/www/html/
    [root@node1 ~]# cd /var/www/html/
    [root@node1 html]# cd wordpress/

    [root@node1 wordpress]# ls
    index.php wp-activate.php wp-comments-post.php wp-cron.php wp-load.php wp-settings.php xmlrpc.php
    license.txt wp-admin wp-config-sample.php wp-includes wp-login.php wp-signup.php
    readme.html wp-blog-header.php wp-content wp-links-opml.php wp-mail.php wp-trackback.php
    [root@node1 wordpress]# cp wp-config-sample.php wp-config.php

    [root@node1 wordpress]# vim wp-config.php

    // ** MySQL settings - You can get this info from your web host ** //
    /** The name of the database for WordPress */
    define( 'DB_NAME', 'wpdb' );

    /** MySQL database username */
    define( 'DB_USER', 'wpuser' );

    /** MySQL database password */
    define( 'DB_PASSWORD', 'wppasswd' );

    [root@node1 wordpress]# mysql
    Welcome to the MySQL monitor. Commands end with ; or g.
    Your MySQL connection id is 3
    Server version: 5.1.73 Source distribution

    Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.

    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

    mysql> GRANT ALL ON wpdb.* TO 'wpuser'@'localhost' IDENTIFIED BY 'wppasswd';
    Query OK, 0 rows affected (0.00 sec)

    mysql> GRANT ALL ON wpdb.* TO 'wpuser'@'127.0.0.1' IDENTIFIED BY 'wppasswd';
    Query OK, 0 rows affected (0.00 sec)

    mysql> CREATE DATABASE wpdb;
    Query OK, 1 row affected (0.01 sec)

    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0.01 sec)

    mysql> exit
    Bye

     2 部署phpmyadmin(phpmyadmin是mysql的Web GUI)

     

      下载安装程序包:

      安装部署:

    [root@node1 ~]# tar xf phpMyAdmin-4.2.0-rc1-all-languages.tar.xz

    [root@node1 ~]# cp -a phpMyAdmin-4.2.0-rc1-all-languages /var/www/html/

    [root@node1 ~]# cd /var/www/html/
    [root@node1 html]# ls
    index.php phpMyAdmin-4.2.0-rc1-all-languages wordpress
    [root@node1 html]# ln -sv phpMyAdmin-4.2.0-rc1-all-languages/ pma
    "pma" -> "phpMyAdmin-4.2.0-rc1-all-languages/"

    [root@node1 html]# cd pma
    [root@node1 pma]# ls
    browse_foreigners.php doc pmd_pdf.php server_sql.php tbl_operations.php
    ChangeLog error_report.php pmd_relation_new.php server_status_advisor.php tbl_printview.php
    changelog.php examples pmd_relation_upd.php server_status_monitor.php tbl_relation.php
    chk_rel.php export.php pmd_save_pos.php server_status.php tbl_replace.php
    composer.json favicon.ico prefs_forms.php server_status_queries.php tbl_row_action.php
    config.sample.inc.php file_echo.php prefs_manage.php server_status_variables.php tbl_select.php
    CONTRIBUTING.md gis_data_editor.php print.css server_user_groups.php tbl_sql.php
    db_create.php import.php querywindow.php server_variables.php tbl_structure.php
    db_datadict.php import_status.php README setup tbl_tracking.php
    db_events.php index.php RELEASE-DATE-4.2.0-rc1 show_config_errors.php tbl_triggers.php
    db_export.php js robots.txt sql.php tbl_zoom_select.php
    db_import.php libraries schema_edit.php tbl_addfield.php themes
    db_operations.php LICENSE schema_export.php tbl_change.php themes.php
    db_printview.php license.php server_binlog.php tbl_chart.php transformation_overview.php
    db_qbe.php locale server_collations.php tbl_create.php transformation_wrapper.php
    db_routines.php navigation.php server_databases.php tbl_export.php url.php
    db_search.php phpinfo.php server_engines.php tbl_find_replace.php user_password.php
    db_sql.php phpmyadmin.css.php server_export.php tbl_get_field.php version_check.php
    db_structure.php phpunit.xml.hhvm server_import.php tbl_gis_visualization.php view_create.php
    db_tracking.php phpunit.xml.nocoverage server_plugins.php tbl_import.php view_operations.php
    db_triggers.php pmd_display_field.php server_privileges.php tbl_indexes.php webapp.php
    DCO pmd_general.php server_replication.php tbl_move_copy.php

    [root@node1 pma]# cp config.sample.inc.php config.inc.php

    [root@node1 phpMyAdmin]# tr -d 'a-zA-Z0-9' < /dev/urandom | head -30 |md5sum      #生成随机串
    24544cd3742047f2c6f38a74712540b2 -      

    [root@node1 phpMyAdmin]# vim config.inc.php

    /**
    * This is needed for cookie based authentication to encrypt password in
    * cookie. Needs to be 32 chars long.
    */
    $cfg['blowfish_secret'] = '24544cd3742047f2c6f38a74712540b2'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

    [root@node1 ~]# mysql

    Welcome to the MySQL monitor. Commands end with ; or g.
    Your MySQL connection id is 31
    Server version: 5.1.73 Source distribution

    Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.

    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

    mysql> SET PASSWORD FOR 'root'@'localhost'=PASSWORD('root');
    Query OK, 0 rows affected (0.00 sec)

    mysql> SET PASSWORD FOR 'root'@'127.0.0.1'=PASSWORD('root');
    Query OK, 0 rows affected (0.00 sec)

    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0.00 sec)

    mysql> quit
    Bye

       注:若浏览器输入URL访问后提示如"The mbstring extension is missing ...",安装好php-mbstring即可解决:

    yum install -y php-mbstring

        service httpd reload

     

      我们最后来思考一个问题,PHP解释器如何与MariaDB交互呢?

      其实php解释器本身无需与MariaDB交互,只有那些用到数据存储系统的如使用php语言开发的程序才需要与数据存储交互;

  • 相关阅读:
    A10 React+AntDesign 组件、父子组件通信、defaultProps、propTypes
    A09 React+AntDesign 模块封装,可供所有组件使用(以对todolist的小优化为例)
    A08 React+AntDesign todolist小项目(下)
    A07 React+AntDesign todolist小项目(上)
    A06 React+AntDesign 表单详解
    A05 React+AntDesign 事件对象、键盘事件、表单事件、类似vue的数据双向绑定
    A04 React+AntDesign 方法、事件、获取数据、改变数据、改变this指向
    A03 React+AntDesign 初识、目录结构、数据绑定、属性绑定、引入图片、循环数组
    泛型学习
    PowerDesigner16.5汉化破解版安装教程(含安装文件、汉化包、破解文件)
  • 原文地址:https://www.cnblogs.com/long-cnblogs/p/12983453.html
Copyright © 2011-2022 走看看