PHP知识点——3

多维数组:
在多维数组中,主数组中的每一个元素也可以是一个数组,子数组中的每一个元素也可以是一个数组。

<?php
// A two-dimensional array:
$cars = array
(
array("Volvo",100,96),
array("BMW",60,59),
array("Toyota",110,100)
);
?>

 

PHP date():

PHP date() 函数可把时间戳格式化为可读性更好的日期和时间。用于格式化时间/日期。

date(format,timestamp)

·        m - 代表月 (01 - 12)·        d - 代表月中的天 (01 - 31)

·        Y - 代表年 (四位数)

可以在字母之间插入其他字符,比如"/""." 或者 "-",这样就可以增加附加格式了:

<?php
echo date("Y/m/d") ."<br>";
echo date("Y.m.d") ."<br>";
echo date("Y-m-d");
?>

 

包含文件:

include require 语句用于在执行流中插入写在其他文件中的有用的代码。

include require 除了处理错误的方式不同之外,在其他方面都是相同的:

·        require 生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会停止执行。

·        include 生成一个警告(E_WARNING),在错误发生后脚本会继续执行。

因此,如果您希望继续执行,并向用户输出结果,即使包含文件已丢失,那么请使用 include。否则,在框架、CMS 或者复杂的 PHP 应用程序编程中,请始终使用 require 向执行流引用关键文件。这有助于提高应用程序的安全性和完整性,在某个关键文件意外丢失的情况下。

包含文件省去了大量的工作。这意味着您可以为所有网页创建标准页头、页脚或者菜单文件。然后,在页头需要更新时,您只需更新这个页头包含文件即可。

<html>
<body>
<?php include 'header.php'; ?>
<h1>Welcome to my home page!</h1>
<p>Some text.</p>
</body>
</html>

假设我们有一个定义变量的包含文件,这些变量可用在调用文件中。

 

文件处理:

fopen() 函数用于在 PHP中打开文件。第一个参数含有要打开的文件的名称,第二个参数规定了使用哪种模式来打开文件:$file=fopen("welcome.txt","r");

模式

描述

r

只读。在文件的开头开始。

r+

/写。在文件的开头开始。

w

只写。打开并清空文件的内容;如果文件不存在,则创建新文件。

w+

/写。打开并清空文件的内容;如果文件不存在,则创建新文件。

a

追加。打开并向文件末尾进行写操作,如果文件不存在,则创建新文件。

a+

/追加。通过向文件末尾写内容,来保持文件内容。

x

只写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。

x+

/写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。

如果 fopen() 函数无法打开指定文件,则返回 0 (false)  

fclose() 函数用于关闭打开的文件:fclose($file);

feof() 函数检测是否已到达文件末尾(EOF)。

在循环遍历未知长度的数据时,feof() 函数很有用。 w a x 模式下,您无法读取打开的文件!

if (feof($file)) echo "文件结尾";

fgets() 函数用于从文件中逐行读取文件。

注释:在调用该函数之后,文件指针会移动到下一行。

fgetc() 函数用于从文件中逐字符地读取文件。

逐行读取实例:

<?php
$file = fopen("welcome.txt","r") or exit("Unable to open file!");
//Output a line of the file until the end isreached
while(!feof($file))
{
echo fgets($file). "<br>";
}
fclose($file);
?>

文件上传:
html

<html>
<body>

<form action="upload_file.php"method="post"
enctype="multipart/form-data">
<labelfor="file">Filename:</label>
<input type="file" name="file"id="file"><br>
<input type="submit"name="submit" value="Submit">
</form>

</body>
</html>

<form> 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用"multipart/form-data"

通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。

第一个参数是表单的 input name,第二个下标可以是 "name""type""size""tmp_name" "error"。如下所示:

·        $_FILES["file"]["name"] - 被上传文件的名称

·        $_FILES["file"]["type"] - 被上传文件的类型

·        $_FILES["file"]["size"] - 被上传文件的大小,以字节计

·        $_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称

·        $_FILES["file"]["error"] - 由文件上传导致的错误代码

这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关允许哪些用户上传文件的限制。

我们增加了对文件上传的限制。用户只能上传 .gif .jpeg 文件,文件大小必须小于 20 kB在服务器的 PHP 临时文件夹中创建了一个被上传文件的临时副本。这个临时的副本文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置:

