PHP 常量 dirname(__file__)获取路径方法

 更新时间:2016年11月25日 15:08  点击:1613

__FILE__ :被称为PHP魔术常量 ,返回当前执行PHP脚本的完整路径和文件名,包含一个绝对路径

1)dirname(__FILE__) 函数返回的是脚本所在在的路径。     更新网络
比如文件 b.php教程 包含如下内容:    
         <?php   
   $basedir = dirname(__FILE__);    
   echo $basedir
                                            //将在页面打印出一个这个文件所在绝对路径!
   ?>    
   我做的测试得到结果: E:websiteothertestcms
   这个相当于, asp教程中的server.mappth的用法

如果b.php被其他目录里的a.php文件require 或者 include 去引用的话。 变量$basedir 的内容还是b.php所在的那个文件夹的路径。    而不是变成a.php文件所在的目录。

2)dirname(__FILE__) 一般会返回文件所的当前目录到系统根目录的一个目录结构。 

不会返回当前的文件名称。    dirname(__FILE__) 也可能返回一个 . (当前目录)    [原因是 b.php 文件在 http.conf 或者 PHP 配置开发环境的默认WEB目录下


几个 PHP 的“魔术常量”
名称 说明
__LINE__ 文件中的当前行号。
__FILE__ 文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。
__FUNCTION__ 函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
__CLASS__ 类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
__METHOD__ 类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)

header() 函数向客户端发送原始的 HTTP 报头。

认识到一点很重要,即必须在任何实际的输出被发送之前调用 header() 函数(在 PHP 4 以及更高的版本中,您可以使用输出缓存来解决此问题):

<html>
<?php教程
// 结果出错
// 在调用 header() 之前已存在输出
header('Location: http://www.example.com/');
?>语法
header(string,replace,http_response_code)参数 描述
string 必需。规定要发送的报头字符串。
replace 可选。指示该报头是否替换之前的报头,或添加第二个报头。

默认是 true(替换)。false(允许相同类型的多个报头)。
 
http_response_code 可选。把 HTTP 响应代码强制为指定的值。(PHP 4 以及更高版本可用)
提示和注释
注释:从 PHP 4.4 之后,该函数防止一次发送多个报头。这是对头部注入攻击的保护措施。
例子
例子 1
<?php
// Date in the past
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache");
header("Pragma: no-cache");
?>

<html>
<body>

...
...注释:用户可能会设置一些选项来更改浏览器的默认缓存设置。通过发送上面的报头,您可以覆盖任何这些设置,强制浏览器不进行缓存!

例子 2
提示用户保存一个生成的 PDF 文件(Content-Disposition 报头用于提供一个推荐的文件名,并强制浏览器显示保存对话框):

<?php
header("Content-type:application/pdf");

// 文件将被称为 downloaded.pdf
header("Content-Disposition:attachment;filename='downloaded.pdf'");

// PDF 源在 original.pdf 中
readfile("original.pdf");
?>

<html>
<body>

...
...


<?php
// 结果出错
// 在调用 header() 之前已存在输出
header('location: http://www.111cn.net/');
?>语法
header(string,replace,http_response_code)

该函数防止一次发送多个报头

<?php
// date in the past
header("expires: mon, 26 jul 1997 05:00:00 gmt");
header("cache-control: no-cache");
header("pragma: no-cache");
?>

提示用户保存一个生成的 pdf 文件(content-disposition 报头用于提供一个推荐的文件名,并强制浏览器显示保存对话框):

当时间超过指定时间就表示网页内容已经失效。 其格式如下

expires = “expires:” http-date

例 如: header(“expires: fri, 31 oct 2003 18:00:00 gmt”); 表示2003年10月31日星期五 18时。

header(“expires: wed, 30 jun 2004 09:00:00 gmt”); 表示2004年6月30日星期三 9时。

last-modified = “last-modified” “:” http-date

例如 header(“last-modified: wed, 01 jan 2003 12:00:00 gmt”); 上次修改时间2003年1月1日12时

cache control

no-cache 使得服务器的数据可以传送到远程的使用者, 而不会被暂存 (cache) 起来。

