PHP

来源:互联网 发布:ubuntu install 编辑:程序博客网 时间:2024/05/18 15:25

PHP

sf2gis@163.com

2016年2月20日

 

1  目标:服务器端脚本程序,类似JSP。

2 原理:解析脚本(PHP+HTML),由Web服务器执行后生成纯HTML。脚本以C为基础,修改为接近JavaScript的格式。

3 流程:安装Web服务器Apache,安装PHP,配置Apache使用PHP模块,创建PHP页面,发布,测试。

参考:http://windows.php.net/download#php-5.6-ts-VC11-x64

http://www.jb51.net/article/53787.htm

http://www.th7.cn/Program/php/201410/305828.shtml

3.1 安装Web服务器Apache:

3.1.1下载Apache(ApacheLounge下载)Win64-VC14版(如果没有安装vc14运行时文件,需要先到ms官网下载)。

安装VC14运行时:AppacheLounge 2.4是基于VC14Update1编译的,可以从官网下载安装文件。

安装Apache:下载完成后解压,按照ReadMe.txt步骤安装。解压到C:/Apache24。

3.1.2启动Apache服务器:httpd.exe。

从命令行打开httpd.exe。

3.1.3测试:http://localhost ,显示It works!则成功。

3.2 安装PHP:下载PHP,创建配置

3.2.1下载PHP:要与Apache的版本相一致,这里使用PHP7的vc14-X64,ThreadSafe版(Apache必须使用ThreadSafe版本)。

3.2.2创建配置文件:将php.ini-development复制一份,改名为php.ini。

3.3 配置Apache,使用PHP模块:

在Apache的conf目录中修改httpd.conf,在文档结尾处添加PHP模块支持。

注意:如果安装目录中无php7apache2_4.dll,这是版本问题,只有线程安全的版本中才有这个文件。

# php7 support

LoadModulephp7_module D:/ProgramData/php-7.0.3-Win32-VC14-x64/php7apache2_4.dll

AddTypeapplication/x-httpd-php .php .html .htm

# configurethepath to php.ini

PHPIniDir"D:/ProgramData/php-7.0.3-Win32-VC14-x64"

3.4 发布Web页面

3.4.1创建PHP页面

//index.php

<!DOCTYPE HTMLPUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>

<head>

      <title>PHP</title>

</head>

<body>

      <?php

      echo "Hello World,PHP7!"

      ?>

</body>

</html>

3.4.2发布:将php页面copy到apache的web目录htdocs。

3.4.3测试:http://localhost/index.php

4 方法:PHP

PHP:personal home page,个人主页,目标是简单的服务器程序。后改名,不断加入强大功能。

参考:

http://baike.baidu.com/link?url=Df57JUFl7NXcLs0ep72nHmAZZ8mTFjPzNkonA5mtZZLUoKR-wlTFTBZIoncJy4flYUBM-8COjEJ6LR6yQ8CxG5RgWk9O58Hb42uuMMjY-Ku

5 语法

参考:http://www.w3school.com.cn/php

5.1 基本语法

5.1.1文件名后缀:以.php为后缀。

5.1.2标签:<?php 脚本  ?>。

5.1.3注释:单行//,单行#,多行/* */。

5.1.4关键字、类、函数等大小写不敏感,变量大小写敏感。

5.1.5语句结尾:以分号结尾。

5.1.6变量名:以$标识,不声明类型,变量名规则同C。

5.1.7变量作用域:默认情况下,函数内为local,外部为globle。在函数内可以使用global声明为全局。static声明为静态。

5.1.8输出:echo()或print()。

括号可以省略,区别在于echo只输出,速度快,可以指定多个string。print始终返回1,只能指定一个string。

注意:在“”内也会将$var作为变量解释,如果想要输出$,则应使用转义字符\。

5.1.9数据类型:php不用声明变量类型,但变量类型在内部有字符串,整型,浮点型,对象,数据和NULL。

5.1.10字符串操作:strlen(),strpos(目标字符串,关键字)。串接运行符.。

5.1.11换行符:输出</br>。

参考:http://www.jb51.net/article/33723.htm

5.1.12变量详细信息:var_dump()输出变量类型,长度与值。

