php常用知识集锦
php常用知识集锦
很多位置都有写好的代码,自己做项目的时候可以直接拿来用,而不用自己写,比如现在看到的菜鸟教程。
1、判断是否为空
empty($_POST["name"])
2、检测邮箱是否合法,判断正则表达式
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
3、下拉菜单
1 <form action="" method="get"> 2 <select name="q"> 3 <option value="">选择一个站点:</option> 4 <option value="RUNOOB">Runoob</option> 5 <option value="GOOGLE">Google</option> 6 <option value="TAOBAO">Taobao</option> 7 </select> 8 <input type="submit" value="提交"> 9 </form>
调用的时候直接调用q这个名字
1 <?php 2 $q = isset($_GET['q'])? htmlspecialchars($_GET['q']) : ''; 3 if($q) { 4 if($q =='RUNOOB') { 5 echo '菜鸟教程<br>http://www.runoob.com'; 6 } else if($q =='GOOGLE') { 7 echo 'Google 搜索<br>http://www.google.com'; 8 } else if($q =='TAOBAO') { 9 echo '淘宝<br>http://www.taobao.com'; 10 } 11 } else { 12 ?>
isset函数的使用,已经看到了很多这样的句式了
4、php日期
直接date()函数加格式就好
1 <?php 2 echo date("Y/m/d") . "<br>"; 3 echo date("Y.m.d") . "<br>"; 4 echo date("Y-m-d"); 5 ?>
5、php包含
PHP include 和 require 语句
在 PHP 中,您可以在服务器执行 PHP 文件之前在该文件中插入一个文件的内容。
include 和 require 语句用于在执行流中插入写在其他文件中的有用的代码。
include 和 require 除了处理错误的方式不同之外,在其他方面都是相同的:
- require 生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会停止执行。
- include 生成一个警告(E_WARNING),在错误发生后脚本会继续执行。
1 include 'filename'; 2 3 或者 4 5 require 'filename';
6、php文件处理
fopen() 函数用于在 PHP 中打开文件。
1 <?php 2 $file=fopen("welcome.txt","r"); 3 ?>
<?php $file=fopen("welcome.txt","r") or exit("Unable to open file!"); ?>
<?php $file = fopen("test.txt","r"); //执行一些代码 fclose($file); ?>
if (feof($file)) echo "文件结尾";
当忘记用法的时候可以多参照教程。
7、php文件上传
创建一个文件上传表单
允许用户从表单上传文件是非常有用的。
请看下面这个供上传文件的 HTML 表单:
1 <html> 2 <head> 3 <meta charset="utf-8"> 4 <title>菜鸟教程(runoob.com)</title> 5 </head> 6 <body> 7 8 <form action="upload_file.php" method="post" enctype="multipart/form-data"> 9 <label for="file">文件名:</label> 10 <input type="file" name="file" id="file"><br> 11 <input type="submit" name="submit" value="提交"> 12 </form> 13 14 </body> 15 </html>
将以上代码保存到 form.html 文件中。
有关上面的 HTML 表单的一些注意项列举如下:
- <form> 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 "multipart/form-data"。
- <input> 标签的 type="file" 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。
注释:允许用户上传文件是一个巨大的安全风险。请仅仅允许可信的用户执行文件上传操作。
创建上传脚本
"upload_file.php" 文件含有供上传文件的代码:
1 <?php 2 if ($_FILES["file"]["error"] > 0) 3 { 4 echo "错误:" . $_FILES["file"]["error"] . "<br>"; 5 } 6 else 7 { 8 echo "上传文件名: " . $_FILES["file"]["name"] . "<br>"; 9 echo "文件类型: " . $_FILES["file"]["type"] . "<br>"; 10 echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>"; 11 echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"]; 12 } 13 ?>
通过使用 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"] - 由文件上传导致的错误代码
这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关允许哪些用户上传文件的限制。
8、php Cookie
用法 :
setcookie(name, value, expire, path, domain);
设置失效时间:
<?php $expire=time()+60*60*24*30; setcookie("user", "runoob", $expire); ?>
取出cookie的值:
1 <?php 2 // 输出 cookie 值 3 echo $_COOKIE["user"]; 4 5 // 查看所有 cookie 6 print_r($_COOKIE); 7 ?>
9、PHP Session
Session用于知道你是谁
Cookie用于存储你的用户信息
您在计算机上操作某个应用程序时,您打开它,做些更改,然后关闭它。这很像一次对话(Session)。计算机知道您是谁。它清楚您在何时打开和关闭应用程序。然而,在因特网上问题出现了:由于 HTTP 地址无法保持状态,Web 服务器并不知道您是谁以及您做了什么。
PHP session 解决了这个问题,它通过在服务器上存储用户信息以便随后使用(比如用户名称、购买商品等)。然而,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久存储信息,可以把数据存储在数据库中。
Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导。
利用session来统计访问量:
在下面的实例中,我们创建了一个简单的 page-view 计数器。isset() 函数检测是否已设置 "views" 变量。如果已设置 "views" 变量,我们累加计数器。如果 "views" 不存在,则创建 "views" 变量,并把它设置为 1:
1 <?php 2 session_start(); 3 4 if(isset($_SESSION['views'])) 5 { 6 $_SESSION['views']=$_SESSION['views']+1; 7 } 8 else 9 { 10 $_SESSION['views']=1; 11 } 12 echo "浏览量:". $_SESSION['views']; 13 ?>
10、php发送电子邮件
PHP mail() 函数用于从脚本中发送电子邮件。
语法
参数 | 描述 |
---|---|
to | 必需。规定 email 接收者。 |
subject | 必需。规定 email 的主题。注释:该参数不能包含任何新行字符。 |
message | 必需。定义要发送的消息。应使用 LF (\n) 来分隔各行。每行应该限制在 70 个字符内。 |
headers | 可选。规定附加的标题,比如 From、Cc 和 Bcc。应当使用 CRLF (\r\n) 分隔附加的标题。 |
parameters | 可选。对邮件发送程序规定额外的参数。 |
注释:PHP 运行邮件函数需要一个已安装且正在运行的邮件系统(如:sendmail、postfix、qmail等)。所用的程序通过在 php.ini 文件中的配置设置进行定义。请在我们的 PHP Mail 参考手册 阅读更多内容。
PHP 简易 E-Mail
通过 PHP 发送电子邮件的最简单的方式是发送一封文本 email。
在下面的实例中,我们首先声明变量($to, $subject, $message, $from, $headers),然后我们在 mail() 函数中使用这些变量来发送了一封 E-mail:
1 <?php 2 $to = "someone@example.com"; // 邮件接收者 3 $subject = "参数邮件"; // 邮件标题 4 $message = "Hello! 这是邮件的内容。"; // 邮件正文 5 $from = "someonelse@example.com"; // 邮件发送者 6 $headers = "From:" . $from; // 头部信息设置 7 mail($to,$subject,$message,$headers); 8 echo "邮件已发送"; 9 ?>
直接这样是发不过去的,会有如下错误提示消息,其实也就是25端口和smtp邮件服务器都没有打开
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in E:\2017-02-21--SoftWare\PHP\SOFTWARE\phpStudy\WWW\Demo\PHPDemo\PHP13\mailTest.php on line 7
邮件已发送
11、php错误处理
在 PHP 中,默认的错误处理很简单。一条错误消息会被发送到浏览器,这条消息带有文件名、行号以及描述错误的消息。
简单的 "die()" 语句用于错误检测
1 <?php 2 if(!file_exists("welcome.txt")) 3 { 4 die("文件不存在"); 5 } 6 else 7 { 8 $file=fopen("welcome.txt","r"); 9 } 10 ?>
12、php异常
异常的基本使用
当异常被抛出时,其后的代码不会继续执行,PHP 会尝试查找匹配的 "catch" 代码块。
如果异常没有被捕获,而且又没用使用 set_exception_handler() 作相应的处理的话,那么将发生一个严重的错误(致命错误),并且输出 "Uncaught Exception" (未捕获异常)的错误消息。
让我们尝试抛出一个异常,同时不去捕获它:
1 <?php 2 // 创建一个有异常处理的函数 3 function checkNum($number) 4 { 5 if($number>1) 6 { 7 throw new Exception("Value must be 1 or below"); 8 } 9 return true; 10 } 11 12 // 触发异常 13 checkNum(2); 14 ?>
上面的代码会得到类似这样的一个错误:
Fatal error: Uncaught exception 'Exception' with message 'Value must be 1 or below' in /www/runoob/test/test.php:7 Stack trace: #0 /www/runoob/test/test.php(13): checkNum(2) #1 {main} thrown in /www/runoob/test/test.php on line 7
Try、throw 和 catch
要避免上面实例中出现的错误,我们需要创建适当的代码来处理异常。
适当的处理异常代码应该包括:
- Try - 使用异常的函数应该位于 "try" 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
- Throw - 里规定如何触发异常。每一个 "throw" 必须对应至少一个 "catch"。
- Catch - "catch" 代码块会捕获异常,并创建一个包含异常信息的对象。
让我们触发一个异常:
1 <?php 2 // 创建一个有异常处理的函数 3 function checkNum($number) 4 { 5 if($number>1) 6 { 7 throw new Exception("变量值必须小于等于 1"); 8 } 9 return true; 10 } 11 12 // 在 try 块 触发异常 13 try 14 { 15 checkNum(2); 16 // 如果抛出异常,以下文本不会输出 17 echo '如果输出该内容,说明 $number 变量'; 18 } 19 // 捕获异常 20 catch(Exception $e) 21 { 22 echo 'Message: ' .$e->getMessage(); 23 } 24 ?>
上面代码将得到类似这样一个错误:
Message: 变量值必须小于等于 1
实例解释:
上面的代码抛出了一个异常,并捕获了它:
- 创建 checkNum() 函数。它检测数字是否大于 1。如果是,则抛出一个异常。
- 在 "try" 代码块中调用 checkNum() 函数。
- checkNum() 函数中的异常被抛出。
- "catch" 代码块接收到该异常,并创建一个包含异常信息的对象 ($e)。
- 通过从这个 exception 对象调用 $e->getMessage(),输出来自该异常的错误消息。
然而,为了遵循 "每个 throw 必须对应一个 catch" 的原则,可以设置一个顶层的异常处理器来处理漏掉的错误。
13、php过滤器
PHP 过滤器用于验证和过滤来自非安全来源的数据,比如用户的输入。
函数和过滤器
如需过滤变量,请使用下面的过滤器函数之一:
- filter_var() - 通过一个指定的过滤器来过滤单一的变量
- filter_var_array() - 通过相同的或不同的过滤器来过滤多个变量
- filter_input - 获取一个输入变量,并对它进行过滤
- filter_input_array - 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤
在下面的实例中,我们用 filter_var() 函数验证了一个整数:
实例
<?php $int = 123; if(!filter_var($int, FILTER_VALIDATE_INT)) { echo("不是一个合法的整数"); } else { echo("是个合法的整数"); } ?>
上面的代码使用了 "FILTER_VALIDATE_INT" 过滤器来过滤变量。由于这个整数是合法的,因此上面的代码将输出:
如果我们尝试使用一个非整数的变量(比如 "123abc"),则将输出:"Integer is not valid"。
如需查看完整的函数和过滤器列表,请访问我们的 PHP Filter 参考手册。
检测一个数字是否在一个范围内
以下实例使用了 filter_var() 函数来检测一个 INT 型的变量是否在 1 到 200 内:
1 <?php 2 $int = 122; 3 $min = 1; 4 $max = 200; 5 6 if (filter_var($int, FILTER_VALIDATE_INT, array("options" => array("min_range"=>$min, "max_range"=>$max))) === false) { 7 echo("变量值不在合法范围内"); 8 } else { 9 echo("变量值在合法范围内"); 10 } 11 ?>
14、PHP JSON
JSON 函数
函数 | 描述 |
---|---|
json_encode | 对变量进行 JSON 编码 |
json_decode | 对 JSON 格式的字符串进行解码,转换为 PHP 变量 |
json_last_error | 返回最后发生的错误 |
PHP json_encode() 用于对变量进行 JSON 编码,该函数如果执行成功返回 JSON 数据,否则返回 FALSE 。
string json_encode ( $value [, $options = 0 ] )
- value: 要编码的值。该函数只对 UTF-8 编码的数据有效。
- options:由以下常量组成的二进制掩码:JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK,JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT
以下实例演示了如何将 PHP 数组转换为 JSON 格式数据:
<?php $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5); echo json_encode($arr); ?>
以上代码执行结果为:
{"a":1,"b":2,"c":3,"d":4,"e":5}
15、PHP连接数据库的方式
PHP 5 及以上版本建议使用以下方式连接 MySQL :
- MySQLi extension ("i" 意为 improved)
- PDO (PHP Data Objects)
MySQLi 和 PDO 有它们自己的优势:
PDO 应用在 12 种不同数据库中, MySQLi 只针对 MySQL 数据库。
所以,如果你的项目需要在多种数据库中切换,建议使用 PDO ,这样你只需要修改连接字符串和部分查询语句即可。 使用 MySQLi, 如果不同数据库,你需要重新编写所有代码,包括查询。
两者都是面向对象, 但 MySQLi 还提供了 API 接口。
两者都支持预处理语句。 预处理语句可以防止 SQL 注入,对于 web 项目的安全性是非常重要的。
实例 (MySQLi - 面向对象)
1 <?php 2 $servername = "localhost"; 3 $username = "username"; 4 $password = "password"; 5 6 // 创建连接 7 $conn = new mysqli($servername, $username, $password); 8 9 // 检测连接 10 if ($conn->connect_error) { 11 die("连接失败: " . $conn->connect_error); 12 } 13 echo "连接成功"; 14 ?>
实例 (MySQLi - 面向过程)
1 <?php 2 $servername = "localhost"; 3 $username = "username"; 4 $password = "password"; 5 6 // 创建连接 7 $conn = mysqli_connect($servername, $username, $password); 8 9 // 检测连接 10 if (!$conn) { 11 die("Connection failed: " . mysqli_connect_error()); 12 } 13 echo "连接成功"; 14 ?>
哦!!面向对象和面向过程的连接是一个是对象,一个只是普通的函数(像我们以往的连接方法,面向过程)。
16、PHP MySQL 预处理语句
INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
预处理语句对于防止 MySQL 注入是非常有用的。
17、php操作xml
三种方式:
XML Expat Parser
XML DOM
XML SimpleXML
SimpleXML 扩展提供了一种获取 XML 元素的名称和文本的简单方式。
与 DOM 或 Expat 解析器相比,SimpleXML 仅仅用几行代码就可以从 XML 元素中读取文本数据。
SimpleXML 可把 XML 文档(或 XML 字符串)转换为对象,比如:
PHP SimpleXML 实例
假设我们有如下的 XML 文件,"note.xml":
现在我们想要输出上面的 XML 文件的不同信息:
以上代码将输出:
SimpleXMLElement Object ( [to] => Tove [from] => Jani [heading] => Reminder [body] => Don't forget me this weekend! )
18、PHP与AJAX
ajax实例
PHP – AJAX 与 PHP | 菜鸟教程
http://www.runoob.com/php/php-ajax-php.html
当用户在上面的输入框中键入字符时,会执行 "showHint()" 函数。该函数由 "onkeyup" 事件触发:
1 <html> 2 <head> 3 <script> 4 function showHint(str) 5 { 6 if (str.length==0) 7 { 8 document.getElementById("txtHint").innerHTML=""; 9 return; 10 } 11 if (window.XMLHttpRequest) 12 { 13 // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行的代码 14 xmlhttp=new XMLHttpRequest(); 15 } 16 else 17 { 18 //IE6, IE5 浏览器执行的代码 19 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 20 } 21 xmlhttp.onreadystatechange=function() 22 { 23 if (xmlhttp.readyState==4 && xmlhttp.status==200) 24 { 25 document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 26 } 27 } 28 xmlhttp.open("GET","gethint.php?q="+str,true); 29 xmlhttp.send(); 30 } 31 </script> 32 </head> 33 <body> 34 35 <p><b>在输入框中输入一个姓名:</b></p> 36 <form> 37 姓名: <input type="text" onkeyup="showHint(this.value)"> 38 </form> 39 <p>返回值: <span id="txtHint"></span></p> 40 41 </body> 42 </html>
源代码解释:
如果输入框是空的(str.length==0),该函数会清空 txtHint 占位符的内容,并退出该函数。
如果输入框不是空的,那么 showHint() 会执行以下步骤:
- 创建 XMLHttpRequest 对象
- 创建在服务器响应就绪时执行的函数
- 向服务器上的文件发送请求
- 请注意添加到 URL 末端的参数(q)(包含输入框的内容)