这是最近看的面试题总结的小例子,没事的时候可以看看
<?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/>";