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

PHP获取当前url的具体方法介绍

时间:2018-10-12 19:20:35 [来源]:郑州PHP培训学校

   PHP获取当前url的具体方法介绍

  我们今天向大家介绍的是有关PHP获取当前url的函数的具体方法,通过对这个函数方法的了解,进一步加深我们对PHP语言的认识,提高我们的学习水平。
  PHP获取当前url的具体方法如下:
  $url_this = "'http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];;
  echo $url_this;
  则显示 :http://localhost/drupaluser/index.php
  服务器变量:$_SERVER
  注: 在 PHP 4.1.0 及以后版本使用。之前的版本,使用 $HTTP_SERVER_VARS。
  $_SERVER 是一个包含诸如头部(headers)、路径(paths)和脚本位置(scrīpt locations)的数组。数组的实体由 web 服务器创建。不能保证所有的服务器都能产生所有的信息;服务器可能忽略了一些信息,或者产生了一些未在下面列出的新的信息。这意味着,大量的这些变量在 CGI 1.1 specification 中说明,所以您应该仔细研究它。
  这是一个“superglobal”,或者可以描述为自动全局变量。这只不过意味这它在所有的脚本中都有效。在函数或方法中您不需要使用 global $_SERVER; 访问它,就如同使用 $HTTP_SERVER_VARS 一样。
  $HTTP_SERVER_VARS 包含着同样的信息,但是不是一个自动全局变量。(注意: $HTTP_SERVER_VARS 和 $_SERVER 是不同的变量,PHP 处理它们的方式不同。)
  如果设置了 register_globals 指令,这些变量也在所有脚本中可用;也就是,分离了 $_SERVER 和 $HTTP_SERVER_VARS 数组。相关信息,请参阅安全的相关章节 使用 Register Globals。这些单独的全局变量不是自动全局变量。
  您或许会发现下面列出的某些 $_SERVER 元素并不可用。注意,如果以命令行方式运行 PHP,下面列出的元素几乎没有有效的(或是没有任何实际意义的)。
  “PHP_SELF”
  当前正在执行脚本的文件名,与 document root相关。举例来说,在URL地址为 http://example.com/test.php/foo.bar的脚本中使用 $_SERVER['PHP_SELF'] 将会得到 /test.php/foo.bar 这个结果。
  如果 PHP 以命令行方式运行,该变量无效。
  “argv”
  传递给该脚本的参数。当脚本运行在命令行方式时,argv 变量传递给程序 C 语言样式的命令行参数。当调用 GET 方法时,该变量包含请求的数据。
  “argc”
  包含传递给程序的命令行参数的个数(如果运行在命令行模式)。
  “GATEWAY_INTERFACE”
  服务器使用的 CGI 规范的版本。例如,“CGI/1.1”。
  'SERVER_NAME'
  当前运行脚本所在服务器主机的名称。如果该脚本运行在一个虚拟主机上,该名称是由那个虚拟主机所设置的值决定。
  'SERVER_SOFTWARE'
  服务器标识的字串,在响应请求时的头部中给出。
  “SERVER_PROTOCOL”
  请求页面时通信协议的名称和版本。例如,“HTTP/1.0”。
  “REQUEST_METHOD”
  访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT”。
  “QUERY_STRING”
  查询(query)的字符串。
  “DOCUMENT_ROOT”
  当前运行脚本所在的文档根目录。在服务器配置文件中定义。
  “HTTP_ACCEPT”
  当前请求的 Accept: 头部的内容。
  “HTTP_ACCEPT_CHARSET”
  当前请求的 Accept-Charset: 头部的内容。例如:“iso-8859-1,*,utf-8”。
  “HTTP_ACCEPT_ENCODING”
  当前请求的 Accept-Encoding: 头部的内容。例如:“gzip”。
  “HTTP_ACCEPT_LANGUAGE”
  当前请求的 Accept-Language: 头部的内容。例如:“en”。
  “HTTP_CONNECTION”
  当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。
  “HTTP_HOST”
  当前请求的 Host: 头部的内容。
  “HTTP_REFERER”
  链接到当前页面的前一页面的 URL 地址。不是所有的用户代理(浏览器)都会设置这个变量,而且有的还可以手工修改 HTTP_REFERER。因此,这个变量不总是正确真实的。
  “HTTP_USER_AGENT”
  当前请求的 User_Agent: 头部的内容。该字符串表明了访问该页面的用户代理的信息。一个典型的例子是:Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)。您也可以使用 get_browser() 得到这个信息。
  “REMOTE_ADDR”
  正在浏览当前页面用户的 IP 地址。
  'REMOTE_HOST'
  正在浏览当前页面用户的主机名。反向域名解析基于该用户的 REMOTE_ADDR。
  注: 必须配置 Web 服务器来建立此变量。例如 Apache 需要在 httpd.conf 中有 HostnameLookups On。参见 gethostbyaddr()。
  “REMOTE_PORT”
  用户连接到服务器时所使用的端口。
  巧妙运用PHP函数实现采集器
  PHP经过长时间的发展,很多用户都很了解PHP了,我们现在可以利用PHP函数实现采集器程序。何为采集器,通常又叫小偷程序,主要是用来抓取别人网页内容的。关于采集器的制作,其实并不难,就是远程打开要采集的网页,然后用正则表达式将需要的内容匹配出来,只要稍微有点正则表达式的基础,都能做出自己的采集器来的。
  前几天做了个小说连载的程序,因为怕更新麻烦,顺带就写了个采集器,采集八路中文网的,功能比较简单,不能自定义规则,不过大概思路都在里面了,自定义规则可以自己来扩展。用php来做采集器主要用到两个PHP函数:file_get_contents()和preg_match_all(),前一个是远程读取网页内容的,不过只在php5以上的版本才能用,后一个是正则函数,用来提取需要的内容的。面就一步一步来讲功能实现。因为是采集小说,所以首先要将书名、作者、类型这三个提取出来,别的信息可根据需要提取。
  这样还不够,还需要一个切取PHP函数:
  function cut($string,$start,$end){
  $message = explode($start,$string);
  $message = explode($end,$message[1]); return $message[0];}其中$string为要被切取的内容,$start为开始的地方,$end为结束的地方。取出分类号:
  $start = "Html/Book/";
  $end
  = "List.shtm";
  $typeid = cut($typeid[0][0],$start,$end);
  $typeid = explode("/",$typeid);[/php]
  这样,$typeid[0]就是我们要找的分类号了。方法如下:
  $ustart = "\"";
  $uend
  = "\"";
  //t表示title的缩写
  $tstart = ">";
  $tend
  = "<";
  //取路径,例如:123.shtm,2342.shtm,233.shtm
  preg_match_all("/\"[0-9]{1,}\.(shtm)\"/is",$chapterurl,$url);
  //取标题,例如:第一章 九世善人
  preg_match_all("/<a href=\"[0-9]{1,}\.shtm\"(.*?)\<\/a>/is",$file,$title);
  $countcountcount = count($url[0]);
  for($i=0;$i<=$count;$i++)
  {
  $u = cut($url[0][$i],$ustart,$uend);
  $t = cut($title[0][$i],$tstart,$tend);
  $array[$u] = $t;
  }
  $array数组就是所有的章节地址了,到这里,采集器就完成一半了,剩下的就是循环打开每个章节地址,读取,然后将内容匹配出来。这个比较简单,这里就不详细叙述了。
  提高PHP的运行效率的方法
 
