PHP小例子

这是最近看的面试题总结的小例子,没事的时候可以看看

<?php
/**
 * Created by PhpStorm.
 * User: qishou
 * Date: 15-8-1
 * Time: 下午8:39
 */
header("content-type:text/html;charset=utf-8");
//截取中文字符
$str = "中国你好,hello  world !";
function  substr_utf8($str,$start,$length){
    return implode("",array_slice(preg_split("//u",$str,-1,PREG_SPLIT_NO_EMPTY),$start,$length));
}
var_dump(substr_utf8($str,0,10));


//在中文字符串中查找指定的值并获取中文字字符串的长度
$str = "中国2北334京";
echo mb_strlen($str,'utf-8')."<br/>";//返回振文字符串的长度
echo mb_substr($str,3,1,'utf-8')."<br/>";//截取指定中文字符串


//反转中文字符
$str = "中国你好,hello  world !";
function  strrev_utf8($str){
    return implode("",array_reverse(preg_split('//u',$str,-1,PREG_SPLIT_NO_EMPTY)));
}
echo strrev_utf8($str)."<br/>";

//反转普通字符
$str = "www.baidu.com";
echo strrev(str_replace('www.','',$str))."<br/>";
echo strrev(substr($str,4))."<br/>";

//获取当卡脚本执行路径
echo __FILE__."<br/>";//脚本路径
var_dump($_SERVER[SCRIPT_FILENAME]);//脚本路径
var_dump($_SERVER[REQUEST_URI]);//请求参数
var_dump($_SERVER[QUERY_STRING]);//请求参数

//获取文件扩展名
$path = "D:/www/excor/admin/index.php";
function ext1($path){
    return pathinfo($path,PATHINFO_EXTENSION);
}
function ext2($path){
    return substr($path,-3,3);
}
function ext3($path){
    return substr($path,strpos($path,'.')+1);
}
function ext4($path){
    $path = explode(".",$path);
    return $path[count($path)-1];
}
function ext5($path){
    $path = pathinfo($path);
    return $path['extension'];
}
function ext6($path){
//    return strstr($path,'.',true);
    return strchr($path,'.');
}
echo ext1($path)."<br/>";
echo ext2($path)."<br/>";
echo ext3($path)."<br/>";
echo ext4($path)."<br/>";
echo ext5($path)."<br/>";
echo ext6($path)."<br/>";

//取出指定字符
$text = "content-type:text/html";
echo substr($text,strpos($text,':')+1)."<br/>";

//改变变量的命名方式open_door => OpenDoor  可用函数:ucfisrt(),lcfirst(),strtolower(),strupper,ucwords()
$name = "make_by_id";
function change_name($name){
//    //方式1
//    $arr = explode("_",$name);
//    $arr = array_map('ucfirst',$arr);
//    return implode("",$arr);
    //方式2
    $arr = explode('_',$name);//拆分数组
    $arr = implode(' ',$arr);//组合数组
    return str_replace(' ','',ucwords($arr));
}
echo change_name($name)."<br/>";

//计算字符串中某个字符出现的次数
$str = "Hello world !";
echo substr_count($str,'l')."<br/>";

//取出邮箱中的域名qishouzhang@163.com
$str = 'qishouzhang@163.com';
echo substr($str,strpos($str,'@')+1)."<br/>";
echo substr(strstr($str,'@'),1)."<br/>";
echo explode("@",$str)[1]."<br/>";

//is_null判断结果
$x = '';
echo is_null($x)."<br/>";//返回false(以下情况is_null()返回真:被赋值为null;尚未被赋值;被unset())

//PHP单例模式连接数据库
class Mysql{
    private static $instance = null;//静态成员属性
    private function  __construct(){}//私有的构造方法
    public static function  getInstance(){//以自己实例为返回值的静态的公有的方法
        if(self::$instance == null){
            self::$instance = new Mysql();
        }
        return self::$instance;
    }
    private function __clone(){}//禁止clone
}

$obj1 = Mysql::getInstance();
$obj2 = Mysql::getInstance();
if($obj1 === $obj2){
    echo "同一个实例<br/>";
}else{
    echo "不同的实例<br/>";
}

//测试抽象类是否能被实例化
abstract class A{
    public function __construct(){
        echo "对象已创建!<br/>";
    }
}
class B extends A{
    public function __construct(){
        echo "子类对象已创建!<br/>";
    }
}
//$obj1 = new A(); //抽象类不能被实例化
$obj2 = new B();


//PHP遍历指定目录下的文件
$path = 'D:/';
$dir_handel = opendir($path);//打开目录文件,返回该目录的句柄,是一个资源文件
while($file = readdir($dir_handel)){
    $dirFile = $path.DIRECTORY_SEPARATOR.$file;//将目录下的文件和当前目录连接起来
//    echo $file."----".filetype($dirFile)."<br/>";//输出文件信息
}


