PHP获取当前路径和目录的示例

 更新时间:2016年11月25日 15:41  点击:2292
在php中为我们提供了大量全局变量了我们可以利用它们来帮我们直接获取文件或目录的路么了,下面我找到一篇比较全面的文章加以整理,希望对大家会有帮助。

PHP获取目录和的方法通过魔术变量;通过超级全局变量;通过相关函数等等:

 代码如下 复制代码


<?php
/**
 * PHP获取路径或目录实现
 * @link http://www.111cn.net
 */
 
//魔术变量,获取当前文件的绝对路径
echo "__FILE__:  ========>  ".__FILE__; 
echo '<br/>';
 
//魔术变量,获取当前脚本的目录
echo "__DIR__:  ========>  ".__DIR__;
echo '<br/>';
 
//dirname返回路径的目录部分,dirname(__FILE__)相当于__DIR__
echo "dirname(__FILE__):  ========>  ".dirname(__FILE__);
echo '<br/>';
 
//$_SERVER['PHP_SELF']和$_SERVER['SCRIPT_NAME']的结果一般相同,他们都是获取当前脚本的文件名
//只有当php以cgi方式运行时有区别,但是现在几乎找不到以cgi方式运行php了
echo '$_SERVER["PHP_SELF"]:  ========>  '.$_SERVER['PHP_SELF'];
echo '<br/>';
 
echo '$_SERVER["SCRIPT_NAME"]:  ========>  '.$_SERVER['SCRIPT_NAME'];
echo '<br/>';
 
//当前执行脚本的绝对路径。记住,在CLI方式运行php是获取不到的
echo '$_SERVER["SCRIPT_FILENAME"]:  ========>  '.$_SERVER['SCRIPT_FILENAME'];
echo '<br/>';
 
//当前运行脚本所在的文档根目录。在服务器配置文件中定义。
echo '$_SERVER["DOCUMENT_ROOT"]:  ========>  '.$_SERVER['DOCUMENT_ROOT'];
echo '<br>';
 
//getcwd()返回当前工作目录
echo "getcwd():  ========>  ".getcwd();
echo '<br>';
 
echo '<br>';
echo "php教程(www.111cn.net)整理";


(注意: $HTTP_SERVER_VARS 和 $_SERVER 是不同的变量,PHP 处理它们的方式不同。)如果设置了 register_globals 指令,这些变量也在所有脚本中可用;也就是,分离了 $_SERVER 和 $HTTP_SERVER_VARS 数组。
 
$_SERVER['HTTP_HOST'] 取得当前请求的Host:头部内容
$_SERVER['PHP_SELF']这可能是我们最为经常用到的了,它返回当前调用 的页的文件名,如果是http://localhost/test/2005/test.php, 那么将会返回/test/2005/test.php
$_SERVER['SCRIPT_NAME']它将返回包含当前脚本的路径。这在页面需要指向自己时非常有用
$_SERVER['SCRIPT_FILENAME']它将返回当前文件所在的绝对路径信息
$_SERVER['REQUEST_URI']返回访问此页面所需的URI,包括"/"

当然还有许多路径函数:
dirname(),返回路径信息中的目录部分,前面是带有"/"的
basename()返回路径中的基本的文件名部分,当然也可以设置后缀来控制输出。
realpath(),返回路径信息的绝对规范化的路径

下面给各位同学整理了一些关于php array数组的相关处理函数and str字符串处理与正则表达式,希望文章对你会有所帮助。

数组的相关处理函数:

1)数组的键值操作函数
 
array_values();//获取数组中的值
array_keys();//获取数组中的键
in_array();//检查一个值是否在数组中
array_key_exists();//检查一个键是否在数组中
array_flip();//键和值对调
array_reverse();//数组中的值反转

2)统计数组的元素和唯一性

count();//统计数组的个数
array_count_values();//统计数组中值出现的次数
array_unique();//删除数组中重复值

3)使用回调函数处理数组的函数
 
array_filter();//数组值过滤
array_map();//将回调函数作用到给定数组的单元上

4)数组的排序函数

 
sort();
//按值把数组值进行排序,升序,不保留key
rsort();
//按值把数组值进行排序,降序,不保留key
 
asort();
//按值把数组值进行排序,升序,保留key
arsort();
//按值把数组值进行排序,降序,保留key
 