PHP的优点之一是速度很快,对于一般的网站应用,可以说是已经足够了。不过如果站点的访问量很高、带宽窄或者其它的因素令服务器产生性能瓶颈的时候,你可能得想想其它的办法来进一步提高PHP的速度了。
  1.代码优化
  (1)用i+=1代替i=i+1。符合c/c++的习惯,效率还高。
  (2)尽可能的使用PHP内部函数。自己编写函数之前要详细查阅手册,看有没有相关的函数,否则费力不讨好。
  (3)能使用单引号字符串尽量使用单引号字符串。单引号字符串的效率要高于双引号字符串。
  (4)用foreach代替while遍历数组。遍历数组时foreach的效率明显高于while循环,而且不需要调用reset函数。两种遍历方法如下:
  程序1:
  reset ($arr);
  while (list($key, $value) = each ($arr)) {
  echo "Key: $key; Value: $value<br>n";
  }
  程序2:
  foreach ($arr as $key => $value) {
  echo "Key: $key; Value: $value<br>n";
  }
  2.压缩页面
  HTTP1.1协议支持页面压缩传送,也就是说服务器把一个页面压缩传送到客户端,然后在客户端将页面解压缩再显示给客户。在服务器端有两种传输方式,一种是页面事先已经压缩好了,传送时只要将压缩页面传送到客户端就行,这种适用于静态网页多的情况,但是对于大多数站点,动态页面比较多,这种方法不太适合,因为很多传到客户端的页面其实是没有的,是服务器接到客户端用户请求动态产生的,所以就要求每生成一个动态页面都要在传到客户端以前先打包压缩。从PHP的4.0.4版以后,可以在php.ini文件中增加一行配置“output_handler = ob_gzhandler”,这样每个动态生成的页面在传送到客户端之前都会进行压缩,但是根据PHP官方站点的说明,这个参数不能与“zlib.output_compression = on”参数同时使用,因为容易引起PHP工作不正常,另外它只能压缩PHP程序的动态生成的页面,对于大量的静态页面尤其是图像文件就不行了。但是mod_gzip模块为Apahe提供了将静态页面在传给客户端以前先压缩的功能,它的压缩比最大能到10,一般情况下可以到 3,也就是说网站的传输速率一下提高了三倍多。要使用mod_gzip还要对Apache进行相应的配置,需要在httpd.conf文件中加入一些参数:
  mod_gzip_on Yes(模块是否生效)
  mod_gzip_minimum_file_size 1002(最小压缩文件大小)
  mod_gzip_maximum_file_size 0(最大压缩文件大小,0表示没有限制)
  mod_gzip_maximum_inmem_size 60000(最大可占用内存)
  mod_gzip_item_include file "..gif102SINA>DOUBLE_QUOTATION (以gif结尾的文件要压缩传送)
  mod_gzip_item_include file ".txt102SINA>DOUBLE_QUOTATION
  mod_gzip_item_include file ".html102SINA>DOUBLE_QUOTATION
  mod_gzip_item_exclude file ".css102SINA>DOUBLE_QUOTATION
  3.文件缓存
  这种方法通常是针对PHP、PERL等CGI程序而言的,因为这些程序有一个共同的特征就是接到用户的请求后不是马上将结果返回给用户,而是经过解释器解释执行后将执行结果返回给客户,这期间通常都要涉及到数据库的访问。这样就会出现一个问题,当两个用户访问同一个页面时,系统将分别对两个请求进行操作,但事实上这两个操作可能是一模一样的,这样无形当中增加了系统的负担。所以通常的解决办法是在系统内存中开辟出一段空间,当用户第一次访问页面后将执行结果存放在该内存中,当有用户再一次访问该页面时,系统就将页面直接从内存中调出而不需要重新解释执行,这段内存空间就叫缓存。目前流行的缓存管理程序是Zend Technologies公司的Zend Cache。

上一篇:PHP程序开发中的中文编码问题

下一篇:ThinkPHP3.1新特性之查询条件预处理简介