//获取指定页面的内容
$url = "http://zhangqishou.com";
//方法一
$handle = fopen($url,'rb');
$content = stream_get_contents($handle);
fclose($handle);
echo "<pre>";
//print_r($content);
//方法二
$content = file_get_contents($url);
echo "<pre>";
//print_r($content);

//PHP如何实现页面跳转
//方法一
//header("location:http://baidu.com");//直接跳转
//header("refresh:3;url=http://baidu.com");//三秒后跳转
//方法二
//echo "<meta http-equiv=refresh content='0;url='http://baidu.com'>";

//去除HTML标签
$str = '<div><span>hello world !</span></div>';
echo $str.'<br/>';
echo strip_tags($str).'<br/>';
echo htmlspecialchars($str).'<br/>';

//判断一个日期字符串是不是合法的
$date_str = "2015-08-02 20:45:30";
function check_data($date_str){
    if(date("Y-m-d H:i:s",strtotime($date_str)) == $date_str){
        return true;
    }else{
        return false;
    }
}
var_dump(check_data($date_str));

//获取上一个月的最后一天
function get_lastmonth_lastday($date=''){
    if($date != ''){
        $time = strtotime($date);
    }else{
        $time = time();
    }
    $day = date('j',$time);//j获取该日期是当前月的第几天,然后再减去该值就是上个月的最后一天
    return date('Y-m-d',strtotime("-{$day} days",$time));
}
echo get_lastmonth_lastday("2015-3-27")."<br/>";

//常用的两种加密函数
$str = "Hello world !";
echo "md5加密:".md5($str)."<br/>";
echo "sha1加密:".sha1($str)."<br/>";

//把一个GBK编码的字符串转换成utf8;
$str = "Hello world !世界你好!";
iconv('GBK','utf-8',$str);

//如果需要元样输出用户输出的内容需要用到的函数
$str = '<div><span>hello world !</span></div>';
echo htmlspecialchars($str).'<br/>';
echo htmlentities($str).'<br/>';

//创建多级目录的PHP函数
function create_dir($path,$mode=0777){
    if(is_dir($path)){
        echo "文件已经存在!";
        return;
    }
    if(mkdir($path,$mode,true)){
        echo '文件创建成功!';
    }else{
        echo '文件创建失败!';
    }
}
$path = 'a/b/c/d';//相对路径从当前目录下创建指定目录
create_dir($path);

//确保多进程同时写一个文件成功
$handle = fopen('myfile.txt','rd');
if(flock($handle,LOCK_EX)){//加上排他锁,其他进程必须等该锁释放后该文件后才能访问加锁的文件
    fwrite($handle,"写入数据成功!");//写入文件
    flock($handle,LOCK_UN);//解锁
}else{
    echo "该文件已锁定!";
}

//从一个URL中获取文件的扩展名
$url = 'http://baidu.com/abc/de/fg.php?id=1';
function get_extension($url){
    $path = parse_url($url);
    $ext = pathinfo($path['path'],PATHINFO_EXTENSION);
    return $ext;
}
echo "<br/>".get_extension($url)."<br/>";

//遍历指定目录下的所有文件和子文件夹
$path = "D:/wamp/www/Interview";
function get_all_file($path){
    $files = array();
    if(is_dir($path)){//判断文件是否存在
        if($handle = opendir($path)){//获取打开的目录句柄
            while($file = readdir($handle)){//循环读出文件和目录
                if($file!='.' && $file !='..'){//过滤掉.和..
                    if(is_dir($path.'/'.$file)){//如果是目录
                        $files[$file] = get_all_file($path.'/'.$file);//递归进行遍历
                    }else{
                        $files[] = $path.'/'.$file;//如果是文件则存入数组
                    }
                }
            }
            closedir($handle);//关闭目录句柄
            return $files;//返回文件数组
        }
    }
}
//echo '<pre>';
//print_r(get_all_file($path));

//计算出两个文件的相对路径即path2相对于$path1的相对路径
function get_relative_path($path1,$path2){
    $arr1 = explode('/',dirname($path1));
    $arr2 = explode('/',dirname($path2));
    $length = count($arr2);
    for($i=0;$i<$length;$i++){
        if($arr1[$i] != $arr2[$i]){//进行路径匹配
            break;
        }
    }
    if($i == 0){                    //不在同一个根目录下
        $separator = array();
    }
    if($i!=0 && $i<$length){        //在同一个个目录下
        $separator = array_fill(0,($length-$i),'..');
    }
    if($i==$length){                //在同一个目录下
        $separator = array('.');
    }
    $relative_path = implode('/',array_merge($separator,array_slice($arr1,$i)));
    return $relative_path;
}
$path1 = "a/b/c/d/e/hello.sh"; //参照路径path1
$path2 = "s/b/c/d/index.html";
$path3 = "a/b/c/foo.txt";
$path4 = "a/b/c/d/e/test.php";
echo get_relative_path($path1,$path2)."<br/>";
echo get_relative_path($path1,$path3)."<br/>";
echo get_relative_path($path1,$path4)."<br/>";


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值