• [技术干货] PHP MySQL Where 子句
    WHERE 子句WHERE 子句用于提取满足指定标准的的记录。语法SELECT column_name(s)FROM table_nameWHERE column_name operator value如需学习更多关于 SQL 的知识,请访问我们的 SQL 教程。为了让 PHP 执行上面的语句,我们必须使用 mysqli_query() 函数。该函数用于向 MySQL 连接发送查询或命令。实例下面的实例将从 "Persons" 表中选取所有 FirstName='Peter' 的行:<?php$con=mysqli_connect("localhost","username","password","database");// 检测连接if (mysqli_connect_errno()){    echo "连接失败: " . mysqli_connect_error();}$result = mysqli_query($con,"SELECT * FROM PersonsWHERE FirstName='Peter'");while($row = mysqli_fetch_array($result)){    echo $row['FirstName'] . " " . $row['LastName'];    echo "<br>";}?>以上代码将输出:Peter Griffin
  • [技术干货] PHP如何删除关联数组中键值
    1、使用unset()函数可以用于取消设置关联数组中的键及其值。1234567891011// 声明关联数组$arr = array(    "1" => "加",    "2" => "减",    "3" => "乘",    "4" => "除");// 关联数组中删除键1及其值unset($arr['1']);// 显示数组元素var_dump($arr);2、使用array_diff_key()函数用于获取一个或多个数组之间的差集。此函数比较一个或多个数组之间的键并返回它们之间的差集。123456789101112// 声明关联数组$arr = array(    "1" => "春",    "2" => "夏",    "3" => "秋",    "4" => "冬",);// 从关联数组中删除键1及其值$result = array_diff_key($arr,    array_flip((array) ['1']));// 显示数组元素var_dump($result);内容扩展:函数介绍array_values() 函数返回包含数组中所有的值的数组。注意:被返回的数组将使用数值键,从 0 开始且以 1 递增。语法1array_values(array)参数说明array 必需。规定数组。代码实现:1234$arr = array('key1'=>'value1','key2'=>'value2','key3'=>'value3');$arr2 = array_values($arr);print_r($arr2);?>
  • [技术干货] php图像处理
    使用 PHP 图像处理函数,需要加载 GD 支持库。请确定 php.ini 加载了 GD 库:Window 服务器上:extension = php_gd2.dllLinux 和 Mac 系统上:extension = php_gd2.so使用 gd_info() 函数可以查看当前安装的 GD 库的信息:<?phpvar_dump(gd_info());?>输出大致如下:array(12) {  ["GD Version"]=>  string(26) "bundled (2.1.0 compatible)"  ["FreeType Support"]=>  bool(true)  ["FreeType Linkage"]=>  string(13) "with freetype"  ["T1Lib Support"]=>  bool(false)  ["GIF Read Support"]=>  bool(true)  ["GIF Create Support"]=>  bool(true)  ["JPEG Support"]=>  bool(true)  ["PNG Support"]=>  bool(true)  ["WBMP Support"]=>  bool(true)  ["XPM Support"]=>  bool(false)  ["XBM Support"]=>  bool(true)  ["JIS-mapped Japanese Font Support"]=>  bool(false)}
  • [技术干货] PHP RESTful
    REST(英文:Representational State Transfer,简称REST) ,指的是一组架构约束条件和原则。符合REST设计风格的Web API称为RESTful API。它从以下三个方面资源进行定义:直观简短的资源地址:URI,比如:http://example.com/resources/。传输的资源:Web服务接受与返回的互联网媒体类型,比如:JSON,XML,YAM等。对资源的操作:Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。本教程我们将使用 PHP(不用框架) 来创建一个 RESTful web service,在文章末尾你可以下载本章节使用到的代码。通过本教程你将学习到以下内容:创建一个 RESTful Webservice。使用原生 PHP, 不依赖任何框架。URI 模式需要遵循 REST 规则。RESTful service 接受与返回的格式可以是 JSON, XML等。根据不同情况响应对应的 HTTP 状态码。演示请求头的使用。使用 REST 客户端来测试 RESTful web service。RESTful Webservice 实例以下代码是 RESTful 服务类 Site.php:实例<?php /* * 教程 RESTful 演示实例 * RESTful 服务类 */ Class Site { private $sites = array( 1 => 'TaoBao', 2 => 'Google', 3 => 'Runoob', 4 => 'Baidu', 5 => 'Weibo', 6 => 'Sina' ); public function getAllSite(){ return $this->sites; } public function getSite($id){ $site = array($id => ($this->sites[$id]) ? $this->sites[$id] : $this->sites[1]); return $site; } } ?>RESTful Services URI 映射RESTful Services URI 应该设置为一个直观简短的资源地址。Apache 服务器的 .htaccess 应设置好对应的 Rewrite 规则。本实例我们将使用两个 URI 规则:1、获取所有站点列表:http://localhost/restexample/site/list/2、使用 id 获取指定的站点,以下 URI 为获取 id 为 3 的站点:http://localhost/restexample/site/list/3/项目的 .htaccess 文件配置规则如下所示:# 开启 rewrite 功能Options +FollowSymlinksRewriteEngine on# 重写规则RewriteRule ^site/list/$   RestController.php?view=all [nc,qsa]RewriteRule ^site/list/([0-9]+)/$   RestController.php?view=single&id=$1 [nc,qsa]RESTful Web Service 控制器在 .htaccess 文件中,我们通过设置参数 'view' 来获取 RestController.php 文件中对应的请求,通过获取 'view' 不同的参数来分发到不同的方法上。RestController.php 文件代码如下:实例<?php require_once("SiteRestHandler.php"); $view = ""; if(isset($_GET["view"])) $view = $_GET["view"]; /* * RESTful service 控制器 * URL 映射 */ switch($view){ case "all": // 处理 REST Url /site/list/ $siteRestHandler = new SiteRestHandler(); $siteRestHandler->getAllSites(); break; case "single": // 处理 REST Url /site/show/<id>/ $siteRestHandler = new SiteRestHandler(); $siteRestHandler->getSite($_GET["id"]); break; case "" : //404 - not found; break; } ?>简单的 RESTful 基础类以下提供了 RESTful 的一个基类,用于处理响应请求的 HTTP 状态码,SimpleRest.php 文件代码如下:实例<?php /* * 一个简单的 RESTful web services 基类 * 我们可以基于这个类来扩展需求 */ class SimpleRest { private $httpVersion = "HTTP/1.1"; public function setHttpHeaders($contentType, $statusCode){ $statusMessage = $this -> getHttpStatusMessage($statusCode); header($this->httpVersion. " ". $statusCode ." ". $statusMessage); header("Content-Type:". $contentType); } public function getHttpStatusMessage($statusCode){ $httpStatus = array( 100 => 'Continue', 101 => 'Switching Protocols', 200 => 'OK', 201 => 'Created', 202 => 'Accepted', 203 => 'Non-Authoritative Information', 204 => 'No Content', 205 => 'Reset Content', 206 => 'Partial Content', 300 => 'Multiple Choices', 301 => 'Moved Permanently', 302 => 'Found', 303 => 'See Other', 304 => 'Not Modified', 305 => 'Use Proxy', 306 => '(Unused)', 307 => 'Temporary Redirect', 400 => 'Bad Request', 401 => 'Unauthorized', 402 => 'Payment Required', 403 => 'Forbidden', 404 => 'Not Found', 405 => 'Method Not Allowed', 406 => 'Not Acceptable', 407 => 'Proxy Authentication Required', 408 => 'Request Timeout', 409 => 'Conflict', 410 => 'Gone', 411 => 'Length Required', 412 => 'Precondition Failed', 413 => 'Request Entity Too Large', 414 => 'Request-URI Too Long', 415 => 'Unsupported Media Type', 416 => 'Requested Range Not Satisfiable', 417 => 'Expectation Failed', 500 => 'Internal Server Error', 501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable', 504 => 'Gateway Timeout', 505 => 'HTTP Version Not Supported'); return ($httpStatus[$statusCode]) ? $httpStatus[$statusCode] : $status[500]; } } ?>RESTful Web Service 处理类以下是一个 RESTful Web Service 处理类 SiteRestHandler.php,继承了上面我们提供的 RESTful 基类,类中通过判断请求的参数来决定返回的 HTTP 状态码及数据格式,实例中我们提供了三种数据格式: "application/json" 、 "application/xml" 或 "text/html":SiteRestHandler.php 文件代码如下:实例<?php require_once("SimpleRest.php"); require_once("Site.php"); class SiteRestHandler extends SimpleRest { function getAllSites() { $site = new Site(); $rawData = $site->getAllSite(); if(empty($rawData)) { $statusCode = 404; $rawData = array('error' => 'No sites found!'); } else { $statusCode = 200; } $requestContentType = $_SERVER['HTTP_ACCEPT']; $this ->setHttpHeaders($requestContentType, $statusCode); if(strpos($requestContentType,'application/json') !== false){ $response = $this->encodeJson($rawData); echo $response; } else if(strpos($requestContentType,'text/html') !== false){ $response = $this->encodeHtml($rawData); echo $response; } else if(strpos($requestContentType,'application/xml') !== false){ $response = $this->encodeXml($rawData); echo $response; } } public function encodeHtml($responseData) { $htmlResponse = "<table border='1'>"; foreach($responseData as $key=>$value) { $htmlResponse .= "<tr><td>". $key. "</td><td>". $value. "</td></tr>"; } $htmlResponse .= "</table>"; return $htmlResponse; } public function encodeJson($responseData) { $jsonResponse = json_encode($responseData); return $jsonResponse; } public function encodeXml($responseData) { // 创建 SimpleXMLElement 对象 $xml = new SimpleXMLElement('<?xml version="1.0"?><site></site>'); foreach($responseData as $key=>$value) { $xml->addChild($key, $value); } return $xml->asXML(); } public function getSite($id) { $site = new Site(); $rawData = $site->getSite($id); if(empty($rawData)) { $statusCode = 404; $rawData = array('error' => 'No sites found!'); } else { $statusCode = 200; } $requestContentType = $_SERVER['HTTP_ACCEPT']; $this ->setHttpHeaders($requestContentType, $statusCode); if(strpos($requestContentType,'application/json') !== false){ $response = $this->encodeJson($rawData); echo $response; } else if(strpos($requestContentType,'text/html') !== false){ $response = $this->encodeHtml($rawData); echo $response; } else if(strpos($requestContentType,'application/xml') !== false){ $response = $this->encodeXml($rawData); echo $response; } } } ?>
  • [技术干货] PHP 实例 - AJAX 实时搜索
    AJAX Live Search在下面的实例中,我们将演示一个实时的搜索,在您键入数据的同时即可得到搜索结果。实时的搜索与传统的搜索相比,具有很多优势:当键入数据时,就会显示出匹配的结果当继续键入数据时,对结果进行过滤如果结果太少,删除字符就可以获得更宽的范围在下面的文本框中输入 "HTML",搜索包含 HTML 的页面:上面实例中的结果在一个 XML 文件(links.xml)中进行查找。为了让这个例子小而简单,我们只提供 6 个结果。实例解释 - HTML 页面当用户在上面的输入框中键入字符时,会执行 "showResult()" 函数。该函数由 "onkeyup" 事件触发:<html><head><script>function showResult(str){    if (str.length==0)    {         document.getElementById("livesearch").innerHTML="";        document.getElementById("livesearch").style.border="0px";        return;    }    if (window.XMLHttpRequest)    {// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行        xmlhttp=new XMLHttpRequest();    }    else    {// IE6, IE5 浏览器执行        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");    }    xmlhttp.onreadystatechange=function()    {        if (xmlhttp.readyState==4 && xmlhttp.status==200)        {            document.getElementById("livesearch").innerHTML=xmlhttp.responseText;            document.getElementById("livesearch").style.border="1px solid #A5ACB2";        }    }    xmlhttp.open("GET","livesearch.php?q="+str,true);    xmlhttp.send();}</script></head><body><form><input type="text" size="30" onkeyup="showResult(this.value)"><div id="livesearch"></div></form></body></html>源代码解释:如果输入框是空的(str.length==0),该函数会清空 livesearch 占位符的内容,并退出该函数。如果输入框不是空的,那么 showResult() 会执行以下步骤:创建 XMLHttpRequest 对象创建在服务器响应就绪时执行的函数向服务器上的文件发送请求请注意添加到 URL 末端的参数(q)(包含输入框的内容)PHP 文件上面这段通过 JavaScript 调用的服务器页面是名为 "livesearch.php" 的 PHP 文件。"livesearch.php" 中的源代码会搜索 XML 文件中匹配搜索字符串的标题,并返回结果:<?php$xmlDoc=new DOMDocument();$xmlDoc->load("links.xml");$x=$xmlDoc->getElementsByTagName('link');// 从 URL 中获取参数 q 的值$q=$_GET["q"];// 如果 q 参数存在则从 xml 文件中查找数据if (strlen($q)>0){    $hint="";    for($i=0; $i<($x->length); $i++)    {        $y=$x->item($i)->getElementsByTagName('title');        $z=$x->item($i)->getElementsByTagName('url');        if ($y->item(0)->nodeType==1)        {            // 找到匹配搜索的链接            if (stristr($y->item(0)->childNodes->item(0)->nodeValue,$q))            {                if ($hint=="")                {                    $hint="<a href='" .                     $z->item(0)->childNodes->item(0)->nodeValue .                     "' target='_blank'>" .                     $y->item(0)->childNodes->item(0)->nodeValue . "</a>";                }                else                {                    $hint=$hint . "<br /><a href='" .                     $z->item(0)->childNodes->item(0)->nodeValue .                     "' target='_blank'>" .                     $y->item(0)->childNodes->item(0)->nodeValue . "</a>";                }            }        }    }}// 如果没找到则返回 "no suggestion"if ($hint==""){    $response="no suggestion";}else{    $response=$hint;}// 输出结果echo $response;?>
  • [技术干货] PHP Cookie
    Cookie 是什么?cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。如何创建 Cookie?setcookie() 函数用于设置 cookie。注释:setcookie() 函数必须位于 <html> 标签之前。语法setcookie(name, value, expire, path, domain);实例 1在下面的例子中,我们将创建名为 "user" 的 cookie,并为它赋值 "runoob"。我们也规定了此 cookie 在一小时后过期:<?phpsetcookie("user", "runoob", time()+3600);?><html>.....注释:在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码。(为防止 URL 编码,请使用 setrawcookie() 取而代之。)实例 2您还可以通过另一种方式设置 cookie 的过期时间。这也许比使用秒表示的方式简单。<?php$expire=time()+60*60*24*30;setcookie("user", "runoob", $expire);?><html>.....在上面的实例中,过期时间被设置为一个月(60 秒 * 60 分 * 24 小时 * 30 天)。如何取回 Cookie 的值?PHP 的 $_COOKIE 变量用于取回 cookie 的值。在下面的实例中,我们取回了名为 "user" 的 cookie 的值,并把它显示在了页面上:<?php// 输出 cookie 值echo $_COOKIE["user"];// 查看所有 cookieprint_r($_COOKIE);?>在下面的实例中,我们使用 isset() 函数来确认是否已设置了 cookie:<html><head><meta charset="utf-8"><title>huawei(huawei.com)</title></head><body><?phpif (isset($_COOKIE["user"]))    echo "欢迎 " . $_COOKIE["user"] . "!<br>";else    echo "普通访客!<br>";?></body></html>如何删除 Cookie?当删除 cookie 时,您应当使过期日期变更为过去的时间点。删除的实例:<?php// 设置 cookie 过期时间为过去 1 小时setcookie("user", "", time()-3600);?>如果浏览器不支持 Cookie 该怎么办?如果您的应用程序需要与不支持 cookie 的浏览器打交道,那么您不得不使用其他的办法在您的应用程序中的页面之间传递信息。一种方式是通过表单传递数据(有关表单和用户输入的内容,在本教程的前面章节中我们已经介绍过了)。下面的表单在用户单点击 "Submit" 按钮时,向 "welcome.php" 提交了用户输入:<html><head><meta charset="utf-8"><title>华为(huawei.com)</title></head><body><form action="welcome.php" method="post">名字: <input type="text" name="name">年龄: <input type="text" name="age"><input type="submit"></form></body></html>取回 "welcome.php" 文件中的值,如下所示:<html><head><meta charset="utf-8"><title>华为(huawei.com)</title></head><body>欢迎 <?php echo $_POST["name"]; ?>.<br>你 <?php echo $_POST["age"]; ?> 岁了。</body></html>
  • [技术干货] AJAX PHP
    实例解释 - HTML 页面当用户在上面的输入框中键入字符时,会执行 "showHint()" 函数。该函数由 "onkeyup" 事件触发:<html><head><script>function showHint(str){    if (str.length==0)    {         document.getElementById("txtHint").innerHTML="";        return;    }    if (window.XMLHttpRequest)    {        // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行的代码        xmlhttp=new XMLHttpRequest();    }    else    {            //IE6, IE5 浏览器执行的代码        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");    }    xmlhttp.onreadystatechange=function()    {        if (xmlhttp.readyState==4 && xmlhttp.status==200)        {            document.getElementById("txtHint").innerHTML=xmlhttp.responseText;        }    }    xmlhttp.open("GET","gethint.php?q="+str,true);    xmlhttp.send();}</script></head><body><p><b>在输入框中输入一个姓名:</b></p><form> 姓名: <input type="text" onkeyup="showHint(this.value)"></form><p>返回值: <span id="txtHint"></span></p></body></html>源代码解释:如果输入框是空的(str.length==0),该函数会清空 txtHint 占位符的内容,并退出该函数。如果输入框不是空的,那么 showHint() 会执行以下步骤:创建 XMLHttpRequest 对象创建在服务器响应就绪时执行的函数向服务器上的文件发送请求请注意添加到 URL 末端的参数(q)(包含输入框的内容)PHP 文件上面这段通过 JavaScript 调用的服务器页面是名为 "gethint.php" 的 PHP 文件。"gethint.php" 中的源代码会检查姓名数组,然后向浏览器返回对应的姓名:<?php// 将姓名填充到数组中$a[]="Anna";$a[]="Brittany";$a[]="Cinderella";$a[]="Diana";$a[]="Eva";$a[]="Fiona";$a[]="Gunda";$a[]="Hege";$a[]="Inga";$a[]="Johanna";$a[]="Kitty";$a[]="Linda";$a[]="Nina";$a[]="Ophelia";$a[]="Petunia";$a[]="Amanda";$a[]="Raquel";$a[]="Cindy";$a[]="Doris";$a[]="Eve";$a[]="Evita";$a[]="Sunniva";$a[]="Tove";$a[]="Unni";$a[]="Violet";$a[]="Liza";$a[]="Elizabeth";$a[]="Ellen";$a[]="Wenche";$a[]="Vicky";//从请求URL地址中获取 q 参数$q=$_GET["q"];//查找是否由匹配值, 如果 q>0if (strlen($q) > 0){    $hint="";    for($i=0; $i<count($a); $i++)    {        if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q))))        {            if ($hint=="")            {                $hint=$a[$i];        
  • [热门活动] 【榜单公示啦】1024开发者技能刷榜赢华为手环4、小音箱、快充、京东卡等好礼
    活动介绍华为云权威开发技能测评来啦,覆盖主流岗位技能客观、精准定位技能水平,助你明确短板,高效提升即日起至10月31日,通过测评、邀请好友通过测评、转发海报集赞、转发微博即可上本活动技能榜单和邀请达人榜单并可参与赢以下奖品奖活动赢奖规则参与细则如何报名&参与测评?①点击这里>>>,进入报名问卷,点击提交即可完成报名;②完成①后,会自动进到测评系统,选择任一技能测评进行测评(答题次数不限,可通过多次答题来通过测评,见下文)。如何邀请好友或重复参与测评?③完成报名后,再次点击步骤①的同一链接>>>,即可看到邀请好友、进入测评系统入口,可根据提示进入相应选项完成相应任务。如何转发朋友圈集赞?④在③中,选择邀请好友选项,即可生成海报,将海报下载转发朋友圈集赞;并将“集赞截图+参与活动用的华为云账号”发给下方小助手统计。如何转发微博?转发华为云微博本活动微博,传送门:https://weibo.com/1930559805/KDSnwwxQy?from=page_1006061930559805_profile&wvr=6&mod=weibotime如何抽奖?除微博抽奖直接通过微博抽奖工具抽奖外,其他抽奖奖项将在活动截止后,运营小姐姐会从后台拿到满足相应抽奖资格的账号,用抽奖工具进行统一抽奖。榜单&获奖公示邀请达人榜单技能榜单(不同榜单优先按得分降序排列,其次按账户名升序排列)②获奖结果和发奖事宜将在11月2日内于本帖置顶评论公示。
  • [技术干货] PHP 过滤器
    什么是 PHP 过滤器?PHP 过滤器用于验证和过滤来自非安全来源的数据。测试、验证和过滤用户输入或自定义数据是任何 Web 应用程序的重要组成部分。PHP 的过滤器扩展的设计目的是使数据过滤更轻松快捷。为什么使用过滤器?几乎所有的 Web 应用程序都依赖外部的输入。这些数据通常来自用户或其他应用程序(比如 web 服务)。通过使用过滤器,您能够确保应用程序获得正确的输入类型。您应该始终对外部数据进行过滤!输入过滤是最重要的应用程序安全课题之一。什么是外部数据?来自表单的输入数据CookiesWeb services data服务器变量数据库查询结果函数和过滤器如需过滤变量,请使用下面的过滤器函数之一: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 参考手册。Validating 和 Sanitizing有两种过滤器:Validating 过滤器:用于验证用户输入严格的格式规则(比如 URL 或 E-Mail 验证)如果成功则返回预期的类型,如果失败则返回 FALSESanitizing 过滤器:用于允许或禁止字符串中指定的字符无数据格式规则始终返回字符串选项和标志选项和标志用于向指定的过滤器添加额外的过滤选项。不同的过滤器有不同的选项和标志。在下面的实例中,我们用 filter_var() 和 "min_range" 以及 "max_range" 选项验证了一个整数:实例<?php$var=300; $int_options = array(    "options"=>array    (        "min_range"=>0,        "max_range"=>256    )); if(!filter_var($var, FILTER_VALIDATE_INT, $int_options)){    echo("不是一个合法的整数");}else{    echo("是个合法的整数");}?>就像上面的代码一样,选项必须放入一个名为 "options" 的相关数组中。如果使用标志,则不需在数组内。由于整数是 "300",它不在指定的范围内,以上代码的输出将是:不是一个合法的整数如需查看完整的函数和过滤器列表,请访问我们的 PHP Filter 参考手册。您可以看到每个过滤器的可用选项和标志。验证输入让我们试着验证来自表单的输入。我们需要做的第一件事情是确认是否存在我们正在查找的输入数据。然后我们用 filter_input() 函数过滤输入的数据。在下面的实例中,输入变量 "email" 被传到 PHP 页面:实例<?phpif(!filter_has_var(INPUT_GET, "email")){    echo("没有 email 参数");}else{    if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL))    {        echo "不是一个合法的 E-Mail";    }    else    {        echo "是一个合法的 E-Mail";    }}?>实例解释上面的实例有一个通过 "GET" 方法传送的输入变量 (email):检测是否存在 "GET" 类型的 "email" 输入变量如果存在输入变量,检测它是否是有效的 e-mail 地址净化输入让我们试着清理一下从表单传来的 URL。首先,我们要确认是否存在我们正在查找的输入数据。然后,我们用 filter_input() 函数来净化输入数据。在下面的实例中,输入变量 "url" 被传到 PHP 页面:<?phpif(!filter_has_var(INPUT_GET, "url")){    echo("没有 url 参数");}else{    $url = filter_input(INPUT_GET,     "url", FILTER_SANITIZE_URL);    echo $url;}?>实例解释上面的实例有一个通过 "GET" 方法传送的输入变量 (url):检测是否存在 "GET" 类型的 "url" 输入变量如果存在此输入变量,对其进行净化(删除非法字符),并将其存储在 $url 变量中假如输入变量是一个类似这样的字符串:"http://www.ruåånoøøob.com/",则净化后的 $url 变量如下所示:过滤多个输入表单通常由多个输入字段组成。为了避免对 filter_var 或 filter_input 函数重复调用,我们可以使用 filter_var_array 或 the filter_input_array 函数。在本例中,我们使用 filter_input_array() 函数来过滤三个 GET 变量。接收到的 GET 变量是一个名字、一个年龄以及一个 e-mail 地址:实例<?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("年龄必须在 1 到 120 之间。<br>");}elseif(!$result["email"]){    echo("E-Mail 不合法<br>");}else{    echo("输入正确");}?>实例解释上面的实例有三个通过 "GET" 方法传送的输入变量 (name、age 和 email):设置一个数组,其中包含了输入变量的名称和用于指定的输入变量的过滤器调用 filter_input_array() 函数,参数包括 GET 输入变量及刚才设置的数组检测 $result 变量中的 "age" 和 "email" 变量是否有非法的输入。(如果存在非法输入,在使用 filter_input_array() 函数之后,输入变量为 FALSE。)filter_input_array() 函数的第二个参数可以是数组或单一过滤器的 ID。如果该参数是单一过滤器的 ID,那么这个指定的过滤器会过滤输入数组中所有的值。如果该参数是一个数组,那么此数组必须遵循下面的规则:必须是一个关联数组,其中包含的输入变量是数组的键(比如 "age" 输入变量)此数组的值必须是过滤器的 ID ,或者是规定了过滤器、标志和选项的数组使用 Filter Callback通过使用 FILTER_CALLBACK 过滤器,可以调用自定义的函数,把它作为一个过滤器来使用。这样,我们就拥有了数据过滤的完全控制权。您可以创建自己的自定义函数,也可以使用已存在的 PHP 函数。将您准备用到的过滤器的函数,按指定选项的规定方法进行规定。在关联数组中,带有名称 "options"。在下面的实例中,我们使用了一个自定义的函数把所有 "_" 转换为 ".":实例<?phpfunction convertSpace($string){    return str_replace("_", ".", $string);} $string = "www_runoob_com!"; echo filter_var($string, FILTER_CALLBACK,array("options"=>"convertSpace"));?>实例解释上面的实例把所有 "_" 转换成 "." :创建一个把 "_" 替换为 "." 的函数调用 filter_var() 函数,它的参数是 FILTER_CALLBACK 过滤器以及包含我们的函数的数组
  • [技术干货] PHP 高级过滤器
    检测一个数字是否在一个范围内以下实例使用了 filter_var() 函数来检测一个 INT 型的变量是否在 1 到 200 内:实例<?php$int = 122;$min = 1;$max = 200;if (filter_var($int, FILTER_VALIDATE_INT, array("options" => array("min_range"=>$min, "max_range"=>$max))) === false) {    echo("变量值不在合法范围内");} else {    echo("变量值在合法范围内");}?>检测 IPv6 地址以下实例使用了 filter_var() 函数来检测一个 $ip 变量是否是 IPv6 地址:实例<?php$ip = "2001:0db8:85a3:08d3:1319:8a2e:0370:7334";if (!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) {    echo("$ip 是一个 IPv6 地址");} else {    echo("$ip 不是一个 IPv6 地址");}?>检测 URL - 必须包含QUERY_STRING(查询字符串)以下实例使用了 filter_var() 函数来检测 $url 是否包含查询字符串:实例<?php$url = "http://www.runoob.com";if (!filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED) === false) {    echo("$url 是一个合法的 URL");} else {    echo("$url 不是一个合法的 URL");}?>移除 ASCII 值大于 127 的字符以下实例使用了 filter_var() 函数来移除字符串中 ASCII 值大于 127 的字符,同样它也能移除 HTML 标签:实例<?php$str = "<h1>Hello WorldÆØÅ!</h1>";$newstr = filter_var($str, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);echo $newstr;?>
  • [技术干货] PHP 异常处理
    异常是什么PHP 5 提供了一种新的面向对象的错误处理方法。异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程。这种情况称为异常。当异常被触发时,通常会发生:当前代码状态被保存代码执行被切换到预定义(自定义)的异常处理器函数根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本我们将展示不同的错误处理方法:异常的基本使用创建自定义的异常处理器多个异常重新抛出异常设置顶层异常处理器注释:异常应该仅仅在错误情况下使用,而不应该用于在一个指定的点跳转到代码的另一个位置。异常的基本使用当异常被抛出时,其后的代码不会继续执行,PHP 会尝试查找匹配的 "catch" 代码块。如果异常没有被捕获,而且又没用使用 set_exception_handler() 作相应的处理的话,那么将发生一个严重的错误(致命错误),并且输出 "Uncaught Exception" (未捕获异常)的错误消息。让我们尝试抛出一个异常,同时不去捕获它:<?php // 创建一个有异常处理的函数 function checkNum($number) { if($number>1) { throw new Exception("Value must be 1 or below"); } return true; } // 触发异常 checkNum(2); ?>上面的代码会得到类似这样的一个错误: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 7Try、throw 和 catch要避免上面实例中出现的错误,我们需要创建适当的代码来处理异常。适当的处理异常代码应该包括:Try - 使用异常的函数应该位于 "try" 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。Throw - 里规定如何触发异常。每一个 "throw" 必须对应至少一个 "catch"。Catch - "catch" 代码块会捕获异常,并创建一个包含异常信息的对象。让我们触发一个异常:<?php // 创建一个有异常处理的函数 function checkNum($number) { if($number>1) { throw new Exception("变量值必须小于等于 1"); } return true; } // 在 try 块 触发异常 try { checkNum(2); // 如果抛出异常,以下文本不会输出 echo '如果输出该内容,说明 $number 变量'; } // 捕获异常 catch(Exception $e) { echo 'Message: ' .$e->getMessage(); } ?>上面代码将得到类似这样一个错误:Message: 变量值必须小于等于 1实例解释:上面的代码抛出了一个异常,并捕获了它:创建 checkNum() 函数。它检测数字是否大于 1。如果是,则抛出一个异常。在 "try" 代码块中调用 checkNum() 函数。checkNum() 函数中的异常被抛出。"catch" 代码块接收到该异常,并创建一个包含异常信息的对象 ($e)。通过从这个 exception 对象调用 $e->getMessage(),输出来自该异常的错误消息。然而,为了遵循 "每个 throw 必须对应一个 catch" 的原则,可以设置一个顶层的异常处理器来处理漏掉的错误。创建一个自定义的 Exception 类创建自定义的异常处理程序非常简单。我们简单地创建了一个专门的类,当 PHP 中发生异常时,可调用其函数。该类必须是 exception 类的一个扩展。这个自定义的 customException 类继承了 PHP 的 exception 类的所有属性,您可向其添加自定义的函数。我们开始创建 customException 类:<?php class customException extends Exception { public function errorMessage() { // 错误信息 $errorMsg = '错误行号 '.$this->getLine().' in '.$this->getFile() .': <b>'.$this->getMessag
  • [技术干货] PhP error
    PHP 错误处理在创建脚本和 Web 应用程序时,错误处理是一个重要的部分。如果您的代码缺少错误检测编码,那么程序看上去很不专业,也为安全风险敞开了大门。我将为您讲解不同的错误处理方法:简单的 "die()" 语句自定义错误和错误触发器错误报告基本的错误处理:使用 die() 函数第一个实例展示了一个打开文本文件的简单脚本:<?php$file=fopen("welcome.txt","r");?>如果文件不存在,您会得到类似这样的错误:Warning: fopen(welcome.txt) [function.fopen]: failed to open stream:No such file or directory in /www/runoob/test/test.php on line 2为了避免用户得到类似上面的错误消息,我们在访问文件之前检测该文件是否存在:<?phpif(!file_exists("welcome.txt")){    die("文件不存在");}else{    $file=fopen("welcome.txt","r");}?>现在,如果文件不存在,您会得到类似这样的错误消息:文件不存在相比之前的代码,上面的代码更有效,这是由于它采用了一个简单的错误处理机制在错误之后终止了脚本。然而,简单地终止脚本并不总是恰当的方式。让我们研究一下用于处理错误的备选的 PHP 函数。创建自定义错误处理器创建一个自定义的错误处理器非常简单。我们很简单地创建了一个专用函数,可以在 PHP 中发生错误时调用该函数。该函数必须有能力处理至少两个参数 (error level 和 error message),但是可以接受最多五个参数(可选的:file, line-number 和 error context):语法error_function(error_level,error_message,error_file,error_line,error_context)
  • [技术干货] PHP Emile函数
    PHP 简易 E-Mail通过 PHP 发送电子邮件的最简单的方式是发送一封文本 email。在下面的实例中,我们首先声明变量($to, $subject, $message, $from, $headers),然后我们在 mail() 函数中使用这些变量来发送了一封 E-mail:<?php$to = "someone@example.com";         // 邮件接收者$subject = "参数邮件";                // 邮件标题$message = "Hello! 这是邮件的内容。";  // 邮件正文$from = "someonelse@example.com";   // 邮件发送者$headers = "From:" . $from;         // 头部信息设置mail($to,$subject,$message,$headers);echo "邮件已发送";?>PHP Mail 表单通过 PHP,您能够在自己的站点制作一个反馈表单。下面的实例向指定的 e-mail 地址发送了一条文本消息:<html><head><meta charset="utf-8"><title>华为云(huaweiyun.com)</title></head><body><?phpif (isset($_REQUEST['email'])) { // 如果接收到邮箱参数则发送邮件    // 发送邮件    $email = $_REQUEST['email'] ;    $subject = $_REQUEST['subject'] ;    $message = $_REQUEST['message'] ;    mail("someone@example.com", $subject,    $message, "From:" . $email);    echo "邮件发送成功";} else { // 如果没有邮箱参数则显示表单    echo "<form method='post' action='mailform.php'>    Email: <input name='email' type='text'><br>    Subject: <input name='subject' type='text'><br>    Message:<br>    <textarea name='message' rows='15' cols='40'>    </textarea><br>    <input type='submit'>    </form>";}?></body></html>
  • [技术干货] Php COOKIE
    Cookie 是什么?cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。如何创建 Cookie?setcookie() 函数用于设置 cookie。注释:setcookie() 函数必须位于 <html> 标签之前。语法setcookie(name, value, expire, path, domain);实例 1在下面的例子中,我们将创建名为 "user" 的 cookie,并为它赋值 "runoob"。我们也规定了此 cookie 在一小时后过期:<?phpsetcookie("user", "runoob", time()+3600);?><html>.....注释:在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码。(为防止 URL 编码,请使用 setrawcookie() 取而代之。)实例 2您还可以通过另一种方式设置 cookie 的过期时间。这也许比使用秒表示的方式简单。<?php$expire=time()+60*60*24*30;setcookie("user", "runoob", $expire);?><html>.....在上面的实例中,过期时间被设置为一个月(60 秒 * 60 分 * 24 小时 * 30 天)。如何取回 Cookie 的值?PHP 的 $_COOKIE 变量用于取回 cookie 的值。在下面的实例中,我们取回了名为 "user" 的 cookie 的值,并把它显示在了页面上:<?php// 输出 cookie 值echo $_COOKIE["user"];// 查看所有 cookieprint_r($_COOKIE);?>在下面的实例中,我们使用 isset() 函数来确认是否已设置了 cookie:<html><head><meta charset="utf-8"><title>huaweiyun(huaweiyun.com)</title></head><body><?phpif (isset($_COOKIE["user"]))    echo "欢迎 " . $_COOKIE["user"] . "!<br>";else    echo "普通访客!<br>";?></body></html>如何删除 Cookie?当删除 cookie 时,您应当使过期日期变更为过去的时间点。删除的实例:<?php// 设置 cookie 过期时间为过去 1 小时setcookie("user", "", time()-3600);?>如果浏览器不支持 Cookie 该怎么办?如果您的应用程序需要与不支持 cookie 的浏览器打交道,那么您不得不使用其他的办法在您的应用程序中的页面之间传递信息。一种方式是通过表单传递数据(有关表单和用户输入的内容,在本教程的前面章节中我们已经介绍过了)。下面的表单在用户单点击 "Submit" 按钮时,向 "welcome.php" 提交了用户输入:<html><head><meta charset="utf-8"><title>huaweiyun(huaweiyun.com)</title></head><body><form action="welcome.php" method="post">名字: <input type="text" name="name">年龄: <input type="text" name="age"><input type="submit"></form></body></html>取回 "welcome.php" 文件中的值,如下所示:<html><head><meta charset="utf-8"><title>huaweiyun(huaweiyun.com)</title></head><body>欢迎 <?php echo $_POST["name"]; ?>.<br>你 <?php echo $_POST["age"]; ?> 岁了。</body></html>
  • [技术干货] PHP get变量
    在 PHP 中,预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值。$_GET 变量预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值。从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送信息的量也有限制。实例form.html 文件代码如下:<html><head><meta charset="utf-8"><title>菜鸟教程(runoob.com)</title></head><body><form action="welcome.php" method="get">名字: <input type="text" name="fname">年龄: <input type="text" name="age"><input type="submit" value="提交"></form></body></html>当用户点击 "Submit" 按钮时,发送到服务器的 URL 如下所示:http://www.runoob.com/welcome.php?fname=Runoob&age=3"welcome.php" 文件现在可以通过 $_GET 变量来收集表单数据了(请注意,表单域的名称会自动成为 $_GET 数组中的键):欢迎 <?php echo $_GET["fname"]; ?>!<br>你的年龄是 <?php echo $_GET["age"]; ?>  岁。何时使用 method="get"?在 HTML 表单中使用 method="get" 时,所有的变量名和值都会显示在 URL 中。注释:所以在发送密码或其他敏感信息时,不应该使用这个方法!然而,正因为变量显示在 URL 中,因此可以在收藏夹中收藏该页面。在某些情况下,这是很有用的。注释:HTTP GET 方法不适合大型的变量值。它的值是不能超过 2000 个字符的。
总条数:185 到第 页
上滑加载中