ksort();
//按键把数组值进行排序,升序,保留key
krsort();
//按键把数组值进行排序,降序,保留key
 
natsort();
//按自然数排序
natcasesort();
//忽略大小写的自然数排序
 
array_multisort();//用一个数组对另外一个数组进行排序
SORT_DESC倒序
SORT_ASC正序  array_multisort($arr2,SORT_DESC,$arr);

5)拆分、合并、分解与结合函数

 
array_slice();//截取一段值 $arr2=array_slice($arr,0,3); 0开始位置,3个 ,返回值:截取的内容
 
array_splice();//截取一段值,保留一段值  
 
返回值:截取后剩下的内容  //array_splice(3,3,"aa"); 从下标3的位置开始向后截取3个值,aa替换截取的内容
 
array_combine();//合并,一个是key,一个是value eg: $arr3=array_combine($arr1,$arr2); $arr1为key值 ,$arr2为值
 
array_merge();  并集  //合并,键值相同,后面覆盖前面 返回一个新数组 $arr3=array_merge($arr1,$arr2);
 
array_intersect();//交集
 
array_diff();//差集
 
implode();//把数组连接成字符串  eg: $str=implode("|" ,$arr);  | 分割符
  
explode();//把字符串分解成数组   eg: $arr=explode('|',$str);


6)数组与数据结构

 
array_pop();//从最后弹出一个值,返回弹出值 //unset($arr[count($arr)-1]);
array_push(); array_push($arr,6);//从最后添加一个值,返回数组个数
//$arr[]="aa";
array_shift();//从前面弹出一个值,返回移出值,原数组下标重排
//unset($arr[0]); 原数组下标不重排
array_unshift();//从前面插入一个值,返回数组个数

7)其他有用的数组处理函数

 
array_rand();//随机取一个key
 
shuffle();//打乱数组
 
array_sum();//数组所有值的和
 
range();//获取一个范围内数组
//range(1,10); 返回数组 array(1,2,3,...,10);
//range(1,10,2); array(1,3,5,7,9);  2代表差值;默认是0不写

字符串处理与正则表达式
————————————————

1.字符串的处理介绍
2.常用的字符串输出函数
3.常用的字符串格式化函数
4.字符串比较函数
5.正则表达式在字符串中的应用
6.与perl兼容的正则表达式函数

字符串的输出:

 
1)echo "hello world www.111cn.net";
2)print "aaaa";
3)die("输出一条错误消息");
4)printf("--%s----%s--",$a,$b);
%s  字符串
%d  数字
%f  浮点型   //%.2f   小数点后面两位
5)sprintf("$s%s",$a,$b);
不直接输出,而是返回值给一个新的变量

常用的字符串格式化函数:
1.去除空格和字符串填补函数
 
ltrim() //去左边空格
rtrim() //去右边空格;
trim()  //去掉两头空格  $str='abc'; trim($str,'b'); echo $str ; 结果 :ac; 可以删除指定的字符串
str_pad() //向字符串里添加空格或字符串
 
<?php
$input = "Alien";
echo str_pad($input, 10);  // 输出 "Alien "
echo str_pad($input, 10, "-=", STR_PAD_LEFT);  // 输出 "-=-=-Alien"
echo str_pad($input, 10, "_", STR_PAD_BOTH);   // 输出 "__Alien___"
echo str_pad($input, 6 , "___");   // 输出 "Alien_"
?>

2.字符串大小写转换函数

 
strtolower()
strtoupper()
ucfirst()
ucwords()

3.与html标签相关联的字符串函数

 
nl2br()
htmlspecialchars()
strip_tags()
addslashes()
stripslashes()

4.其他字符串格式化函数

 
strrev()
strlen()//返回字符串的长度
number_format()
md5()   //单向不可逆加密
str_shuffle()  //随机输出字符串

字符串比较函数:
1.按字节进行字符串的比较
1
 
strcmp($str1,$str2) //比较字符串的每个字节
 
strcasecmp()//忽略大小写比较字符串的每个字节

2.按自然排序法时字符串的比较

 
strnatcmp();
//按自然排序比较字符串中的数字

字符串的分割与拼接:
1.分割
 
//把字符串分割成数组
explode()
preg_split('//',$str);