no-store 是预防不良的版本或者是敏感的信息被保留下来。

must-revalidate 是指必须要再评估信息, 如果暂存 (cached) 的数据是无效的则让服务器与使用者端联机


更多详细内容请查看:http://www.111cn.net/phper/php-function/36348.htm

看一此关于其它类型

php教程 spl_autoload_register与__autoload方法详解

在谈到框架自动加载类的方面,我大概翻了一下,现在主流的框架系统都使用spl_autoload_register函数,而非__autoload函数。

function my_own_loader($classname)
{
    $class_file = strtolower($classname).".php";
    if (file_exists($class_file)){
        require_once($class_file);
    }
}

spl_autoload_register("my_own_loader");

$a = new A();
__autoload 方法在 spl_autoload_register 后会失效,因为 autoload_func 函数指针已指向 spl_autoload 方法
* 可以通过下面的方法来把 _autoload 方法加入 autoload_functions list

spl_autoload_register( '__autoload' );

此外我们还可以使用我们自定义的加载方法:

第一种函数式:

function my_own_loader($classname)
{
    $class_file = strtolower($classname).".php";
    if (file_exists($class_file)){
        require_once($class_file);
    }
}

spl_autoload_register("my_own_loader");

$a = new A();

第二种类式:class Loader
{
    public static function my_own_loader($classname)
    {
        $class_file = strtolower($classname).".php";
        if (file_exists($class_file)){
            require_once($class_file);
        }
    }
}

// 通过数组的形式传递类和方法的名称
spl_autoload_register(array("my_own_loader","Loader"));

$a = new A();
spl_autoload_register()函数应该是主流框架使用最多的也是非常核心的函数之一,可实现自动注册函数和类,实现类似__autoload() 函数功能,简化了类的调用与加载,提高了工作的效率。

支持版本:PHP 5 >= 5.1.2

至于效率问题。php手册上有如此之话:

bool spl_autoload_register ([ callback $autoload_function ] )

将函数注册到SPL __autoload函数栈中。如果该栈中的函数尚未激活,则激活它们。貌似他么指向同一个堆栈,效率上都是大哥二哥的问题

php教程 echo print print_r三者区别分析

echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用) 
print()    只能打印出简单类型变量的值(如int,string) 
print_r() 可以打印出复杂类型变量的值(如数组,对象) 
echo     输出一个或者多个字符串

echo -- 输出一个或者多个字符串

定义和用法
echo() 函数输出一个或多个字符串。

语法
echo(strings)参数 描述
strings 必需。一个或多个要发送到输出的字符串。
提示和注释
注释:echo() 实际上不是一个函数,因此您无需对其使用括号。不过,如果您希望向 echo() 传递一个或多个参数,那么使用括号会发生解析错误。

提示:echo() 函数比 print() 函数快一点点。

提示:echo() 函数可以使用简化语法。参见例子 5。
例子
例子 1
<?php
$str = "Who's John Adams?";
echo $str;
echo "<br />";
echo $str."<br />I don't know!";
?>输出:

Who's John Adam?
Who's John Adam?
I don't know!
Descrīption
void echo ( string arg1 [, string ...] ) //返回值为空
echo "你好"," 朋友";

 

print --输出一个字符串

print() 函数输出一个或多个字符串。

语法
print(strings)参数 描述
strings 必需。发送到输出的一个或多个字符串。
提示和注释
注释:print() 函数实际上不是函数,所以您不必对它使用括号。

注释:print() 函数稍慢于 echo()。

Descrīption
int print ( string arg )//返回值为整形
print "你好朋友";

可以进行下面操作
$name=print "nihao n";
$str = 'test print value is $name .';
eval("$print="$str";");
echo $print;

print_r -- 打印关于变量的易于理解的信息。
bool print_r ( mixed expression [, bool return] ) //返回值是布尔型的,参数是mix类型的,可以是字符串,整形,数组,对象类print_r() 显示关于一个变量的易于理解的信息。如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。
print_r() 将把数组的指针移到最后边。
你可以
print_r(str);
print_r(int);
print_r(array);
print_r(obj);
也可以用var_dump var_export