<?php
$allowedExts = array("gif","jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if((($_FILES["file"]["type"] == "image/gif")
||($_FILES["file"]["type"] == "image/jpeg")
||($_FILES["file"]["type"] == "image/jpg")
||($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"]== "image/x-png")
||($_FILES["file"]["type"] == "image/png"))
&&($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts))
{
if($_FILES["file"]["error"] > 0)
{
echo "Return Code: " .$_FILES["file"]["error"] . "<br>";
}
else
{
echo "Upload: " .$_FILES["file"]["name"] . "<br>";
echo "Type: " .$_FILES["file"]["type"] . "<br>";
echo "Size: " .($_FILES["file"]["size"] / 1024) . "kB<br>";
echo "Temp file: " .$_FILES["file"]["tmp_name"] . "<br>";

if (file_exists("upload/" .$_FILES["file"]["name"]))
{
echo$_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" .$_FILES["file"]["name"]);
echo "Stored in: " ."upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>

explode() 函数把字符串打散为数组.

in_array() 函数搜索数组中是否存在指定的值。

file_exists(path)函数检查文件或目录是否存在。如果指定的文件或目录存在则返回 true,否则返回 false。

move_uploaded_file(file,newloc)函数将上传的文件移动到新位置。若成功,则返回 true,否则返回 false。

等等以上都是内置的函数,直接用。这些可以去参考手册查。

上面的脚本检测了文件是否已存在,如果不存在,则把文件拷贝到名为 "upload" 的文件夹。

Cookie:

常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。

setcookie() 函数用于设置 cookiesetcookie(name, value, expire, path, domain);

注释:setcookie() 函数必须位于 <html> 标签之前。

在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码。(为防止 URL 编码,请使用 setrawcookie() 取而代之。)

 <?php
setcookie("user", "AlexPorter", time()+3600);
?>

<html>
.....

PHP $_COOKIE 变量用于取回 cookie 的值。

<?php
// Print a cookie
echo $_COOKIE["user"];

// A way to view all cookies
print_r($_COOKIE);
?>

使用 isset() 函数来确认是否已设置了 cookie

if (isset($_COOKIE["user"]))
echo "Welcome " .$_COOKIE["user"] . "!<br>";

当删除 cookie 时,您应当使过期日期变更为过去的时间点。

如果您的应用程序需要与不支持 cookie 的浏览器打交道,那么您不得不使用其他的办法在您的应用程序中的页面之间传递信息。一种方式是通过表单传递数据。

Session:

由于 HTTP 地址无法保持状态,Web 服务器并不知道您是谁以及您做了什么。PHP session 解决了这个问题,它通过在服务器上存储用户信息以便随后使用(比如用户名称、购买商品等)。然而,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久存储信息,可以把数据存储在数据库中。

Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导。

在您把用户信息存储到 PHP session 中之前,首先必须启动会话。

注释:session_start() 函数必须位于 <html> 标签之前:

<?php session_start(); ?>

<html>
<body>

</body>
</html>

上面的代码会向服务器注册用户的会话,以便您可以开始保存用户信息,同时会为用户会话分配一个 UID

存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量:

<?php
session_start();
// store session data
$_SESSION['views']=1;
?>

<html>
<body>

<?php
//retrieve session data
echo "Pageviews=".$_SESSION['views'];
?>

</body>
</html>

page-view 计数器:

<?php
session_start();

if(isset($_SESSION['views']))
$_SESSION['views']=$_SESSION['views']+1;
else
$_SESSION['views']=1;
echo "Views=". $_SESSION['views'];
?>

因为session在关掉网页后销毁,故在原网页上刷新是没法增加访问量的。

unset() 函数用于释放指定的 session 变量:unset($_SESSION['views']);

调用 session_destroy() 函数彻底销毁 session

 

邮箱(略)

异常处理:

异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程。这种情况称为异常。PHP 5 提供了一种新的面向对象的错误处理方法。

当异常被抛出throw时,其后的代码不会继续执行,PHP 会尝试查找匹配的"catch" 代码块。如果异常没有被捕获,而且又没用使用set_exception_handler() 作相应的处理的话,那么将发生一个严重的错误(致命错误),并且输出 "UncaughtException" (未捕获异常)的错误消息。

适当的处理异常代码应该包括:

1.     Try - 使用异常的函数应该位于 "try" 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。

2.     Throw - 里规定如何触发异常。每一个 "throw" 必须对应至少一个 "catch"

3.     Catch -"catch" 代码块会捕获异常,并创建一个包含异常信息的对象。

<?php
//create function with an exception
function checkNum($number)
{
if($number>1)
{
throw new Exception("Value must be 1 orbelow");//
构造Exception类会抛出错误的异常
}
return true;
}

//trigger exception in a "try" block
try
{
checkNum(2);//try
内执行可能出错的代码
//If the exception is thrown, this text willnot be shown
echo 'If you see this, the number is 1 orbelow';
}

//catch exception
catch(Exception $e)
{
echo 'Message: ' .$e->getMessage(); //catch
接收异常并改变脚本执行
}
?>

可以extends Exception自定义。

规则:

·        需要进行异常处理的代码应该放入 try 代码块内,以便捕获潜在的异常。

·        每个 try throw 代码块必须至少拥有一个对应的 catch 代码块。

·        使用多个 catch 代码块可以捕获不同种类的异常。

·        可以在 try 代码块内的 catch 代码块中抛出(再次抛出)异常。

简而言之:如果抛出了异常,就必须捕获它

 

过滤器:
PHP
过滤器用于验证和过滤来自非安全来源的数据。PHP 的过滤器扩展的设计目的是使数据过滤更轻松快捷。几乎所有的 Web 应用程序都依赖外部的输入。这些数据通常来自用户或其他应用程序(比如 web 服务)。通过使用过滤器,您能够确保应用程序获得正确的输入类型。

什么是外部数据?

·        来自表单的输入数据

·        Cookies

·        Web services data

·        服务器变量

·        数据库查询结果


<?php

$int = 123;

if(!filter_var($int, FILTER_VALIDATE_INT))
{
echo("Integer is not valid");
}
else
{
echo("Integer is valid");
}
?>

有两种过滤器:

Validating 过滤器:

·        用于验证用户输入

·        严格的格式规则(比如 URL E-Mail 验证)

·        如果成功则返回预期的类型,如果失败则返回 FALSE

Sanitizing 过滤器:

·        用于允许或禁止字符串中指定的字符Are used to allow or disallow specified characters in astring

·        无数据格式规则

·        始终返回字符串

 

选项和标志用于向指定的过滤器添加额外的过滤选项。

<?php
$var=300;

$int_options = array(
"options"=>array
(
"min_range"=>0,
"max_range"=>256
)
);

if(!filter_var($var, FILTER_VALIDATE_INT,$int_options))
{
echo("Integer is not valid");
}
else
{
echo("Integer is valid");
}
?>

<?php
if(!filter_has_var(INPUT_GET,"email"))
{
echo("Input type does not exist");
}
else
{
if (!filter_input(INPUT_GET,"email", FILTER_VALIDATE_EMAIL))
{
echo "E-Mail is not valid";
}
else
{
echo "E-Mail is valid";
}
}
?>

上面的实例有一个通过 "GET"方法传送的输入变量 (email)

1.     检测是否存在 "GET" 类型的"email" 输入变量

2.     如果存在输入变量,检测它是否是有效的 e-mail 地址

<?php
if(!filter_has_var(INPUT_POST,"url"))
{
echo("Input type does not exist");
}
else
{
$url = filter_input(INPUT_POST, 

"url", FILTER_SANITIZE_URL);
}
?>

上面的实例有一个通过"POST" 方法传送的输入变量 (url)

1.     检测是否存在 "POST" 类型的 "url"输入变量

2.     如果存在此输入变量,对其进行净化(删除非法字符),并将其存储在 $url 变量中

 

表单通常由多个输入字段组成。为了避免对 filter_var filter_input 函数重复调用,我们可以使用 filter_var_array the filter_input_array 函数。

<?php
$filters = array
  (
  "name" => array
    (
    "filter"=>FILTER_SANITIZE_STRING
    ),
  "age" => array
    (
    "filter"=>FILTER_VALIDATE_INT,
    "options"=>array
      (
      "min_range"=>1,
      "max_range"=>120
      )
    ), 
  "email"=>FILTER_VALIDATE_EMAIL
  );

$result = filter_input_array(INPUT_GET,$filters);//
各个返回值组成的数组

if (!$result["age"])
  {
  echo("Age must be a numberbetween 1 and 120.<br>");
  }
elseif(!$result["email"])
  {
  echo("E-Mail is notvalid.<br>");
  }
else
  {
  echo("User input isvalid");
  }
?>

通过使用 FILTER_CALLBACK 过滤器,可以调用自定义的函数,把它作为一个过滤器来使用。这样,我们就拥有了数据过滤的完全控制权。

<?php
function convertSpace($string)
{
return str_replace("_", "", $string);
}

$string = "Peter_is_a_great_guy!";

echo filter_var($string, FILTER_CALLBACK,
array("options"=>"convertSpace"));
?>

调用 filter_var() 函数,它的参数是 FILTER_CALLBACK过滤器以及包含我们的函数的数组。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值