2.拼接
//把数组拼接成字符串

 
implode()
join()  //等于implode();

字符串的截取:

 
substr()

字符串的查找:
 
strstr()//查找指定字符在字符串中的第一次出现
 
 
strrchr()//查找指定字符在字符串中的最后一次出现
 
 
strpos()//w在$str中第一次出现的位置
strrpos($str,'w')//w在$str中最后一次出现的位置

字符串的替换:
1
 
str_replace()

支持多字节文字

 
mb_substr($str,0,7,"utf-8");
mb_strpos();
mb_strrpos();
mb_strstr();
mb_strtoupper();
mb_strtolower();

正则表达式在字符串中的应用:
一.正则表达式介绍
正则表达式是用于描述字符排列和匹配模式的一种语法规则,它主要用于字符串的模式分割,匹配,查找及替换操作,在php在正则表

达式一般是由正规字符和一些特殊字符联合构成的一个文本模式的程序性描述,这在儿我们使用perl兼容正则表达式
二.正则表达式语法
1.原子 www.111cn.net
1)单个字符,数字
a-z,A-Z,0-9   a-z其中任意一个字符
2)模式单元
(abc) 匹配abc并且成一个单元
3)原子表
[abc]它中的任意一个字符a或b或c
4)重新使用的模式单元
\1,$1
5)普通转义字符
d,D,w,W,s,S
d 匹配一个数字
D 匹配一个非数字
w 匹配字母,数字,下划线
W 除了字母,数字,下划线
s 匹配空白字符,空格,tab
S 除了空白字符,空格,tab
6)转义元字符
*,. []
2.元字符
*,+,?,|,^,$,b,B,[],[^],{m},{m,n},{m,},(),.
d* 一个或多个或0个数字
d+ 一个或多个数字
d? 一个或0个数字
.  任意一个字符
3.模式修正符
i,m,s,U,e
i  忽略大小写
m  视为多行
s  视为一行
U  贪婪模式,最大模式
e  替换的时候用的,可以用函数加工向后引用\1,$1
三.字符串正则表达式函数
1.字符串的匹配与查找
preg_match()
preg_match_all()
preg_grep()
2.字符串的替换
preg_replace()
//问题:正则e修饰符<>
3.字符串的分割与连接
preg_split()
4.正则表达式的web验证应用
1)电子邮件地址
2)url地址
3)电话号码
 
 
ubb编辑器:
 
[url][/url][b]文字[/b]

下面给大家提供一个json递归解析类了,希望此例子对各位同学会带来帮助哦,其它费话也不说多了直接上代码
 代码如下 复制代码

<?php
/*
 * @ anthor:QD
 * @ time:  2013-09-27
 */
class json{
 
 private $Arr = array(); //传入数组
 