php 中 print_r 函数输出的数组内容不排列。为了让它输出的好看些。如,数组有多层。分段列出,我们可以这样写:

echo "<pre>";
print_r xxxxx;
echo "<pre>";

php教程  mysql教程_fetch_array与mysql_fetch_assoc区别


一直以来对这两个函数的区别很模糊,只知道mysql_fetch_assooc()可以去除结果集中的重复值,在实际应用中一般都用mysql_fetch_assoc()。今天想到了这两个函数索性就查了下他们的区别,进一步对其加深下了解。mysql_fetch_assoc() 函数从结果集中取得一行作为关联数组。返回根据从结果集取得的行生成的关联数组,如果没有更多行,则返回 false。mysql_fetch_array() 是 mysql_fetch_row()  的扩展版本。除了将数据以数字索引方式储存在数组中之外,还可以将数据作为关联索引储存,
用字段名作 为键名。 如果结果中的两个或以上的列具有相同字段名,最后一列将优先。要访问同名的其它列,必须用该列 的数字索引
或给该列起个别名。对有别名的列,不能再用原来的列名访问其内容(本例中的 'field')。 mysql_fetch_array --  从结果集中取得一行作为关联数组,或数字数组,或二者兼有。注释:mysql_fetch_assoc() 和用  mysql_fetch_array() 加上第二个可选参数 MYSQL_ASSOC 完全相同。它仅仅返回关联数组。这也是  mysql_fetch_array() 初始的工作方式。即:mysql_fetch_array($result,'MYSQL_ASSOC')与mysql_fetch_assoc($result)返回结果相同,提示:如果在关联索引之外还需要数字索引,用 mysql_fetch_array()。
注释:本函数返回的字段名是区分大小写的。


mysql_fetch_assoc 得到的是关联数组。
mysql_fetch_array 可以得到关联数组也可以得到索引数组,也可以二者都有。

下面以一个例子进行说明它们的区别:
假如从数据库教程取出一个用户的用户名和密码
username   password
test       123456
用assoc  结果是array([username]=>'test',[password]=>'123456')
用array  根据参数不同结果可能是以下三种之一
         array([username]=>'test',[password]=>'123456')
         array([0]=>'test',[1]=>'123456')
         array([username]=>'test',[password]=>'123456',[0]=>'test',[1]=>'123456')

 

提示和注释
注释:mysql_fetch_assoc() 和用 mysql_fetch_array() 加上第二个可选参数 MYSQL_ASSOC 完全相同。它仅仅返回关联数组。这也是 mysql_fetch_array() 初始的工作方式。

提示:如果在关联索引之外还需要数字索引,用 mysql_fetch_array()。

注释:本函数返回的字段名是区分大小写的

[!--infotagslink--]

相关文章

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

    下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...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抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • php获取一个文件夹的mtime的程序

    php获取一个文件夹的mtime的程序了,这个就是时间问题了,对于这个问题我们来看小编整理的几个例子,具体的操作例子如下所示。 php很容易获取到一个文件夹的mtime,可以...2016-11-25
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • ps把文字背景变透明的操作方法

    ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
  • 如何获取网站icon有哪些可行的方法

    获取网站icon,常用最简单的方法就是通过website/favicon.ico来获取,不过由于很多网站都是在页面里面设置favicon,所以此方法很多情况都不可用。 更好的办法是通过google提供的服务来实现:http://www.google.com/s2/favi...2014-06-07
  • Mysql select语句设置默认值的方法

    1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
  • intellij idea快速查看当前类中的所有方法(推荐)

    这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02
  • js导出table数据到excel即导出为EXCEL文档的方法

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13
  • mysql 批量更新与批量更新多条记录的不同值实现方法

    批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
  • ps怎么制作倒影 ps设计倒影的方法

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • js基础知识(公有方法、私有方法、特权方法)

    本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
  • jquery如何获取元素的滚动条高度等实现代码

    主要功能:获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 :$(window).width(); 获取页面的文档高度 $(document).height(); 获取页面的文档宽度 :$(document).width();...2015-10-21
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • c#中分割字符串的几种方法

    单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
  • js控制页面控件隐藏显示的两种方法介绍

    javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13