PHP 魔术常量
PHP 向它运行的任何脚本提供了大量的预定义常量。
不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。
有八个魔术常量它们的值随着它们在代码中的位置改变而改变。
例如 __LINE__ 的值就依赖于它在脚本中所处的行来决定。这些特殊的常量不区分大小写,如下:
http://www.runoob.com/php/php-magic-constant.html
__DIR__ 和__FILE__
echo __FILE__.'<br>'; //D:xampphtdocslayhmapphomecontrollerEntry.php echo __DIR__.'<br>'; //D:xampphtdocslayhmapphomecontroller $dir = dirname(__FILE__).'<br>'; //D:xampphtdocslayhmapphomecontroller echo $dir;
file_put_contents
写日志
方法一(适合临时用):
//数组/字符串都可以 file_put_contents( 'log.log', date('Y-m-d H:i:s',time()) .' ' . var_export($_REQUEST,true) . " ", FILE_APPEND);
方法二:
例: /www.wdmcake.com/data/log/日期/$file文件名
/** *$str array/str 要写入的内容 *$dir str 日期文件夹里面的新建的文件夹名字 例如 /www.wdmcake.com/data/log/201806/sms_apiaas *$file string 文件的名字 例:send_log_20180628.log */ function wdmlog($str,$dir='log',$file='log') { if (!file_exists(ROOT_PATH . 'data/log/' . date('Ym'). '/' . $dir)) { make_dir(ROOT_PATH . 'data/log/' . date('Ym'). '/' . $dir); } $str = is_array($str) ? var_export($str,true):$str; file_put_contents(ROOT_PATH . 'data/log/' . date('Ym'). '/' . $dir.'/' . $file .'_' . date('Ymd') . '.log', local_date('Y-m-d H:i:s') .' ' . $str . " ", FILE_APPEND); }
方法三:
function create_log($data,$merchant,$agency,$file='') { if(empty($merchant)) die("商户code不可为空"); if(empty($agency)) die("平台code不可为空"); $file_path = ROOT_PATH . 'logdata/'.$merchant.'/'.$agency; if(!is_dir($file_path)){ mkdir($file_path, 0777, true); } file_put_contents($file_path.'/'.$agency.'_' . $file . date('Ymd',time()) . '.log', date('Y-m-d H:i:s',time()) .' ' . var_export($data,true) . " ", FILE_APPEND); }
var_export()和var_dump()
var_export() 函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 PHP 代码。var_export必须返回合法的php代码, 也就是说,var_export返回的代码,可以直接当作php代码赋值个一个变量。 而这个变量就会取得和被var_export一样的类型的值。看下面一个简单的例子:
<?php $arr = array ( 1 , 2 , array ( "apple" , "banana" , "orange" )); var_export ( $arr ); ?>
程序输出:
array ( 0 => 1, 1 => 2, 2 => array ( 0 => 'apple', 1 => 'banana', 2 => 'orange', ), )
注意,上面的输出是合法的PHP代码。假如用var_dump(),则输出为:
array(3) { [0]=> int(1) [1]=> int(2) [2]=> array(3) { [0]=> string(5) "apple" [1]=> string(6) "banana" [2]=> string(6) "orange" } }
可以通过将函数的第二个参数设置为 TRUE,从而返回变量的表示。
<?php $v = 'nowamagic'; $rs = var_export ( $v, TRUE ); echo $rs; ?>
程序运行结果:
'nowamagic'
注意两点:
- var_export()会一直保留着结构化形式存储数据.
- 但是特别请记住:此时的变量值的类型已是字符串了($var),不能再以数组的方式取出里面的值来。
在PHPCMS的源码里,可以看到很多配置的参数都用数组记录的,包括它们的频道、内容等等。
function cache_write($file, $string, $type = 'array') { if(is_array($string)) { $type = strtolower($type); if($type == 'array') { $string = "<?php return ".var_export($string,TRUE)."; ?>"; } elseif($type == 'constant') { $data=''; foreach($string as $key => $value) $data .= "define('".strtoupper($key)."','". addslashes($value)."'); "; $string = "<?php ".$data." ?>"; } } $strlen = file_put_contents(PHPCMS_CACHEDIR.$file, $string); chmod(PHPCMS_CACHEDIR.$file, 0777); return $strlen; }
例子:
1 $str="name=Peter&age=43"; 2 parse_str($str,$arr); //k=v形式的字符串转成数组 3 var_dump($arr); 4 5 $str = "tn=monline_dg&ie=utf-8&bs=httpbuildurl&f=3&rsv_bp=1&wd=php+buildquery&rsv_sug3=17&rsv_sug4=330&rsv_sug1=16&oq=php+build&rsv_sug2=0&rsp=0&inputT=8922"; 6 parse_str($str,$arr); //k=v形式的字符串转成数组 7 var_dump($arr); 8 9 $url=var_export($arr,true); //k=v形式的字符串转成数组 10 $url2 = http_build_query($arr); //关联数组转成k=v形式的字符串 11 echo($url); 12 echo '<br>'; 13 echo($url2); 14 die;
打印结果:
1 array(2) { 2 ["name"]=> 3 string(5) "Peter" 4 ["age"]=> 5 string(2) "43" 6 } 7 array(13) { 8 ["tn"]=> 9 string(10) "monline_dg" 10 ["ie"]=> 11 string(5) "utf-8" 12 ["bs"]=> 13 string(12) "httpbuildurl" 14 ["f"]=> 15 string(1) "3" 16 ["rsv_bp"]=> 17 string(1) "1" 18 ["wd"]=> 19 string(14) "php buildquery" 20 ["rsv_sug3"]=> 21 string(2) "17" 22 ["rsv_sug4"]=> 23 string(3) "330" 24 ["rsv_sug1"]=> 25 string(2) "16" 26 ["oq"]=> 27 string(9) "php build" 28 ["rsv_sug2"]=> 29 string(1) "0" 30 ["rsp"]=> 31 string(1) "0" 32 ["inputT"]=> 33 string(4) "8922" 34 } 35 array ( 36 'tn' => 'monline_dg', 37 'ie' => 'utf-8', 38 'bs' => 'httpbuildurl', 39 'f' => '3', 40 'rsv_bp' => '1', 41 'wd' => 'php buildquery', 42 'rsv_sug3' => '17', 43 'rsv_sug4' => '330', 44 'rsv_sug1' => '16', 45 'oq' => 'php build', 46 'rsv_sug2' => '0', 47 'rsp' => '0', 48 'inputT' => '8922', 49 )<br>tn=monline_dg&ie=utf-8&bs=httpbuildurl&f=3&rsv_bp=1&wd=php+buildquery&rsv_sug3=17&rsv_sug4=330&rsv_sug1=16&oq=php+build&rsv_sug2=0&rsp=0&inputT=8922
compact()函数
http://www.runoob.com/php/func-array-compact.html
实例一:
创建一个包含变量名和它们的值的数组:
1 <?php 2 $firstname = "Peter"; 3 $lastname = "Griffin"; 4 $age = "41"; 5 6 $result = compact("firstname", "lastname", "age"); 7 8 print_r($result); 9 ?>
打印效果:
Array ( [firstname] => Peter [lastname] => Griffin [age] => 41 )
实例二:
1 <?php 2 $user = [ 3 'username' => 'lisi1', 4 'age' => 26, 5 ]; 6 7$article = [ 8 'title' => 'this is test', 9 ]; 10 11 print_r(compact('user', 'article')); 12 die; 13 ?>
效果:
Array ( [user] => Array ( [username] => lisi1 [age] => 26 ) [article] => Array ( [title] => this is test ) )
isset() 函数
isset() — 检测变量是否设置。
如果 var 存在并且值不是 NULL 则返回 TRUE,否则返回 FALSE。
$a = "test"; $b = "anothertest"; var_dump(isset($a)); // TRUE var_dump(isset($a, $b)); // TRUE
检测变量是否设置,并且不是 NULL。
如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。
unset ($a); var_dump(isset($a)); // FALSE var_dump(isset($a, $b)); // FALSE
若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。
同时要注意的是一个 NULL 字节(" ")并不等同于 PHP 的 NULL 常数。
$foo = NULL; var_dump(isset($foo)); // FALSE
empty() 方法
当var存在,并且是一个非空非零的值时返回 FALSE 否则返回 TRUE.
以下的东西被认为是空的:
"" (空字符串) 0 (作为整数的0) 0.0 (作为浮点数的0) "0" (作为字符串的0) NULL FALSE array() (一个空数组) $var; (一个声明了,但是没有值的变量)
pathinfo() 函数
定义和用法
pathinfo() 函数以数组的形式返回关于文件路径的信息。
返回的数组元素如下:
- [dirname]
- [basename]
- [extension]
http://www.runoob.com/php/func-filesystem-pathinfo.html
thinkphp5中:
$basename = Request::instance()->root(); if (pathinfo($basename, PATHINFO_EXTENSION) == 'php') { $basename = dirname($basename); }
弹出地址栏里的最后/后的参数
array_pop(explode("/",$path));
dirname()
http://www.w3school.com.cn/php/func_filesystem_dirname.asp
定义和用法
dirname() 函数返回路径中的目录部分。
例子:
<?php echo dirname("c:/testweb/home.php"); echo dirname("/testweb/home.php"); ?>
输出
c:/testweb
/testweb
basename() 函数
http://www.runoob.com/php/func-filesystem-basename.html
basename() 函数返回路径中的文件名部分。
实例
1 <?php 2 $path = "/testweb/home.php"; 3 4 //Show filename with file extension 5 echo basename($path) ."<br/>"; 6 7 //Show filename without file extension 8 echo basename($path,".php"); 9 ?>
上面的代码将输出:
home.php
home
filesize() 函数
定义和用法
filesize() 函数返回指定文件的大小。
如果成功,该函数返回文件大小的字节数。如果失败,则返回 FALSE。
语法
http://www.runoob.com/php/func-filesystem-filesize.html
file_exists()
定义和用法
file_exists() 函数检查文件或目录是否存在。
如果指定的文件或目录存在则返回 TRUE,否则返回 FALSE。
http://www.runoob.com/php/func-filesystem-file-exists.html
php函数filetime获取文件最后修改时间
filetime函数
定义和用法
filemtime() 函数返回文件内容上次的修改时间。
若成功,则时间以 Unix 时间戳的方式返回。若失败,则返回 false。
语法
filemtime(filename)
参数 描述
filename 必需。规定要检查的文件。
说明
本函数返回文件中的数据块上次被写入的时间,即文件的内容上次被修改的时间。
例如:
1 <?php 2 echo filemtime("test.txt"); 3 echo "Last modified: ".date("F d Y H:i:s.",filemtime("test.txt")); 4 5 //filemtime() 函数返回文件内容上次的UNIX修改时间。 6 //返回 7 //1139919766 8 //Last modified: February 14 2006 13:22:46. 9 ?>
PHP_EOL
换行符
unix系列用
windows系列用
mac用
PHP中可以用PHP_EOL来替代,以提高代码的源代码级可移植性
1 <?php 2 echo PHP_EOL; 3 //windows平台相当于 echo " "; 4 //unixlinux平台相当于 echo " "; 5 //mac平台相当于 echo " ";
get_defined_constants()返回所有常量数组
类似常用的还有
DIRECTORY_SEPARATOR
可以用函数get_defined_constants()来获取所有PHP常量
1 <?php 2 print_r(get_defined_constants());//get_defined_constants()返回所有常量数组
大小写转换:
http://www.runoob.com/php/func-string-ucwords.html
- ucfirst() - 把字符串中的首字符转换为大写
- lcfirst() - 把字符串中的首字符转换为小写
- strtoupper() - 把字符串转换为大写
- strtolower() - 把字符串转换为小写
class_exists — 检查类是否已定义
bool class_exists ( string $class_name [, bool $autoload = true ] )
检查指定的类是否已定义。
function __autoload($class){ include($class.'.php'); if(!class_exists($class)){ trigger_error("Unable to load class: $class",E_USER_WARNING); } }
PHP is_file() 函数
定义和用法
is_file() 函数检查指定的文件是否是常规的文件。
如果文件是常规的文件,该函数返回 TRUE。
<?php $file = "test.txt"; if(is_file($file)) { echo ("$file is a regular file"); } else { echo ("$file is not a regular file"); } ?>
上面的代码将输出: