多数大学生出来选择的工作和专业无关
首页 > 专业知识

如何运用PHP变量php_self实现页内跳转

时间:2018-11-02 19:50:52 [来源]:郑州PHP培训学校

   如何运用PHP变量php_self实现页内跳转

  PHP变量php_self可以帮助我们实现页内跳转的功能,但是如何正确的运用这个变量来实现我们的需求呢?下面我们就为大家介绍具体的方法。
  我们也许对PHP变量php_self还不是非常的了解,不要紧,通过本文的介绍,大家肯定会对这一变量有一个深刻的认知程度。php_self是php的内置变量,记作$php_self,其作用是实现“页内跳转”。
  这里的页内跳转不同等于html的书签之类的跳转,而是php程序通过URL的尾参数的改变在同一个程序里提供不同的Web内容。试比较以下两个URL:
pc/index.php
pc/index.php?page=2
  以上两个URL,其区别是第二个URL地址多一个参数(?page=2),我们在实际打开它们时,在浏览器中得到的内容是不一样的,而点击时它们在同一页内跳转。这是使用PHP变量php_self实现的,用户编写的php程序将根据index.php尾部参数的不同而生成不同的内容,但都使用同一个网页程序(index.php),故我们称之为“页内跳转”,实际上,它生成的已经是另外一个Web文档了。
  从上面第二个URL地址我们已经知道,内置变量$php_self用问号引导参数,具体表示格式如下:
  $php_self?变量名=值 (实例:$php_sefl?id=0)问号后面的变量名是自定义的,通常,根据需要命名为阅读性强一些的英文名称(可以是缩写)。比如说,我们让链接指向程序的某个功能块是完成一次删除操作,那么,我们可以命名为$del,体现在代码里则是$php_self?del=值,如果点击了该链接,程序就执行删除操作(当然,删除操作代码得另外编写):
  链接代码:
  print
  "< a href=\"$php_self?del=true\">
  删除选定内容
  < /a>";
  跳转代码:
  if($del=="true")
  {
  //这里是删除代码
  }
  PHP变量php_self可以带多个参数,第一个参数使用问题(?)引导,后面的参数使用“与”号(&)引导,格式和举例如下:
  【语法】$php_self?变量1=值&变量2=值&变量3=值【例子】$php_self?user=blackhorse&id=write&page=0原则上,$php_self的尾部参数书写时应连在一起,但与号连接的变量可用空格或其他有效符号(如+号)隔开——有时我们的确需要将它们隔开,例如要想通过arv的验证,符号&会有些影响,隔开后生成的html代码才被arv所承认。
  PHP变量php_self是php的一个十分有用的内置变量,通常用于分页、执行预定义操作等。它所带的尾部参数中的各变量在php中使用$来读取,如以下地址:
  http://www.gxblk.com/pc/index.php?page=3
  我们将这样从以上地址读取页码并显示该页面的内容:
  $conts=echo_conts($page);
  echo_conts是一个自编函数,它用于显示每一页的内容,而变量$page的值是关键所在,它决定程序从库文件中提取的内容范围。
  详解PHP防范SQL注入的具体方法
  PHP防范SQL注入是一个非常重要的安全手段。相信大家对这一安全防范方法还不是很了解,希望通过本文介绍的内容大家能够充分掌握这一知识点。
  一个优秀的PHP程序员除了要能顺利的编写代码,还需要具备使程序处于安全环境下的能力。今天我们要向大家讲解的是有关PHP防范SQL注入的相关方法。
  说到网站安全就不得不提到SQL注入(SQL Injection),如果你用过ASP,对SQL注入一定有比较深的理解,PHP的安全性相对较高,这是因为MYSQL4以下的版本不支持子语句,而且当php.ini里的 magic_quotes_gpc 为On 时。
  提交的变量中所有的 ' (单引号), " (双引号), \ (反斜线) and 空字符会自动转为含有反斜线的转义字符,给SQL注入带来不少的麻烦。
  请看清楚:“麻烦”而已~这并不意味着PHP防范SQL注入,书中就讲到了利用改变注入语句的编码来绕过转义的方法,比如将SQL语句转成ASCII编码(类似:char(100,58,92,108,111,99,97,108,104,111,115,116…)这样的格式),或者转成16进制编码,甚至还有其他形式的编码,这样以来,转义过滤便被绕过去了,那么怎样防范呢:
  a. 打开magic_quotes_gpc或使用addslashes()函数在新版本的PHP中,就算magic_quotes_gpc打开了,再使用addslashes()函数,也不会有冲突,但是为了更好的实现版本兼容,建议在使用转移函数前先检测magic_quotes_gpc状态,或者直接关掉,代码如下:
  PHP防范SQL注入的代码
  // 去除转义字符
  function stripslashes_array($array) {
  if (is_array($array)) {
  foreach ($array as $k => $v) {
  $array[$k] = stripslashes_array($v);
  }
  } else if (is_string($array)) {
  $array = stripslashes($array);
  }
  return $array;
  }
  @set_magic_quotes_runtime(0);
  // 判断 magic_quotes_gpc 状态
  if (@get_magic_quotes_gpc()) {
  $_GET = stripslashes_array($_GET);
  $_POST = stripslashes_array($_POST);
  $_COOKIE = stripslashes_array($_COOKIE);
  }
  去除magic_quotes_gpc的转义之后再使用addslashes函数,代码如下:
  PHP防范SQL注入的代码
  $keywords = addslashes($keywords);
  $keywords = str_replace("_","\_",$keywords);//转义掉”_”
  $keywords = str_replace("%","\%",$keywords);//转义掉”%”
  后两个str_replace替换转义目的是防止黑客转换SQL编码进行攻击。
  b. 强制字符格式(类型)
  在很多时候我们要用到类似xxx.php?id=xxx这样的URL,一般来说$id都是整型变量,为了防范攻击者把$id篡改成攻击语句,我们要尽量强制变量,代码如下:
  PHP防范SQL注入的代码
  $id=intval($_GET[‘id’]);
  当然,还有其他的变量类型,如果有必要的话尽量强制一下格式。
  c. SQL语句中包含变量加引号
  这一点儿很简单,但也容易养成习惯,先来看看这两条SQL语句:
  SQL代码
  SELECT * FROM article WHERE articleid='$id'
  SELECT * FROM article WHERE articleid=$id两种写法在各种程序中都很普遍,但安全性是不同的,第一句由于把变量$id放在一对单引号中,这样使得我们所提交的变量都变成了字符串,即使包含了正确的SQL语句,也不会正常执行,而第二句不同,由于没有把变量放进单引号中,那我们所提交的一切,只要包含空格,那空格后的变量都会作为SQL语句执行,因此,我们要养成给SQL语句中变量加引号的习惯。
  d.URL伪静态化
  URL伪静态化也就是URL重写技术,像Discuz!一样,将所有的URL都rewrite成类似xxx-xxx-x.html格式,既有利于SEO,又达到了一定的安全性,也不失为一个好办法。但要想实现PHP防范SQL注入,前提是你得有一定的“正则”基础。
  为你详细讲解PHP重定向代码的具体实现功能
  我们为大家奉上的是PHP重定向代码,希望大家能够收藏。作为以后编写代码时的参考和学习对象。
  PHP语言是一个比较常用的功能强大的计算机语言。我们这次为大家编写的这个PHP重定向代码的功能很完善,可以很好地定制转跳。
  PHP重定向代码:
  < ?php
  /**
  * 重定向浏览器到指定的 URL
  *
  * @param string $url 要重定向的 url
  * @param int $delay 等待多少秒以后跳转
  * @param bool $js 指示是否返回用于跳转的 JavaScript 代码* @param bool $jsWrapped 指示返回
  JavaScript 代码时是否使用 < script> 标签进行包装* @param bool $return 指示是否返回生成的 JavaScript 代码*/
  function redirect($url, $delay = 0,
  $js = false, $jsWrapped = true, $return = false){
  $delay = (int)$delay;
  if (!$js) {
  if (headers_sent() || $delay > 0) {
  echo < < < EOT
  < html>
  < head>
  < meta http-equiv="refresh"
  content="{$delay};URL={$url}" />
  < /head>
  < /html>
  EOT;
  exit;
  } else {
  header("Location: {$url}");
  exit;
  }
  }
  $out = '';
  if ($jsWrapped) {
  $out .= '< script language="
  JavaScript" type="text/javascript">';
  }
  $url = rawurlencode($url);
  if ($delay > 0) {
  $out .= "window.setTimeOut(function
  () { document.location='{$url}'; }, {$delay});";} else {
  $out .= "document.location='{$url}';";
  }
  if ($jsWrapped) {
  $out .= '< /script>';
  }
  if ($return) {
  return $out;
  }
  echo $out;
  exit;
  }
  ?>
  希望通过上见介绍的这段PHP重定向代码示例,大家能学到更多的知识。
 

上一篇:PHP mail发送邮件出现问题的详细解决办法

下一篇:PHP5安装GD库的具体操作步骤