参考:http://www.php100.com/html/php/hanshu/2013/0905/4344.html

5.1.13常量:全局作用域,不可改变。使用define(常量名,值【,大小写不敏感(默认为false)】)。

5.1.14流程控制:类似Java。foreach(数据名 as 当前值){}。

5.1.15函数:与JavaScript相同。

5.1.16数组:与JavaScript相同。长度count(),可以使用=>设置key=》value。排序(sort,rsort,assort,arsort,ksort,krsort)。

$a=array("a","b","c");

5.1.17json:使用json_encode(数组)将数组转化为json。

参考:http://bbs.csdn.net/topics/390344812

5.1.18示例:PHP基本操作

//index.php

<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0 Transitional//EN">

 

<html>

<head>

      <title>PHP</title>

</head>

 

<body>

 

<?php

//variant

$x=5;

$y=6;

$z=$x+$y;

//echo/print

//string

print "x+y=".$z;

echo "Hello World,PHP!";

function myFun(){

      global$i;#comment,global

      $i=1;

      static $s=5;#static

      $s+=1;

      echo "global i=",$i,"</br>";

      echo "static s=",$s,"</br>";

};

myFun();

myFun();

echo "out function global i =",$i,",type=",var_dump($i);

//datatype

function dataType(){

      $i=1;

      $f=1.21;

      $s="str";

      $t=true;

      $a=array("a","b","c");

      $n=NULL;

      echo "</br>";

      var_dump($i);

      var_dump($f);

      var_dump($s);

      var_dump($t);

      var_dump($a);

      var_dump($n);

};

dataType();

//String

function str(){

      echo"</br>strlen()=",strlen("ccc"),",strpos=",strpos("abcdef","cd");

}

str();

//Constant

define("XX","this is xx constant!",true);

echo"</br>",Xx;

 

?>

 

</body>

</html>

5.2 面向对象

类、继承、多态

5.2.1类:使用class定义,使用new实例化,使用public/private/protected定义作用域。

在类中使用成员变量时使用$this->属性(属性前无$)。

在实例中使用属性时使用$实例名->属性(属性前无$)。

class 类名{

      private/public $属性;

      public/private function 方法名(参数){

          $this->属性=xx;

}

}

类的常量:const 常量名=值。调用格式类名::常量名。

      echo "</br>",MyClass::B_VAR;

构建函数:function __construct(参数){}

析构函数:function __desstruct(){}

final,abstract:与java相同。

继承性:单继承,多接口实现,与java相同。

接口:interface,与java相同。

对象比较:==(值)与===(值+类型),与javascript相同。

5.2.2示例:类的定义和使用

//index.php

<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0 Transitional//EN">

 

<html>

<head>

      <title>PHP</title>

</head>

<body>

<?php

      class MyClass{

           constB_VAR=5;

           public$a;

           function __construct($a){

                 echo"construct:\$this->a=",$this->a,",\$a=",$a,"</br>";

                 $this->a=$a;

           }

           function __desstruct(){

                 echo "__desstruct";

           }

          

           function showA(){

                 echo "a=",$this->a;

           }

      }

     

      $c=new MyClass(7);

      $c->a=18;

      $c->showA();

      echo"</br>",MyClass::B_VAR;

?>

</body>

</html>

5.2.3继承和多态:继承使用extends,多态直接重写。

//index.php

<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0 Transitional//EN">

 

<html>

<head>

      <title>PHP</title>

</head>

<body>

<?php

      class Base{

           public $a;

           function __construct($a){

                 echo"construct:\$this->a=",$this->a,",\$a=",$a,"</br>";

                 $this->a=$a;

           }

           function __desstruct(){

                 echo "__desstruct";

           }

          

           function showA(){

                 echo "a=",$this->a;

           }

      }

     

      class Subextends Base{

           private $b;

           functionshowA(){

                 echo "sub->a=",$this->a;

           }

      }

     

      $c=new Base(7);

      $sub= new Sub(5);

      $sub->showA();

 

?>

</body>

</html>

5.2.4作用域操作符::

用于调用常量或静态变量(类外部用类名::变量,内部用self::变量),以及基类成员函数(parent::成员函数)。

