CentOS 7.0: 安装Apache+MariaDB+PHP

好久木有更新博客了,一看博客,发现上次更新的博文是2015-03-05,差不多有两个月没有更新过博客了。以前写的关于apache、Mariadb、php的部署也有很多,现在重新来整下,发表一篇整合式的博文。请看如下步骤:(全部都是自己一一截图)

第一步: 部署Apache

1.  通过yum命令来安装Apache

20150428143556

2. Apache安装成功!

20150428143629

3. 开启httpd服务

20150428143707

4. 测试部署效果

输入服务器IP

20150428143742

第二步: 部署Mariadb

1. 安装Mariadb

20150428143830

2. 安装Mariadb成功!

20150428143900

3.  启用Mariadb服务

20150428143929

4. 修改Mariadb的root密码

默认密码为空

20150428144208

5. Mariadb的root密码修改成功!

20150428144253

第三步: 部署php

1. 安装php

20150428144343

2. php安装成功!

20150428144400

3.  安装php组件

20150428144537

4. php组件安装成功!

20150428144556

5. 重启httpd以及mariadb服务

20150428144650

 

第四步: 部署站点

 1.  路径说明

Apache配置目录在/etc/httpd目录下

Mariadb配置目录在/etc/my.cnf和/etc/my.cnf.d/目录下

php配置目录在/etc/php.ini和/etc/php.d/目录下

apache默认的程序目录是/var/www/html

备注:

(1) Apache对应的/etc/httpd/conf/httpd.conf文件中包含了/etc/httpd/conf.d目录,所以需要添加配置信息可以在/etc/httpd/conf.d目录中天际*.conf文件即可。

(2) Mariadb对应的/etc/my.cnf也对应的包含了/etc/my.cnf.d/目录,所以也可以对应的在/etc/my.cnf.d/目录中添加即可。

(3) PHP对应的/etc/php.ini也是包含了/etc/php.d/目录,所以也可以对应的在/etc/php.d/目录中添加配置文件即可。

20150428152500

 

2. 创建站点目录

20150428153824

3. 绑定域名

删除/etc/httpd/conf.d目录下的默认配置文件welcome.conf

添加配置文件jhonse.conf

20150428154031

4. 创建日志目录

20150428154302

5. 重启httpd服务

20150428154405

6. 测试站点

20150428154530

 

第五步: 修改Mariadb数据库文件路径

1. 创建数据库文件夹,并设置权限

20150428154949

 

20150428160707

2. 修改mariadb配置文件/etc/my.cnf

20150428155147

20150428155329

 

3. 在/www/mariadb目录下创建log以及run目录

20150428155526

4. 将对应的数据库文件复制到新创建的文件目录下

20150428160029

 

5. 重启mariadb服务

20150428160835

6. 测试结果

20150428161310

 

第六步: 为Apache添加配置文件,不能通过IP访问,也就是防止别人乱解析

20150428161957

CentOS 7.0 yum安装Apache + PHP + MySQL

1. 安装Apache, PHP, MySQL以及php连接mysql库组件。

yum -y install httpd php mysql mysql-server php-mysql

 2. 安装apache扩展

yum -y install httpd-manual mod_ssl mod_perl mod_auth_mysql

 3. 安装php的扩展

yum -y install php-gd php-xml php-mbstring php-ldap php-pear php-xmlrpc

 4. 安装MySQL的扩展

yum -y install mysql-connector-odbc mysql-devel libdbi-dbd-mysql

 5. 配置开机启动服务

#/sbin/chkconfig httpd on             [设置apache服务器httpd服务开机启动]
#/sbin/service httpd start            [启动httpd服务,与开机启动无关]
#/sbin/service mysqld start           [启动mysqld服务,与开机启动无关]

apache的配置文件是/etc/httpd/conf下
modules放在/usr/lib/httpd下
php的配置文件在/etc/php.d/下 和/etc/php.ini
php的modules放在/usr/lib/php/modules下

6. 绑定域名

在/etc/httpd/conf/httpd.conf配置文件中,提供了范例:

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
#<VirtualHost *:80>
#    ServerAdmin webmaster@dummy-host.example.com
#    DocumentRoot /www/docs/dummy-host.example.com
#    ServerName dummy-host.example.com
#    ErrorLog logs/dummy-host.example.com-error_log
#    CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>

所以绑定域名可以跟着提供的范例来配置即可。

说明:

MySQL默认安装的后,root密码为空.

[window]在windows 2003中部署iis、ftp、php、mysql、zend环境

总是有很多人问,如何在windows 2003中去部署php、mysql、zend环境,让windows服务器既支持asp/asp.net,也支持php。其实只要配置好php环境就可以实现以上需求。而IIS就是微软提供出来支持asp和asp.net。如何部署?请看如下教程:

第一步: 安装IIS+FTP(前提是windows没有安装IIS)

开始—-控制面板—-添加或删除程序

27_253667_9cf6fd9ec3b12ee

 

出现如下界面点击“添加/删除windows组件(a)

27_253667_4d2ff5607cfdd7a

 

出现如下界面

27_253667_00463f0b5d479f1

 

选择“应用程序服务器”

27_253667_0f0962b297b171b

 

点击图片中的“详细信息”

27_253667_c9872ca9c6b5e50

 

出现上面的图片“选中internet 信息服务(iis)”,点击图片中的“详细信息”

27_253667_02fa6f300f2e774

 

选中图片中的“文件传输协议(ftp)服务”然后点击“确定”

T1Z4TkXlVuXXbW8b._-664-318

 

点击图片中的“浏览”选中“c:\win2003_sys\disc1\i386”如图

说明:如果没有此文件,请自行下载iis文件包

T1xlK1FahfXXXsK.j4-486-307

点击图片中的“打开”iis就开始安装了。如果系统是windows2003 64位的话该文件则位于“C:/win2003_sys/disc1/AMD64”下面

27_253667_bdaab867e75e81b

出现这个表示iis 和ftp 已经安装好了

第二步:  安装php

请点击查看 [windows]在windows系统中配置php环境

第三步: 安装mysql

请点击查看 [windows] 搭建mysql环境

第四步:  安装Zend环境

请点击查看 [windows] 部署zend环境

第五步:  安装ftp

请参照 [Windows]安装和使用FTP for Windows2008

第六步: 完毕!

亲们! 懂了么?快快留言吧!…

 

【php】时区设置

从php5.1.0开始,php.ini里加入了date.timezone 这个选项,默认情况下是关闭的

也就是显示的时间都是格林威治标准时间

有以下两种方法可以显示正常的时间。

1. 在关于时间的初始化的语句的上面加上

 date_default_timezone_set (XXX);
2. 修改php.ini查找date.timezone 去掉前面的分号
= 后面加XXX,重启http服务(如apache2或iis等)即可
关于XXX,大陆内地可用的值是:Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi (依次为重庆,上海,乌鲁木齐)
港台地区可用:Asia/Macao ,Asia/Hong_Kong ,Asia/Taipei (依次为澳门,香港,台北)
还有新加坡:Asia/Singapore

其他可用的值是:Etc/GMT-8 ,Singapore ,Hongkong ,PRC

 在页头使用date_default_timezone_set()设置默认时区为北京时间

 

date_default_timezone_set(‘PRC‘);
echo date(‘Y-m-d H:i:s’);
date_default_timezone_set用法如下

date_default_timezone_set

(PHP 5 >= 5.1.0RC1)

date_default_timezone_set — 设定用于一个脚本中所有日期时间函数的默认时区

说明

bool date_default_timezone_set ( string timezone_identifier )

date_default_timezone_set() 设定用于所有日期时间函数的默认时区。

注: 自 PHP 5.1.0 起(此版本日期时间函数被重写了),如果时区不合法则每个对日期时间函数的调用都会产生一条 E_NOTICE 级别的错误信息。

参数

 

timezone_identifier
时区标识符,例如 UTC 或 Europe/Lisbon

返回值
本函数永远返回 TRUE(即使 timezone_identifier 参数不合法)。

 

——————————————————————————————

 

再附上时区标识符:

 

CET
CST6CDT
Cuba
EET
Egypt
Eire
EST
EST5EDT
Etc/GMT
Etc/GMT+0
Etc/GMT+1
Etc/GMT+10
Etc/GMT+11
Etc/GMT+12
Etc/GMT+2
Etc/GMT+3
Etc/GMT+4
Etc/GMT+5
Etc/GMT+6
Etc/GMT+7
Etc/GMT+8
Etc/GMT+9
Etc/GMT-0
Etc/GMT-1
Etc/GMT-10
Etc/GMT-11
Etc/GMT-12
Etc/GMT-13
Etc/GMT-14
Etc/GMT-2
Etc/GMT-3
Etc/GMT-4
Etc/GMT-5
Etc/GMT-6
Etc/GMT-7
Etc/GMT-8
Etc/GMT-9
Etc/GMT0
Etc/Greenwich
Etc/UCT
Etc/Universal
Etc/UTC
Etc/Zulu
Factory
GB
GB-Eire
GMT
GMT+0
GMT-0
GMT0
Greenwich
Hongkong
HST
Iceland
Iran
Israel
Jamaica
Japan
Kwajalein
Libya
MET
MST
MST7MDT
Navajo
NZ
NZ-CHAT
Poland
Portugal
PRC
PST8PDT
ROC
ROK
Singapore
Turkey
UCT
Universal
UTC
W-SU
WET

