常见试题
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;
}
}