子类无法直接调用基类的属性(将基类操作作为基类成员函数可以由子类调用)。

参考:http://bbs.chinaunix.net/thread-747748-1-1.html

http://www.php100.com/html/webkaifa/PHP/PHP/2009/1106/3487.html

http://bbs.blueidea.com/thread-3003126-1-1.html

示例:作用域

//index.php

<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0 Transitional//EN">

 

<html>

<head>

      <title>PHP</title>

</head>

<body>

<?php

      class Base{

           static public $s="xx";

           public $a;

           function __construct($a){

                 echo"construct:\$this->a=",$this->a,",\$a=",$a,"</br>";

                 $this->a=$a;

           }

           function __desstruct(){

                 echo "__desstruct";

           }

          

           function showA(){

                 echo "a=",$this->a;

           }

      }

     

      class Sub extends Base{

           const SUB_VAR="ss";

           private $b;

           function showA(){

                 echo "sub->a=",$this->a;

                 echo ",parentstatic=",parent::$s,",self const=",self::SUB_VAR;

                 echo "</br>parent::showA():",

                 parent::showA();

           }

      }

     

      $c=new Base(7);

      $sub= new Sub(5);

      $sub->showA();

      echo"</br>const=",Sub::SUB_VAR;

?>

</body>

</html>

5.3 预定义变量(超全局变量):

5.3.1$GLOBALS:全局变量数组,其中还有一个指向自身的迭代指针。

//index.php

<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0 Transitional//EN">

 

<html>

<head>

      <title>PHP</title>

</head>

<body>

<?php

//variant

$x=5;

$y=6;

echo "HelloWorld,PHP!";

myFun();

var_dump($GLOBALS);

?>

</body>

</html>

结果

array(7) {

      ["_GET"]=> array(0) { }

      ["_POST"]=> array(0) { }

      ["_COOKIE"]=> array(0) { }

      ["_FILES"]=> array(0) { }

      ["GLOBALS"]=> 迭代

      ["x"]=> int(5)

      ["y"]=> int(6)

}

5.3.2$_SERVER:服务器信息。

//index.php

<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0 Transitional//EN">

 

<html>

<head>

      <title>PHP</title>

</head>

<body>

<?php

//variant

$x=5;

$y=6;

echo "HelloWorld,PHP!";

var_dump($_SERVER);

?>

</body>

</html>

结果:

Hello World,PHP!