【php】读取文件的常见方法

1.fread

string fread ( int $handle , int $length )

fread() 从 handle 指向的文件中读取最多 length 个字节。该函数在读取完最多 length 个字节数,或到达 EOF 的时候,或(对于网络流)当一个包可用时,或(在打开用户空间流之后)已读取了 8192 个字节时就会停止读取文件,视乎先碰到哪种情况。

fread() 返回所读取的字符串,如果出错返回 FALSE。

<?php
    $filename = "/usr/local/something.txt";
    $handle = fopen($filename, "r");//读取二进制文件时,需要将第二个参数设置成'rb'

    //通过filesize获得文件大小,将整个文件一下子读到一个字符串中
    $contents = fread($handle, filesize ($filename));
    fclose($handle);
?>

 

如果所要读取的文件不是本地普通文件,而是远程文件或者流文件,就不能用这种方法,因为,filesize不能获得这些文件的大小。此时,你需要通过feof()或者fread()的返回值判断是否已经读取到了文件的末尾。

例如:

<?php
    $handle = fopen('http://www.baidu.com', 'r');
    $content = '';
    while(!feof($handle)){
        $content .= fread($handle, 8080);
    }
    echo $content;
    fclose($handle);
?>

或者:

<?php
    $handle = fopen('http://www.baidu.com', 'r');
    $content = '';
    while(false != ($a = fread($handle, 8080))){//返回false表示已经读取到文件末尾
        $content .= $a;
    }
    echo $content;
    fclose($handle);
?>

 

2.fgets

 string fgets ( int $handle [, int $length ] )

  fgets()从 handle 指向的文件中读取一行并返回长度最多为 length – 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了 length – 1 字节后停止(看先碰到那一种情况)。如果没有指定 length,则默认为 1K,或者说 1024 字节。

<?php
    $handle = fopen('./file.txt', 'r');
    while(!feof($handle)){
        echo fgets($handle, 1024);
    }
    fclose($handle);
?>

length 参数从 PHP 4.2.0 起成为可选项,如果忽略,则行的长度被假定为 1024。从 PHP 4.3 开始,忽略掉 length 将继续从流中读取数据直到行结束。如果文件中的大多数行都大于 8KB,则在脚本中指定最大行的长度在利用资源上更为有效。从 PHP 4.3 开始本函数可以安全用于二进制文件。早期的版本则不行。

3.fgetss

string fgetss ( resource $handle [, int $length [, string $allowable_tags ]] )

跟fgets功能一样,但是fgetss会尝试从读取的文本中去掉任何 HTML 和 PHP 标记,可以用可选的第三个参数指定哪些标记不被去掉。

<?php
    $handle = fopen('./file.txt', 'r');
    while(!feof($handle)){
        echo fgetss($handle, 1024, '<br>');
    }
    fclose($handle);
?>

 

4.file

array file ( string $filename [, int $use_include_path [, resource $context ]] )
将文件内容读入一个数组中,数组的每一项对应文件中的一行,包括换行符在内。不需要行结束符时可以使用 rtrim() 函数过滤换行符。

<?php
    $a = file('./file.txt');
    foreach($a as $line => $content){
        echo 'line '.($line + 1).':'.$content;
    }
?>

 

5.readfile

int readfile ( string $filename [, bool $use_include_path [, resource $context ]] )

读入一个文件并写入到输出缓冲。返回从文件中读入的字节数。如果出错返回 FALSE 并且除非是以 @readfile() 形式调用,否则会显示错误信息。

<?php
    $size = readfile('./file.txt');
    echo $size;
?>

 

6.file_get_contents

string file_get_contents ( string $filename [, bool $use_include_path [, resource $context [, int $offset [, int $maxlen ]]]] )

将文件读入一个字符串。第三个参数$context可以用来设置一些参数,比如访问远程文件时,设置超时等等。

另外,file_get_contents相对于以上几个函数,性能要好得多,所以应该优先考虑使用file_get_contents。但是readfile貌似比file_get_contents性能好一点(?),因为它不需要调用fopen。

<?php 
    $ctx = stream_context_create(array( 
        'http' => array( 
            'timeout' => 1    //设置超时
            ) 
        ) 
    ); 
    echo file_get_contents("http://www.baidu.com/", 0, $ctx); 
?>

 

7.fpassthru

int fpassthru ( resource $handle )

将给定的文件指针从当前的位置读取到 EOF 并把结果写到输出缓冲区。

<?php 
    header("Content-Type:text/html;charset=utf-8"); 
    $handle = fopen('./test2.php', 'r');
    fseek($handle, 1024);//将指针定位到1024字节处
    fpassthru($handle);
?>

 

8.parse_ini_file

array parse_ini_file ( string $filename [, bool $process_sections ] )