 //构造器
 public function json($array)
 {
  if(!is_array($array)) return false;
  $this->Arr = $array;
 }
 //解析主函数
 public function MainArr()
 {
  $arr = $this->Arr;
  if($this->TypeArr($arr))
  {
   $json = $this->NumArr($arr);
  }
  else
  {
   $json = $this->IndexArr($arr);
  }
  return $json;
 
 }
 //解析索引数组
 public function IndexArr($arr)
 {
  $str ="";
  foreach($arr as $k=>$value)
  {
   if(is_array($value))
   {
    if($this->TypeArr($value)) { $sun=$this->NumArr($value);}
    else               {$sun=$this->IndexArr($value);}
    if(strpos($sun,"}") || strpos($sun,"]"))
    {
     $str .= """.$k."":".$sun.",";
    }
    else
    {
     $str .= """.$k."":"".$sun."",";
    }
   }
   else
   {
     $str .= """.$k."":"".$value."",";
   }
  }
  $str = "{".trim($str,",")."}";
  return $str;
 }
 //解析数字数组
 public function NumArr($arr)
 {
  $str = "";
  foreach($arr as $value)
  {
   if(is_array($value))
   {
    if($this->TypeArr($value)) { $sun=$this->NumArr($value);}
    else               {$sun=$this->IndexArr($value);}
    if(strpos($sun,"}") || strpos($sun,"]"))
    {
     $str .= $sun.",";
    }
    else
    {
     $str .= """.$sun."",";
    }
   }
   else
   {
    $str .= """.$value."",";
   }
  }
  $str = "[".trim($str,",")."]";
  return $str;
 }
 //检验一个数组是不是严格数字索引  
 public function TypeArr($arr)
 {
  if(array_values($arr) === $arr) return true;
  return false;
 }
 
}
?>
在php学习中error_reporting和display_errors是两个非常重要的参数,我们在学习调试过程中是少不了它们的,开启与关闭这两个错误日志非常的简单只要在php.ini简单处理即可,下文会有介绍。

我们知道产品的生产环境肯定是不给予显示错误的,于是:
php.ini中将 display_errors = Off 改为display_errors = On
或者 ini_set('display_errors',0);

其次,我们知道php的错误级别是由error_reporting【error_reporting详细教程】控制的,但是有很多人在生产环境关闭了错误信息提示
error_reporting(0);

其实这种做法,我觉得不科学,在codeigniter框架就是这样

 代码如下 复制代码

if (defined('ENVIRONMENT'))
{
 switch (ENVIRONMENT)
 {
  case 'development':
   error_reporting(E_ALL);
  break;
 
  case 'testing':
  case 'production':
   error_reporting(0);
  break;
 
  default:
   exit('The application environment is not set correctly.');
 }
}

线上的错误信息肯定是要记录的,error_reporting(0)这样会导致所有的错误信息不会记录,应该:error_reporting = E_ALL & ~E_NOTICE,只要display_errors = Off,错误信息就不会再页面上显示,因为display_errors的优先级别更高。

特别要注意的是:
如果php.ini中log_errors= On,据官方的说法,那么必须指定error_log文件,如果没指定或者指定的文件没有权限写入,那么照样会输出到正常的输出渠道,那么也就使得display_errors 这个指定的Off失效,错误信息还是打印了出来。将log_errors = Off就行了。

总结下,在生产环境中不现实错误信息还能记录错误日志:

 

 代码如下 复制代码
<?php
/**
 * 记录生产环境错误日志
 *
 * @link http://www.111cn.net
 */
error_reporting(E_ALL);
ini_set('display_errors',0);
ini_set('log_errors',1);
ini_set('error_log','E:\'.date('Y-m-d').'_phpddt.com.txt');
现在web发展速度非常快.各种响应式的站点越来越多.除了APP外.在平时可能需要根据客户终端访问来加载不同时模板或跳转到不同时的域名下.现在分享一个函数.可以做到这样判断.android、ios和wp都已经测试过.
 代码如下 复制代码

 

//判断moblie
function is_mobile()
{
    $_SERVER['ALL_HTTP'] = isset($_SERVER['ALL_HTTP']) ? $_SERVER['ALL_HTTP'] : '';
 
    $mobile_browser = '0';
 
    if(preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone|iphone|ipad|ipod|android|xoom|ios)/i', strtolower($_SERVER['HTTP_USER_AGENT'])))
        $mobile_browser++;
 
    if((isset($_SERVER['HTTP_ACCEPT'])) and (strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml') !== false))
        $mobile_browser++;
 
    if(isset($_SERVER['HTTP_X_WAP_PROFILE']))
        $mobile_browser++;
 
    if(isset($_SERVER['HTTP_PROFILE']))
        $mobile_browser++;
 
    $mobile_ua = strtolower(substr($_SERVER['HTTP_USER_AGENT'],0,4));
    $mobile_agents = array(
                        'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac',
                        'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno',
                        'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-',
                        'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-',
                        'newt','noki','oper','palm','pana','pant','phil','play','port','prox',
                        'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar',
                        'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-',
                        'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp',
                        'wapr','webc','winw','winw','xda','xda-'
                        );
 
    if(in_array($mobile_ua, $mobile_agents))
        $mobile_browser++;
 
    if(strpos(strtolower($_SERVER['ALL_HTTP']), 'operamini') !== false)
        $mobile_browser++;
       www.111cn.net
    // Pre-final check to reset everything if the user is on Windows
    if(strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'windows') !== false)
        $mobile_browser=0;
 
    // But WP7 is also Windows, with a slightly different characteristic
    if(strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'windows phone') !== false)
        $mobile_browser++;
 
    if($mobile_browser>0)
        return true;
    else
        return false;
}

[!--infotagslink--]

相关文章

  • PHP成员变量获取对比(类成员变量)

    下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
  • php 获取用户IP与IE信息程序

    php 获取用户IP与IE信息程序 function onlineip() { global $_SERVER; if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP');...2016-11-25
  • php获取一个文件夹的mtime的程序

    php获取一个文件夹的mtime的程序了,这个就是时间问题了,对于这个问题我们来看小编整理的几个例子,具体的操作例子如下所示。 php很容易获取到一个文件夹的mtime,可以...2016-11-25
  • 解决Pycharm的项目目录突然消失的问题

    今天小编就为大家分享一篇解决Pycharm的项目目录突然消失的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-22
  • 如何获取网站icon有哪些可行的方法

    获取网站icon,常用最简单的方法就是通过website/favicon.ico来获取,不过由于很多网站都是在页面里面设置favicon,所以此方法很多情况都不可用。 更好的办法是通过google提供的服务来实现:http://www.google.com/s2/favi...2014-06-07
  • jquery如何获取元素的滚动条高度等实现代码

    主要功能:获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 :$(window).width(); 获取页面的文档高度 $(document).height(); 获取页面的文档宽度 :$(document).width();...2015-10-21
  • 如何使用php脚本给html中引用的js和css路径打上版本号

    在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css、js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从浏览器的缓存中获取css、...2015-11-24
  • jquery获取div距离窗口和父级dv的距离示例

    jquery中jquery.offset().top / left用于获取div距离窗口的距离,jquery.position().top / left 用于获取距离父级div的距离(必须是绝对定位的div)。 (1)先介绍jquery.offset().top / left css: 复制代码 代码如下: *{ mar...2013-10-13
  • Jquery 获取指定标签的对象及属性的设置与移除

    1、先讲讲JQuery的概念,JQuery首先是由一个 America 的叫什么 John Resig的人创建的,后来又很多的JS高手也加入了这个团队。其实 JQuery是一个JavaScript的类库,这个类库集合了很多功能方法,利用类库你可以用简单的一些代...2014-05-31
  • linux中PHP dirname(__FILE__)路径问题解决

    在php 中dirname() 函数返回路径中的目录部分,__FILE__而当前运行文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。这是一个魔法变量(预定义常量),在...2016-11-25
  • C#路径,文件,目录及IO常见操作汇总

    这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C#获取字符串后几位数的方法

    这篇文章主要介绍了C#获取字符串后几位数的方法,实例分析了C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • jquery获取tagName再进行判断

    如果是为了取到tagName后再进行判断,那直接用下面的代码会更方便: $(element).is('input') 如果是要取到标签用作到别的地方,可以使用一下代码: $(element)[0].tagName 或: $(element).get(0).tagName...2014-05-31
  • DOM XPATH获取img src值的query

    复制代码 代码如下:$nodes = @$xpath->query("//*[@id='main_pr']/img/@src");$prurl = $nodes->item(0)->nodeValue;...2013-10-04
  • docker 启动elasticsearch镜像,挂载目录后报错的解决

    这篇文章主要介绍了docker 启动 elasticsearch镜像,挂载目录后报错的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-20
  • idea out目录与target目录的区别详解

    这篇文章主要介绍了idea out目录与target目录的区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-08
  • PHP 如何获取二维数组中某个key的集合

    本文为代码分享,也是在工作中看到一些“大牛”的代码,做做分享。 具体是这样的,如下一个二维数组,是从库中读取出来的。 代码清单: 复制代码 代码如下: $user = array( 0 => array( 'id' => 1, 'name' => '张三', 'ema...2014-06-07
  • php获取汉字拼音首字母的方法

    现实中我们经常看到这样的说明,排名不分先后,按姓名首字母进行排序。这是中国人大多数使用的排序方法。那么在php程序中该如何操作呢?下面就分享一下在php程序中获取汉字拼音的首字母的方法,在网上搜到的大多数是有问题的...2015-10-23
  • C#获得程序的根目录以及判断文件是否存在的实例讲解

    今天小编大家分享一篇C#获得程序的根目录以及判断文件是否存在的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-25
  • 使用C#获取系统特殊文件夹路径的解决方法

    本篇文章是对使用C#获取系统特殊文件夹路径的解决方法进行了详细的分析介绍,需要的朋友参考下...2020-06-25