array(35) {

      ["HTTP_HOST"]=> string(9) "localhost"

      ["HTTP_CONNECTION"]=> string(10)"keep-alive"

      ["HTTP_CACHE_CONTROL"]=> string(9)"max-age=0"

      ["HTTP_ACCEPT"]=> string(74)"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"

      ["HTTP_UPGRADE_INSECURE_REQUESTS"]=> string(1)"1"

      ["HTTP_USER_AGENT"]=> string(109)"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, likeGecko) Chrome/47.0.2526.106 Safari/537.36"

      ["HTTP_ACCEPT_ENCODING"]=> string(19) "gzip,deflate, sdch"

      ["HTTP_ACCEPT_LANGUAGE"]=> string(23)"zh-CN,zh;q=0.8,en;q=0.6"

      ["PATH"]=> string(968) "D:\ProgramData\nexus-2.11.4-01-bundle\nexus-2.11.4-01\bin;D:\ProgramData\apache-maven-3.2.1\bin;D:\ProgramData\Oracle\Administrator\product\11.2.0\client_1\bin;C:\ProgramFiles (x86)\Common Files\NetSarang;C:\Program Files (x86)\Intel\iCLSClient\;C:\Program Files\Intel\iCLS Client\;C:\Program Files (x86)\NVIDIACorporation\PhysX\Common;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\ProgramFiles\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R)Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R)Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R)Management Engine Components\IPT;C:\Program Files (x86)\CommonFiles\lenovo\easyplussdk\bin;D:\Program Files (x86)\EmEditor;D:\ProgramFiles\TortoiseSVN\bin;D:\Program Files\OpenSSH\bin;D:\Program Files(x86)\CodeSmith\v6.5\;D:\ProgramFiles\TortoiseGit\bin;D:\ProgramData\Java\Jdk7u79\bin;"

      ["SystemRoot"]=> string(10) "C:\Windows"["COMSPEC"]=> string(27) "C:\Windows\system32\cmd.exe"

      ["PATHEXT"]=> string(53)".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC"

      ["WINDIR"]=> string(10) "C:\Windows"["SERVER_SIGNATURE"]=> string(0) ""

      ["SERVER_SOFTWARE"]=> string(31)"Apache/2.4.18 (Win64) PHP/7.0.3"

      ["SERVER_NAME"]=> string(9) "localhost"["SERVER_ADDR"]=> string(3) "::1"

      ["SERVER_PORT"]=> string(2) "80"["REMOTE_ADDR"]=> string(3) "::1"

      ["DOCUMENT_ROOT"]=> string(18)"C:/Apache24/htdocs"

      ["REQUEST_SCHEME"]=> string(4) "http"

      ["CONTEXT_PREFIX"]=> string(0) ""

      ["CONTEXT_DOCUMENT_ROOT"]=> string(18)"C:/Apache24/htdocs"

      ["SERVER_ADMIN"]=> string(17)"admin@example.com"

      ["SCRIPT_FILENAME"]=> string(28)"C:/Apache24/htdocs/index.php"

      ["REMOTE_PORT"]=> string(5) "55239"

      ["GATEWAY_INTERFACE"]=> string(7)"CGI/1.1"

      ["SERVER_PROTOCOL"]=> string(8)"HTTP/1.1"

      ["REQUEST_METHOD"]=> string(3) "GET"

      ["QUERY_STRING"]=> string(0) ""

      ["REQUEST_URI"]=> string(10)"/index.php"

      ["SCRIPT_NAME"]=> string(10)"/index.php"

      ["PHP_SELF"]=> string(10) "/index.php"

      ["REQUEST_TIME_FLOAT"]=> float(1456125073.442)

      ["REQUEST_TIME"]=> int(1456125073)

}

5.3.3$_REQUEST

5.3.4$_POST:全局变量,Post请求的参数数组。

//index.php

<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0 Transitional//EN">

 

<html>

<head>

      <title>PHP</title>

</head>

<body>

      <formaction="index.php" method="post"/>

           Name:<input type="text"name="name"/></br>

           E-Mail:<input type="email"name="email"/></br>

           <input type="submit"/></br>

      </from>

<?php

var_dump($_POST);

?>

</body>

</html>

5.3.5$_GET:全局变量,Get请求的参数数组。

//index.php

<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0 Transitional//EN">

 

<html>

<head>

      <title>PHP</title>

</head>

<body>

<?php

var_dump($_GET);

?>

</body>

</html>

5.3.6$_FILES

5.3.7$_ENV

5.3.8$_COOKIE

5.3.9$_SESSION

$_SERVER["PHP_SELF"] 能够接受用户输入,从而可能被用于攻击(服务器脚本)。

转换为字符:htmlspecialchars(),避免攻击。

5.4 常用函数

5.4.1无效值判断:empty()

参考:http://www.mycodes.net/74/2406.htm

如果没有定义,NULL,空字符串则返回true。

//index.php

<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0 Transitional//EN">

 

<html>

<head>

      <title>PHP</title>

</head>

<body>

<?php

var_dump($_GET);

if(empty($i)){

      echo "\$i is empty";

}

else{

      echo $i;

}

?>

</body>

</html>

 

5.4.2正则表达式:preg_match("/正则表达式/","字符串")。

参考:http://www.hi-docs.com/php/preg_match.html

http://stackoverflow.com/questions/9602321/php-preg-match-delimiter-must-not-be-alphanumeric-or-backslash

注意:正则表达式需要使用//包住。

//index.php

<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0 Transitional//EN">

 

<html>

<head>

      <title>PHP</title>

</head>

<body>

<?php

      if(preg_match("/\d+/","1")){

           echo "number";

      }else{

           echo "not number";

      }

?>

</body>

</html>

6 方法:PHP前后端交互:PHP与HTML交互,PHP与JavaScript交互。

参见:PHP前后端交互.docx

0 0
原创粉丝点击