常见试题

1、获取上一个月的第一天和最后一天

1、获取上一个月的第一天和最后一天

上个月第一天:
echo date('Y-m-d', strtotime(date('Y-m-01') . ' -1 month'));   // 计算出本月第一天再减一个月
上个月最后一天:
echo date('Y-m-d', strtotime(date('Y-m-01') . ' -1 day'));     // 计算出本月第一天再减一天

2.获取当月第一天及最后一天.
$BeginDate=date('Y-m-01', strtotime(date("Y-m-d")));
echo $BeginDate;
echo "<br/>";
echo date('Y-m-d', strtotime("$BeginDate +1 month -1 day"));
echo "<br/>";

3.获取当天年份、月份、日及天数.
echo " 本月共有:".date("t")."天";
echo " 当前年份".date('Y');
echo " 当前月份".date('m');
echo " 当前几号".date('d');
echo "<br/>";

4.使用函数及数组来获取当月第一天及最后一天,比较实用
function getthemonth($date)
{
 $firstday = date('Y-m-01', strtotime($date));
   $lastday = date('Y-m-d', strtotime("$firstday +1 month -1 day"));
   return array($firstday,$lastday);
}

2.PHP 代码 ,确保多个进程同时写入同一个文件成功

PHP 暂停函数 sleep() 与 usleep() 的区别
sleep()是暂停多少秒,usleep()是暂停多少微秒
注意:usleep()单位是微秒,1秒 = 1000毫秒 ,1毫秒 = 1000微秒,即1微秒等于百万分之一秒。

function writeData($filepath, $data) 
{ 
    $fp = fopen($filepath,'a');  
    do{ 
        usleep(100); 
    }while (!flock($fp, LOCK_EX));  //LOCK_EX 取得独占锁定(写入的程序)进行排它型锁定 获取锁 有锁就写入,没锁就得
    $res = fwrite($fp, $data."\n"); 
    flock($fp, LOCK_UN);    //LOCK_UN 释放锁定(无论共享或独占)。
    fclose($fp);  
    return $res; 
} 

3.写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php

答案1:

function getExt($url){

   $arr = parse_url($url);

  

   $file = basename($arr['path']);

   $ext = explode(".",$file);

   return $ext[1];

}

答案2:

function getExt($url) {

    $url = basename($url);

    $pos1 = strpos($url,".");

    $pos2 = strpos($url,"?");

    if(strstr($url,"?")){

         return substr($url,$pos1 + 1,$pos2 - $pos1 - 1);

    } else {

      return substr($url,$pos1);

    }

}

**4.使用五种以上方式获取一个文件的扩展名。要求:dir/upload.image.jpg,找出 .jpg 或者 jpg 必须使用PHP自带的处理函数进行处理,方法不能明显重复,可以封装成函数 **

方法1:

function getExt1($filename)
{
   $arr = explode('.',$filename);
   return array_pop($arr);;
}

方法2:

function getExt2($filename)
{
   $ext = strrchr($filename,'.');
   return $ext;
}
方法3:

function getExt3($filename)
{
   $pos = strrpos($filename, '.');
   $ext = substr($filename, $pos);
   return $ext;
}
方法4:

function getExt4($filename)
{
   $arr = pathinfo($filename);
   $ext = $arr['extension'];
   return $ext;
}

方法5:

function getExt5($filename)
{
   $str = strrev($filename);
   return strrev(strchr($str,'.',true));
}

5.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹

function my_scandir($dir)
{
    $files=array();
    
    if(is_dir($dir))
     {
        if($handle=opendir($dir))
         {
            while(($file=readdir($handle))!==false)
             {
                if($file!="." && $file!="..")
                 {
                    if(is_dir($dir."/".$file))
                     {
                        $files[$file]=my_scandir($dir."/".$file);
                     }
                    else
                     {
                        $files[]=$dir."/".$file;
                     }
                 }
             }
            closedir($handle);
            return $files;
         }      
     }  
}

6.遍历一个文件夹下所有文件和子文件夹的函数

function getTree($data, $pid = 0, $level = 0)
{
    static $tree = array();
    foreach ($data as $k => $v) {
    	//如果是0,将其存到$tree 中,并以此节点为根节点,遍历其子节点
        if ($v["pid"] == $pid) {
            $v["level"] = $level;
            $tree[] = $v;
            getTree($data, $v["id"], $level + 1);
        }
    }
    return $tree;
}

7.如何判断一个字符串是否是合法的日期模式

function checkTime($data){

	if(date('Y-m-d H:i:s',strtotime($data))==$data){

		return true;

	}else{

		return false;

	}
}

8.单例模式

三私一公
class Signle
{
    private static $instance = null;

    private function __construct()
    {
    }
 
    private function __clone()
    {
    }
 
    public static function getInstance()
    {
        if (is_null(self::$instance)) {
            self::$instance = new self();
        }
 
        return static::$instance;
    }
}
posted @ 2020-09-23 00:25  caibaotimes  阅读(89)  评论(0编辑  收藏  举报