一、 开发环境
windows下将Apache+PHP+Mysql 集成环境
二、 开发工具
PHPstorm
三、基础语言
1.分界标示符
PHP分界标示符确定PHP脚本的开始和结束位置,在PHP语言中有四种不同风格的分界标示符可以让PHP代码嵌入到HTML代码中,分别如下:
a.PHP标准分界符:<?php 和 ?>
b.PHP简写分界符:<? 和 ?>
2.变量
由字符,数字,下划线组成,首字母必须是字符或下划线变量以$开头。
3.PHP是区分大小写的。
4.语句以分号结束
5.注释:
/* */
//
#
共上面三种
6.数据类型
integer,floator double,string,array,object(对象类型),Boolean,NULL,resource(资源)
<?php
$c = mysql_connect();
echo get_resource_type($c)."\n";
// 打印:mysql link
$fp = fopen("foo","w");
echo get_resource_type($fp)."\n";
// 打印:file
$doc = new_xmldoc("1.0");
echo get_resource_type($doc->doc)."\n";
// 打印:domxml document
?>
7.字符串
用双引号或者单引号,但有区别
双引号里面的变量和转义字符都会被解析,而单引号里面的就都当做是字符串来处理。如果在双引号中要想不解析变量,就可以用’\’加在前面。
<?php
$str = "hello";
print"nihao,are you \$str = $str";
print"<br/>";
print'nihao,are you $str = $str';
?>
8.数组初始化
数组定义:
$arr = array();
$arr[0]='nihoa';
$arr[1]=1;
正常数组初始化:
方式一:
$arr_family=array('LinNa','Jhon','Peter');
方式二:
$arr_family[] ='LinNa';
$arr_family[] ='Jhon';
$arr_family[] = 'Peter';
哈希表形式数组初始化:
方式一:
$arr_family['mother'] = 'LinNa';
$arr_family['father'] = 'Jhon';
$arr_family['mother'] = 'Peter';
方式二:
$arr_family=array('mother'=>'LinNa','father'=>'Jhon','son'=>'Peter');
9.对象
类:
Class类名
{
Public $属性名;
Public function 函数名()
{
$变量名;
}
}
<?php
classfoo{
public $C_foo = 'This is a class';
public function do_foo()
{
echo 'Doingfoo';
}
}
$newfoo = new foo();
print$newfoo->C_foo;
print"<br/>";
$newfoo->do_foo();
?>
效果如下:
10.NULL
空,可以使null,也可以使NULL,不区分大小写
NULL表示没有值的变量。
11.数据类型转换
一般情况下,数据类型会自动转换,同时我们也可以进行强制类型转换,强制类型转换的方法是把数据类型用括号括起来放在要转换的数据类型前面即可。
(int)/(integer)转换为整形值
(real),(double),(float)转换为双精度
(string)转换为字符串
(array)转换为数组
(object)转换为对象。
12.变量不需要定义就可以使用。
在函数外部定义的变量时全局变量,在函数内部定义或使用的变量是局部变量。
在函数内部不能访问函数外部的变量
要想访问,就必须在函数内部,复制一个全局变量,global 全局变量名,这样用的变量才是全局变量。
<?php
$a =1;
$b =2;
functionSum()
{
$b=$a+$b;
print "Internal\$b is $b";
}
Sum();
print"<br>";
print"Out \$b is $b";
?>
效果如下:
从上面可以看到,函数里面是没法调用全局变量的,要想调用,需要申明。
<?php
$a =1;
$b =2;
functionSum()
{
global$a;
global $b;
$b= $a+ $b;
print "Internal\$b is $b";
}
Sum();
print"<br>";
print"Out \$b is $b";
?>
效果如下:
我们看见,要想在函数里面调用全局变量,必须先用global来复制一遍这个变量,才能使用。
13.静态变量:用static修饰的变量
1.对于全局变量,只要定义了,就会以键值的形式存到$GLOBAL这个数组中,所以,如果我们想在函数中使用全局变量,也可以$GLOBAL[$全局变量名]的形式来引用。
$GLOBALS:包含指向当前程序中全局范围内有效的变量,它是一个数组,该数组的索引(或键名)就是全局变量的名称。
2.PHP还可以获得外部来的变量,外部来的有四种类型:
$_GET:通过HTTP的GET方法提交至脚本的表单变量。
$_POST:通过HTTP的POST方法提交至脚本的表单变量。
$_FILE:通过HTTP的POST文件上传提交至脚本的变量。
$_COOKIE:通过HTTP的Cookies方法提交至脚本的变量。
14.获取HTML的变量
HTML中的设计:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTD HTML 4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
<title>Inserttitle here</title>
</head>
<body>
<formaction="index.php"method="post">
name:<inputtype="text"name="User[name]"><br>
sex:<inputtype="text"name="User[sex]"><br>
Email:<inputtype="text"name="User[Email]"><br>
<inputtype="submit"value="Submit">
</form>
</body>
</html>
Index.php文件:
<?php
$user =$_POST['User'];
echo"name: $user[name]<br>\n";
echo"name: $user[sex]<br>\n";
echo"name: $user[Email]<br>\n";
?>
效果:
15.运算符:+ - * / %
16.连接字符串“.”
用 . 把两个字符串连接起来,如果两个字符串中有一个数字,将自动转换为字符串,但数字两边要加空格,如果两个都是数字,如果不加空格,就会当做小数点来处理,如果当空格,就会当连接字符串处理。
echo"gege". 3 . 1 . "nihao". 3.1;
?>
效果如下:
17.赋值运算
%= 将左边的值对右边取余数
.= 将右边的字符串加到左边
18.关系运算符
== 等于 $a==$b $a 和$b的值相等
=== 恒等于 $a===$b $a和$b的数据类型和值都相等。
$a = 4;
$b = '4';
if($a==$b)
{
echo '$a==$b';
}
else
{
echo '$a!=$b';
}
echo"<br>";
if($a===$b)
{
echo '$a===$b';
}
else
{
echo '$a!==$b';
}
19.语句
If
If else if
Switch()
{
Case “”:
Xxxx
Case “”:
xxxxx
}
For
While()
{}
Do
{}while();
Break;
Continue;
20.函数
函数的参数传递有两种:一种是值传递,一种是引用传递
值传递是在传递的过程中,又创建了一个副本,导致不会改变原来的数据
引用传递是会改变原来数据的。
值传递函数:function add($a,$b)
引用传递函数:funciton add(&$a,&$b)
<?php
$a=1;
$b=2;
functionaddvalue($arg1,$arg2)
{
$arg1=$arg1+$arg2;
print "internal\$a is $arg1";
}
addvalue($a,$b);
print"<br>Out \$a is $a";
?>
效果如下:
<?php
$a=1;
$b=2;
functionaddvalue(&$arg1,&$arg2)
{
$arg1=$arg1+$arg2;
print "internal\$a is $arg1";
}
addvalue(&$a,&$b);
print"<br>Out \$a is $a";
?>
效果如下:
21.系统函数:date()
<?php
$a = date("Y-m-d h:i:s w");
echo$a;
?>
22.PHP文件的HTML中,可以添加php文件
注意上面不是.html 而是.php
在.php里面可以写html 代码
上面我们是通过require来保护php文件,还可以通过include,效果一样。
效果如下:
上面的<hr>是代表添加一横线的意思。
23.数组
下面有数组的定义,赋值,以及获取数组的长度:
<?php
$arr = array();
$arr[0]=1;
$arr[1]=2;
$count=count($arr);
echo$count;
?>
效果如下:
我们可以通过count()函数或者sizeof()函数来获取数组的大小。
24.数组的遍历
数组的遍历可以通过for,也可以通过foreach
Foreach的写法如下:
<?php
$arr = range(1,10);
foreach( $arr as $variable)
echo $variable.",";
?>
Range的作用取得从最小到最大的递增数,默认步长为1,也可以在第三个参数中设置步长。
注意上面的foreach的写法,数组写在前面,变量写在后面
效果如下:
25.非数字索引数组,类哈希数组
按键值方式存储的数组
创建数组:
<?php
$arr = array('PHP'=>50,'Java'=>60,'C++'=>'nihao');
$newarr['xiaoming']=30;
$newarr['zhulei']='male';
$newarr[10]='duoduo';
foreach($arr as $mykey=>$myvalue)
{
echo "\$mykey is$mykey and \$myvalue is $myvalue"."<br>";
}
foreach($newarras $mykey=>$myvalue)
{
echo "\$mykey is$mykey and \$myvalue is $myvalue"."<br>";
}
?>
效果如下:
如果要想添加一个数据,直接输就行了,比如添加一个$newarr[‘zhagnyang’]=10;
如果zhangyan已经存在,就会被覆盖。
删除元素:
Unset(数组名[‘键名’]);
<?php
$newarr['xiaoming']=30;
$newarr['zhulei']='male';
$newarr[10]='duoduo';
foreach($newarr as $mykey=>$myvalue)
{
echo "\$mykey is$mykey and \$myvalue is $myvalue"."<br>";
}
echo"*********************************************************";
echo"<br>";
$newarr['zhangyang']=10;
foreach($newarr as $mykey=>$myvalue)
{
echo "\$mykey is$mykey and \$myvalue is $myvalue"."<br>";
}
echo"*********************************************************";
echo"<br>";
unset($newarr['xiaoming']);
foreach($newarr as $mykey=>$myvalue)
{
echo "\$mykey is$mykey and \$myvalue is $myvalue"."<br>";
}
?>
效果如下:
检测键是否存在:
Isset(数组名[‘键名’])
<?php
$newarr['xiaoming']=30;
$newarr['zhulei']='male';
$newarr[10]='duoduo';
if(isset($newarr['zhulei']))
{
echo "yes, keyzhulei is exist!";
}
else
{
echo "no, keyzhulei is not exist!";
}
?>
效果如下:
26.二维数组
创建二维数组:
<?php
$book = array(
array('Php','C++','Java'),
array(1,2,3),
array('zhulei','xiaoming','guozhi'),
array('nihao','ok','tt')
);
echocount($book,0);
?>
效果如下:
二维数组取值:
<?php
$book = array(
array('Php','C++','Java'),
array(1,2,3),
array('zhulei','xiaoming','guozhi'),
array('nihao','ok','tt')
);
for($i =0;$i<4;$i++)
{
for($j=0;$j<3;$j++)
{
echo $book[$i][$j].",";
}
echo "<br>";
}
?>
效果如下:
我们可以通过count($book)来获取二维数组的第一维的长度
我们可以通过这样的方法来获取第二维数组的长度:
<?php
$book = array(
array('Php'),
array(1,2),
array('zhulei','xiaoming','guozhi'),
array('nihao','ok')
);
foreach($book as $one)
{
echo "size is".sizeof($one);
echo "<br>";
}
?>
效果如下:
对于键值数组也是一样的。
27.数组排序
一维数组:对于数字索引数组,可以用sort()来进行排序,而对于非数字索引,可以使用asort()函数。
<?php
$book = array(1,4,3,9,7,5);
sort($book);
foreach($book as $one)
{
echo $one;
echo "<br>";
}
?>
效果如下:
Assort()是对键值数组中按值进行排序的,一般值都是数字,这样排序比较有意义;
28.数组的合并
Array_merge(arr,arr1),把arr1追加到arr中
数组相交:
Array_intersect(arr,arr1)求arr和arr1的交集。
29.文件包含
使用include
Include(stringfilename)
Include进来的文件里面的变量和包含它的文件使用的是同一个变量
<?php
$a =100;
echo"\$a: $a \n";
include('index.php');
echo"\$a: $a \n";
echo"\$b: $b \n" ;
?>
Index.php:
<?php
$a =200;
$b =400;
?>
效果如下:
对于被包含的文件(如index.php),我们可以使用return语句来终止它的执行,也可以使用return语句来返回一个值.
<?php
$a =100;
echoinclude 'index.php';
?>
Index.php:
<?php
return $a/2;
?>
效果如下:
Include_once语句和include的区别在于:如果该文件中的代码已经被包含了,则不会再次被包含,就是只能include一个文件一次。
使用require
Require的作用和include是一样的,唯一不同在于include是执行是包含,而require是先全部包含,不管会不会执行都包含,然后再执行。
如果require发现找不到文件,就会报错,而include发现找不到文件,只会警告,程序继续往下走。
30.全局数组:
$_SERVER[]:包含一些诸如头信息,路径和脚本等信息的数组。
元素:
1.$_SERVER['HTTP_ACCEPT_LANGUAGE']//浏览器语言
显示:zh-cn
2.$_SERVER['REMOTE_ADDR'] //当前用户 IP 。
显示:127.0.0.1
3.$_SERVER['REMOTE_HOST'] //当前用户主机名
显示:
4$_SERVER['REQUEST_URI'] //URL
显示:/test.php
5$_SERVER['REMOTE_PORT'] //端口。
显示:3864
6$_SERVER['SERVER_NAME'] //服务器主机的名称。
显示:127.0.0.1
7$_SERVER['PHP_SELF']//正在执行脚本的文件名
显示:/test.php
8$_SERVER['argv'] //传递给该脚本的参数。
显示:ARRAY
9 $_SERVER['argc'] //传递给程序的命令行参数的个数。
显示:0
10$_SERVER['GATEWAY_INTERFACE']//CGI 规范的版本。
显示: CGI/1.1
11$_SERVER['SERVER_SOFTWARE'] //服务器标识的字串
显示:Apache/2.0.52(Win32) PHP/5.2.1
12$_SERVER['SERVER_PROTOCOL'] //请求页面时通信协议的名称和版本
显示:HTTP/1.1
13$_SERVER['REQUEST_METHOD']//访问页面时的请求方法
显示:GET
14$_SERVER['QUERY_STRING'] //查询(query)的字符串。
显示:
15 $_SERVER['DOCUMENT_ROOT'] //当前运行脚本所在的文档根目录
显示:D:/ProgramFiles/Apache/www
16$_SERVER['HTTP_ACCEPT'] //当前请求的 Accept: 头部的内容。
显示:*/*
17 $_SERVER['HTTP_ACCEPT_CHARSET'] //当前请求的 Accept-Charset: 头部的内容。
显示:
18$_SERVER['HTTP_ACCEPT_ENCODING'] //当前请求的 Accept-Encoding: 头部的内容
显示:gzip,deflate
19$_SERVER['HTTP_CONNECTION'] //当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。
显示:Keep-Alive
20 $_SERVER['HTTP_HOST'] //当前请求的 Host: 头部的内容。
显示:127.0.0.1:8080
21$_SERVER['HTTP_REFERER'] //链接到当前页面的前一页面的 URL 地址。
显示:http://127.0.0.1:8080/
22$_SERVER['HTTP_USER_AGENT'] //当前请求的 User_Agent: 头部的内容。
显示:Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR1.1.4322; .NET CLR 2.0.50727)
23$_SERVER['HTTPS']//如果通过https访问,则被设为一个非空的值(on),否则返回off
显示:
24$_SERVER['SCRIPT_FILENAME'] #当前执行脚本的绝对路径名。
显示:D:/ProgramFiles/Apache/www/test.php
25$_SERVER['SERVER_ADMIN'] #管理员信息
显示:w@w.com
26$_SERVER['SERVER_PORT'] #服务器所使用的端口
显示:8080
27$_SERVER['SERVER_SIGNATURE'] #包含服务器版本和虚拟主机名的字符串。
显示:Apache/2.0.52(Win32) PHP/5.2.1 Server at 10.145.40.150 Port 8080
28$_SERVER['PATH_TRANSLATED'] #当前脚本所在文件系统(不是文档根目录)的基本路径。
显示:
29 $_SERVER['SCRIPT_NAME'] #包含当前脚本的路径。这在页面需要指向自己时非常有用。
显示 :/test.php
30$_SERVER['PHP_AUTH_USER'] #当 PHP 运行在Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。
显示:
31$_SERVER['PHP_AUTH_PW'] #当 PHP 运行在Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。
显示:
32$_SERVER['AUTH_TYPE'] #当 PHP 运行在Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型
$_ENV[]:包含环境变量的超全局数组
$_GET[]:是一个包含所有以HTTP GET方式传递的变量的超全局数组
$_POST[]:是一个包含所有以HTTP POST方式传递的变量的一个超全局数组。
$_FILES[]:是一个通过HTTP POST方式传递的已经上传文件项目组成的数组。
$_COOKIE[]:是一个通过HTTP Cookies传递的变量所组成的一个超全局数组
$_SESSION[]:是一个当前脚本中session变量的一个超全局数组
$_REQUEST[]是一个包含$_GET[],$_POST[],和$_COOKIE[]数组中全部内容的超全局数组
31.print和echo
Print只支持一个参数,而echo支持多个参数
Print输出字符串总是返回值1,而echo输出字符串将不返回值。
32正则表达式
元字符 | 用途 |
. | 所有单个字符 |
| | 分隔多个模式 |
- | 指定一个字符范围 |
^ | 出现在行头或在字符串开头 |
$ | 匹配行尾货字符串尾 |
\d | 匹配所有的一位数字 |
\D | \d的相反,匹配所有的非数字字符 |
\i | 不区分大小写 |
[A-Z] | 匹配所有A到Z的任意一个 |
[^A-Z] | 匹配所有非 A到Z的任意 |
X? | 出现0次或1次 |
X* | 零个或多个 |
X+ | 一个或多个 |
X{n} | 匹配n个 |
X{n,m} | 匹配n到m个 |
\b | 代表单词的开头或结尾 |
正则表达式返回正则表达式匹配的结果。
33面向对象的PHP
1.类定义
class className
{
//类成员列表
//类方法列表function
}
定义类的属性,首先要定义它的访问权限public/private/protect
2.在执行对象时自动定义一个$this的特殊变量,该变量表示对对象本身的引用,可以通过
$this ->的方式来引用对象的所有属性和方法。
3.构造函数
function __construct()
{
}
析构函数时构造函数的相反,在对象引用结束时,自动会调用析构函数。
4.类的继承:
类的继承关键字为:extends
在PHP中,使用parent表示父类,使用self表示当前类
使用parent 和self进行属性和方法的调用时,需要使用范围解析操作符:::
5.子类和父类的属性和方法调用:
方法的调用:
$this->方法名();如果子类中有该方法则调用的是子类中的方法,若没有则是调用父类中的。
parent::则始终调用的是父类中的方法。
变量的调用:
$this->变量名;如果子类中有该变量则调用的是子类中的,若没有则调用的是父类中的
注意:子类无法访问父类的私有属性,那为什么访问却没有出错呢?其实是在子类中新建了一个变量而已,因为PHP是弱定义的语言。
<?php
class Animal
{
public $name = "Animal name";
public $age =18;
public function cry()
{
echo "Animal can cry";
echo "<br>";
}
}
class catextends Animal
{
public $name;
public $color;
function __construct($selfname,$color,$parentname,$age)
{
$this->name = $selfname;
$this->color =$color;
$this->age=$age;
}
public function cry()
{
echo "cat can cry";
echo "<br>";
}
public function printout()
{
self::cry();
parent::cry();
}
}
$cat = new cat("cat name","red","animalname",19);
$cat->printout();
echo "this.\$name is $cat->name";
echo "<br>";
echo "this.\$age is $cat->age";
echo "<br>";
echo "this.\$color is $cat->color";
echo "<br>";
?>
效果如下:
6.类的常量
const 常量名 = value;
可以在类中通过self::常量名来调用。
类的常量属于类本身,不能被继承和访问。
7.访问权限
public:可以被继承,也可以通过实例访问
protect:可以被继承,不能通过实例访问
private:不能被继承,也不能通过实例访问
8.静态属性和方法
静态属性和类的常量一样,只属于类本身,通过static来定义。
方法也是一样的。
9.字符串转换函数:__toString()函数
这个函数和构造函数一样,都是系统内置的函数。
如果我们直接用print 或echo 来打印对象实例名(注意是对象实例名),就会自动调用这个函数。
<?php
class Animal
{
public $name = "Animal name";
public $age =18;
function __toString()
{
echo "you are printing the class";
echo "<br>";
return $this->name;
}
}
$animal = new Animal();
echo $animal;
?>
效果如下:
10.内置克隆方法__clone()
当我们进行对对象实例进行克隆,克隆出一个新的对象实例出来时,就会自动调用类中的这个克隆函数。
<?php
class Animal
{
public $name = "Animal name";
public $age =18;
function __clone()
{
echo "you are wanting to clone a new clasobject";
echo "<br>";
}
}
$animal = new Animal();
$coloneNewAnimal = clone $animal;
echo "nameis" .$coloneNewAnimal->name;
echo "<br>";
echo "ageis" .$coloneNewAnimal->age;
echo "<br>";
?>
效果如下:
11.__get()和__set()
我们一般情况下,会把类中的属性设置为private,然后通过get和set函数来取得和设置属性的值,在Java中,需要对每一个属性写get和set的值,这很麻烦。
在PHP中,只要写一次,全部通用。
//__get()方法用来获取私有属性
function__get($property_name)
{
if(isset($this->$property_name))
{
return($this->$property_name);
}else
{
return(NULL);
}
}
//__set()方法用来设置私有属性
function__set($property_name,$value)
{
$this->$property_name=$value;
}
用法如下:
<?php
class Person
{
//下面是人的成员属性,都是封装的私有成员
private $name; //人的名子
private $sex; //人的性别
private $age; //人的年龄
//__get()方法用来获取私有属性
function __get($property_name)
{
echo "在直接获取私有属性值的时候,自动调用了这个__get()方法<br>";
if(isset($this->$property_name))
{
return($this->$property_name);
}
else
{
return(NULL);
}
}
//__set()方法用来设置私有属性
function __set($property_name,$value)
{
echo "在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值<br>";
$this->$property_name= $value;
}
}
$p1=new Person();
//直接为私有属性赋值的操作,会自动调用__set()方法进行赋值
$p1->name="张三";
$p1->sex="男";
$p1->age=20;
//直接获取私有属性的值,会自动调用__get()方法,返回成员属性的值
echo "姓名:".$p1->name."<br>";
echo "性别:".$p1->sex."<br>";
echo "年龄:".$p1->age."<br>";
?>
效果如下:
12.final关键字
如果我们希望父类中的函数或者属性不想让子类重写,就可以用final进行修饰。
34.MVC模式
MVC把交互系统分解成为模型(Model)、视图(View)和控制器(Control)3个部件。
四、数据库MYSQL
Mysql:
<?php
mysql_connect("localhost","root","123456");
?>
效果如下:
所以我们可以这样做:
在前面加@,然后后面加 or die(“error”);
这样就只会提示error,但具体信息不会透露。
<?php
@mysql_connect("localhost","root","123456") or die("connection database fail!");
?>
效果如下:
1.连接关闭mysql数据库:
<?php
mysql_connect("localhost","zhulei","xxxxxx");
echo"Connect Successful!<br>";
mysql_close();
echo"Connect successful";
?>
效果如下:
2.选择数据库
我们连接数据成功后,需要选择到底使用哪个数据库:
假设我们选择zhulei这个数据库
mysql_select_db("zhulei");
echo "select databaseSuccessful!<br>";
3.执行sql指令
mysql_query(string$query[, resource $link_identifier])
$link_identifier为打开的数据库连接,如果没有这个参数,就默认使用一个已经打开的数据库连接。
4.分析返回的数据集
获取影响的行数
<?php
mysql_connect("localhost","zhulei","123456");
echo"ConnectSuccessful!<br>";
mysql_select_db("zhulei");
echo"select databaseSuccessful!<br>";
$result =mysql_query("select *from student");
$num =mysql_num_rows($result);
echo"rows: " . $num . "<br>";
mysql_close();
echo"Connect successful";
?>
效果如下:
数据库如下:
表明效果很好,没有错误。
添加数据
$sql = "insert into workervalues(2,'liufang','female',23,'singing')";
mysql_query($sql);
这就是执行sql语句,没什么问题。
更新数据
$updatesql="update worker set name= 'zhulei'where id =2";
mysql_query($updatesql);
删除数据
$deletesql="delete from worker where id =2";
mysql_query($deletesql);
$affectrownum=mysql_affected_rows();
echo"affect row num is: " .$affectrownum ."<br>";
效果如下:
五、wordpress
PHP 5.2.4或更新版本
MySQL 5.0或更新版本
Apache mod_rewrite模块(可选,用于支持“固定链接”和“站点网络”功能)
下载WordPress 4.4 .zip
简介:
WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当作一个内容管理系统(CMS)来使用。
WordPress有许多第三方开发的免费模板,安装方式简单易用。不过要做一个自己的模板,则需要你有一定的专业知识。比如你至少要懂的标准通用标记语言下的一个应用HTML代码、CSS、PHP等相关知识。