parse_ini_file() 载入一个由 filename 指定的 ini 文件,并将其中的设置作为一个联合数组返回。如果将最后的 process_sections 参数设为 TRUE,将得到一个多维数组,包括了配置文件中每一节的名称和设置。process_sections 的默认值是 FALSE。

注意:

1. 如果 ini 文件中的值包含任何非字母数字的字符,需要将其括在双引号中(”)。
2. 有些保留字不能作为 ini 文件中的键名,包括:null,yes,no,true 和 false。值为 null,no 和 false 等效于 “”,值为 yes 和 true 等效于 “1”。字符 {}|&~![()” 也不能用在键名的任何地方,而且这些字符在选项值中有着特殊的意义。

test.ini文件内容:

; This is a sample configuration file
; Comments start with ';', as in php.ini

[first_section]
one = 1
five = 5
animal = BIRD

[second_section]
path = "/usr/local/bin"
URL = "http://www.example.com/~username

test.php内容:

<?php 
    $config = parse_ini_file('./test.ini', ture);
    print_r($config);
?>

输出内容:

Array
(
    [first_section] => Array
        (
            [one] => 1
            [five] => 5
            [animal] => BIRD
        )

    [second_section] => Array
        (
            [path] => /usr/local/bin
            [URL] => http://www.example.com/~username
        )

)

 

几个注意事项:

1. 鼓励在处理二进制文件时使用 b 标志,即使系统并不需要,这样可以使脚本的移植性更好。

2. allow_url_fopen选项激活了 URL 形式的 fopen 封装协议使得可以访问 URL 对象例如文件。默认的封装协议提供用 ftp 和 http 协议来访问远程文件,一些扩展库例如 zlib 可能会注册更多的封装协议。出于安全性考虑,此选项只能在 php.ini 中设置。

3. 如果要打开有特殊字符的 URL (比如说有空格),就需要使用 urlencode() 进行 URL 编码。

来源于网络,以便自己以后所查看。

【php】serialize函数和unserialize函数

serialize函数是将数组转换成字符串,用于将数组的数值以字符串的形式存储。

而unserialize函数刚好是一个逆方向,将已经转换成的字符串恢复成数组。

看如下例子:


$a=array('data'=>"hi", 123);
$b=serialize($a);
echo $b; //这个就是描述过的数组但在这里是一个字符串而已
$c=unserialize($b); //把描述过的数据恢复
print_r($c); //还原成为 $a ,数组结构并没有丢失。

 

【php】phpmail在本地测试成功,而在服务器上失败?

因为需要发送email服务,所以就选择用phpmail类,但是出现一个问题:在本地测试的时候发送email成功,但是一上传到服务器,提示提供的邮箱账号有问题。就这个原因,纠结了几天,在百度上查资料得知:用phpmail类发送邮件时,服务器要支持sockets服务。根据这个说法,去服务器上修改,但是还是提示邮箱账号有问题。最后没办法,重新看代码,不过还是发现了问题之所在,在初始化phpmail类的时候,忘了给端口赋值,而默认就为25.请看如下代码:

		$mail = new PHPMailer();

		$mail->IsSMTP();

		$mail->Host = "smtpout.secureserver.net";

		$mail->Port = 80;

		$mail->SMTPAuth = true;

		$mail->Username = "jhonse@jhonse.com";

                ...........

结果是邮件服务器提供的端口改了…

【php】生成GUID

最近在写一个discuz x2插件,遇到了一个问题,提交数据的时候,需要一个标识码来储存。以前记得用c++/c#的时候,都有代码实现如何生成GUID,而PHP生成GUID,却没有实现过。经过百度查询,也有对应的代码生成,代码如下(希望对大家有用):

function create_guid() {
$charid = strtoupper(md5(uniqid(mt_rand(), true)));
$hyphen = chr(45);// “-”
$uuid = chr(123)// “{”
.substr($charid, 0, 8).$hyphen
.substr($charid, 8, 4).$hyphen
.substr($charid,12, 4).$hyphen
.substr($charid,16, 4).$hyphen
.substr($charid,20,12)
.chr(125);// “}”
return $uuid;
}

【php】数据类型转换(字符转数字,数字转字符)

PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有:

(int)、(integer):转换成整形
(float)、(double)、(real):转换成浮点型
(string):转换成字符串
(bool)、(boolean):转换成布尔类型
(array):转换成数组
(object):转换成对象
PHP数据类型有三种转换方式:

在要转换的变量之前加上用括号括起来的目标类型
使用3个具体类型的转换函数,intval()、floatval()、strval()
使用通用类型转换函数settype(mixed var,string type)
第一种转换方式: (int) (bool) (float) (string) (array) (object)

第二种转换方式: intval() floatval() strval()

第三种转换方式: settype();