码迷,mamicode.com
首页 > 数据库 > 详细

跟随我在oracle学习php(32)

时间:2019-05-26 09:20:28      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:cal   实现   程序代码   磁盘   检查   错误提示   去掉   递归   数组   

错误的触发

正常触发:

程序运行时确实发生了运行时错误——也可能是语法检查错误。

3种常见的运行时错误:

 

人工触发

就是由程序员通过程序代码而“产生”一个错误。

语法:

trigger_error(“错误提示”  用户错误代号);

 

应用中,通常是需要检测(判断)数据的有效性,以决定是否触发相应错误,比如:

 

 

错误的显示控制

网页中显示(提示)错误信息,是可以进行控制的,有2种途径:

1,在php.ini文件中设定,对所有php程序都有效;

2,在当前脚本文件中,只对当前脚步文件有效。

 

错误的显示有2个方面可以进行控制;

1,设定是否显示:display_error:

php.ini中;display_error = On; //表示显示, Off表示不显示;

(显示)

(不显示)

脚本中:  ini_set(“display_error”,  1);  //1表示显示, 0表示不显示,也可以用truefalse

脚本中的设定优先级高。

 

2,设定显示哪些级别的错误——依赖与第一项设定为显示的情况。

php.ini文件中:

error_reporting = E_NOTICE; //只显示E_NOTICE错误

error_reporting = E_NOTICE | E_WARNING; //显示E_NOTICEE_WARNING错误

error_reporting = E_NOTICE | E_WARNING | E_USER_ERROR;

//显示E_NOTICEE_WARNINGE_USER_ERROR错误

解释上一行::

E_NOTICE 00000000 00001000

E_WARNING: 00000000 00000010

E_USER_ERROR 00000001 00000000

或运算(|)

00000001 00001010

 

实际上,在开发阶段,常用的是:

error_reporting = E_ALL | E_STRICT;

它是这样的结果:

E_ALL 01110111 11111111

E_STRICT: 00001000 00000000

或运算(|)

01111111 11111111

可见,E_ALL并非真的表示“所有”,而是只有E_ALL | E_STRICT才真的表示所有。

继续:如果在显示“所有”错误的基础上,只想“关闭”个别少数错误呢?

跟状态数据的设定(关闭)道理一样,只要这么做:

error_reporting = E_ALL | E_STRICT & ~E_NOTICE //只关闭了E_NOTICE错误提示

error_reporting = E_ALL | E_STRICT & ~E_NOTICE & ~E_WARNING//关闭了2

在代码中设定:

ini_set(“error_reporting”,  E_NOTICE); //只显示E_NOTICE错误

ini_set(“error_reporting”,  E_NOTICE | E_WARNING); ////显示E_NOTICEE_WARNING错误

ini_set(“error_reporting”,  E_ALL | E_STRICT & ~E_NOTICE); //只关闭E_NOTICE错误

 

ini_set()含义可以设定几乎所有php.ini中的设定项,形式如下:

ini_set(“设定项名称” ,值); //这种设定都只对当前脚本有效,而且无需重启apache,很方便。

另一个对应函数是:ini_get(“设定项名称”);//用于获取某项的值。

记录错误日志

在开发阶段,我们通常都是显示所有错误——意图解决错误

在产品阶段,我们通常都是隐藏所有错误——并同时将错误信息记录到文件中——错误日志文件。

我们可以自己查看错误日志以解决开发阶段没有发现的错误问题。

记录错误日志同样有2种途径:

1,在Php.ini文件中设定:

log_errors = On //用于设定是否记录错误日志,On记录,Off不记录

 

error_log = “错误日志文件名”; //设定错误日志的文件名

 

此时,该文件没有给定路径,则系统会在每个文件夹下建立该文件并记录进去。

 


文件上传

文件操作

、解析路径:

1 获得文件名:
basename();
给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名。如果文件名是以 suffix 结束的,那这一部分也会被去掉。
eg:

$path = "/home/httpd/html/index.php";
$file = basename($path,".php"); // $file is set to "index"

 

2 得到目录部分:
dirname();
给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名。
eg:

$path = "/etc/passwd";
$file = dirname($path); // $file is set to "/etc"

 

3 得到路径关联数组
pathinfo();
得到一个指定路径中的三个部分:目录名,基本名,扩展名。
eg:

$pathinfo = pathinfo("www/test/index.html");
var_dump($pathinfo);
// $path[‘dirname‘]
$path[‘basename‘]
$path[‘extenssion‘]

 
二、文件类型
1. filetype();
返回文件的类型。可能的值有 fifochardirblocklinkfile unknown
eg:

echo filetype(‘/etc/passwd‘); // file
echo filetype(‘/etc/‘);        // dir

 
三、得到给定文件有用信息数组(很有用)

1. fstat();
通过已打开的文件指针取得文件信息
获取由文件指针 handle 所打开文件的统计信息。本函数和 stat() 函数相似,除了它是作用于已打开的文件指针而不是文件名。
eg:

 

// 打开文件
$fp = fopen("/etc/passwd", "r");
// 取得统计信息
$fstat = fstat($fp);
// 关闭文件
fclose($fp);
// 只显示关联数组部分
print_r(array_slice($fstat, 13));

2. stat()
获取由 filename 指定的文件的统计信息(类比fstat())

四、计算大小
1. filesize()
返回文件大小的字节数,如果出错返回 FALSE 并生成一条 E_WARNING 级的错误。
eg:

// 输出类似:somefile.txt: 1024 bytes
$filename = ‘somefile.txt‘;
echo $filename . ‘: ‘ . filesize($filename) . ‘ bytes‘;

 
2. disk_free_space()
获得目录所在磁盘分区的可用空间(字节单位)
eg

// $df 包含根目录下可用的字节数
$df = disk_free_space("/");
// Windows :
disk_free_space("C:");
disk_free_space("D:");

 
3. disk_total_space()
返回一个目录的磁盘总大小
eg:(同上,换掉函数)

另:如需要计算一个目录大小,可以编写一个递归函数来实现

function dir_size($dir){
$dir_size = 0;
if($dh = @opendir($dir)){
while(($filename = readdir($dh)) != false){
if($filename !=‘.‘ and $filename !=‘..‘){

     if(is_file($dir.‘/‘.$filename)){
$dir_size +=filesize($dir.‘/‘.$filename);

}else if(is_dir($dir.‘/‘.$filename)){

      $dir_size +=dir_size($dir.‘/‘.$filename);
}
}

                   }#end while

            }# end opendir

@closedir($dh);
return $dir_size;
} #end function

跟随我在oracle学习php(32)

标签:cal   实现   程序代码   磁盘   检查   错误提示   去掉   递归   数组   

原文地址:https://www.cnblogs.com/RighTgraM/p/10925006.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!