PHP计算某月的第一天和最后一天

 更新时间:2016年11月25日 15:02  点击:1784
在php中要统计某月的第一天和最后一天我们可以使用strtotime函数进行转换,下面介绍两种方法各位朋友可参考。

主要用到了strtotime函数,功能强大,支持相对日期

 代码如下 复制代码

//计算本月第一天和最后一天
$today=date("Y-m-d");
//这个不需要解释吧,直接把第一天设为1号
$firstday = date('Y-m-01', strtotime($today));
//这个语法以前还真没见过,
$lastday = date('Y-m-d', strtotime("$firstday +1 month -1 day"));
 
echo $firstday."<br/>";
echo $lastday;

单例模式是php中一个为了简化大家开发及重复调用的一个功能,下面我来给各位朋友详细介绍单例模式用法。

1.单例模式的概念

顾名思义,单例模式只有一个实例,而且自行实例化,向全局提供这个实例。需要强调的是,单例模式

确保某个类只能有一个实例!

2.单例模式的三个要点

(1)需要一个静态变量来保存类的唯一实例

 代码如下 复制代码

private static $_instance;

(2)构造函数和克隆函数必须为私有的,防止用户创建对象和复制实例对象

 代码如下 复制代码

private function __construct()
{
//私有化默认构造方法,防止外界直接实例化
}
private function __clone()
{
//私有化克隆方法,防止用户复制实例
}

(3)必须提供一个公共的静态方法(一般为getInstance),从而返回一个唯一实例的引用

 代码如下 复制代码
public static function getInstance()   
{   
    if(! (self::$_instance instanceof self) )  
    {   
        self::$_instance = new self();   
    } 
    return self::$_instance;   
 
}

3.php中使用单例模式的原因
       PHP语言是一种解释型的脚本语言,这种运行机制使得每个PHP页面被解释执行后,所有的相关资

源都会被回收。也就是说,PHP在语言级别上没有办法让某个对象常驻内存,这和asp.net、Java等编译

型是不同的,比如在Java中单例会一直存在于整个应用程序的生命周期里,变量是跨页面级的,真正可

以做到这个实例在应用程序生命周期中的唯一性。然而在PHP中,所有的变量无论是全局变量还是类的静

态成员,都是页面级的,每次页面被执行时,都会重新建立新的对象,都会在页面执行完毕后被清空,

这样似乎PHP单例模式就没有什么意义了,所以PHP单例模式我觉得只是针对单次页面级请求时出现多个

应用场景并需要共享同一对象资源时是非常有意义的。

4.如何实现单例模式

 代码如下 复制代码

<?php
/**
 * 单例模式示例:Demo
 */
class Demo{
 //静态成员变量,用来保存全局实例
 private static $_instance;
 //私有化构造方法,保证外界不能直接实例化
 private function __construct(){

 }
 //私有化克隆方法,防止用户复制实例
 private function __clone(){

 }
 //返还此类的唯一实例
 public function getInstance(){
  if(!(self::$_instance instanceof self))
  {
   self::$_instance = new self();
  }
  return self::$_instance;
 }
 //这是第一个测试方法
 public function test1Function(){
  echo '这是第一个测试方法';
 }
 //这是第二个测试方法
 public function test2Function(){
  echo '这是第二个测试方法';
 }
}
//正确的使用方法
@$demo = Demo::getInstance();
$demo->test1Function();
$demo->test2Function();
//这样实例化会出错,因为构造方法为private
//$demo_new = new Demo;
//复制demo会出错,因为默认的clone方法为private
// $demo_clone = clone $demo;
?>

5.单利模式的应用场合


(1)应用与数据库的交互,多用于数据库的连接
(2)如果系统中需要一个类来全局控制配置信息,用单例模式可以很方便的实现


1、普通的数据库访问例子:

 代码如下 复制代码

<?php
......
//初始化一个数据库句柄
$db = new DB(...);

//添加用户信息
$db->addUserInfo(...);

......

//在函数中访问数据库,查找用户信息
function getUserInfo()
{
    $db = new DB(...);//再次new 数据库类,和数据库建立连接
    $db = query(....);//根据查询语句访问数据库
}

?>

2、应用单例模式对数据库进行操作:

 代码如下 复制代码


<?php

class DB 

    private $_db; 
    private static $_instance; 
 
    private function __construct(...) 
    { 
        $this->_db = pg_connect(...);//postgrsql 
    } 
 
    private function __clone() {};  //覆盖__clone()方法,禁止克隆 
 
    public static function getInstance() 
    { 
        if(! (self::$_instance instanceof self) ) { 
            self::$_instance = new self(); 
        } 
        return self::$_instance; 
    } 
 
   

    public function addUserInfo(...)
    {

  

    }

     public function getUserInfo(...)
    {

    }

}

//test

$db = DB::getInstance();

$db->addUserInfo(...);

$db->getUserInfo(...);


?>

深入理解

 代码如下 复制代码

<?php
class db {
 public $conn;
 public static $sql;
 public static $instance=null;
 private function __construct(){
  require_once('db.config.php');
  $this->conn = mysql_connect($db['host'],$db['user'],$db['password']);
  if(!mysql_select_db($db['database'],$this->conn)){
   echo "失败";
  };
  mysql_query('set names utf8',$this->conn);  
 }
 public static function getInstance(){
  if(is_null(self::$instance)){
   self::$instance = new db;
  }
  return self::$instance;
 }
 /**
  * 查询数据库
  */
 public function select($table,$condition=array(),$field = array()){
  $where='';
  if(!empty($condition)){
   
   foreach($condition as $k=>$v){
    $where.=$k."='".$v."' and ";
   }
   $where='where '.$where .'1=1';
  }
  $fieldstr = '';
  if(!empty($field)){
   
   foreach($field as $k=>$v){
    $fieldstr.= $v.',';
   }
    $fieldstr = rtrim($fieldstr,',');
  }else{
   $fieldstr = '*';
  }
  self::$sql = "select {$fieldstr} from {$table} {$where}";
  $result=mysql_query(self::$sql,$this->conn);
  $resuleRow = array();
  $i = 0;
  while($row=mysql_fetch_assoc($result)){
   foreach($row as $k=>$v){
    $resuleRow[$i][$k] = $v;
   }
   $i++;
  }
  return $resuleRow;
 }
 /**
  * 添加一条记录
  */
  public function insert($table,$data){
   $values = '';
   $datas = '';
   foreach($data as $k=>$v){
    $values.=$k.',';
    $datas.="'$v'".',';
   }
   $values = rtrim($values,',');
   $datas   = rtrim($datas,',');
   self::$sql = "INSERT INTO  {$table} ({$values}) VALUES ({$datas})";
  if(mysql_query(self::$sql)){
   return mysql_insert_id();
  }else{
   return false;
  };
  }
  /**
   * 修改一条记录
   */
 public function update($table,$data,$condition=array()){
  $where='';
  if(!empty($condition)){
   
   foreach($condition as $k=>$v){
    $where.=$k."='".$v."' and ";
   }
   $where='where '.$where .'1=1';
  }
  $updatastr = '';
  if(!empty($data)){
   foreach($data as $k=>$v){
    $updatastr.= $k."='".$v."',";
   }
   $updatastr = 'set '.rtrim($updatastr,',');
  }
  self::$sql = "update {$table} {$updatastr} {$where}";
  return mysql_query(self::$sql);
 }
 /**
  * 删除记录
  */
  public function delete($table,$condition){
   $where='';
  if(!empty($condition)){
   
   foreach($condition as $k=>$v){
    $where.=$k."='".$v."' and ";
   }
   $where='where '.$where .'1=1';
  }
  self::$sql = "delete from {$table} {$where}";
  return mysql_query(self::$sql);
  
  }
 
 public static function getLastSql(){
  echo self::$sql;
 }
 
 
 
}

$db = db::getInstance();
//$list = $db->select('demo',array('name'=>'tom','password'=>'ds'),array

('name','password'));
//echo $db->insert('demo',array('name'=>'最近你啦','password'=>'123'));
//echo $db->update('demo',array("name"=>'xxx',"password"=>'123'),array('id'=>1));
echo $db->delete('demo',array('id'=>'2'));
db::getLastSql();
echo "<pre>";
?>

       php中有很多的设计模式,其中的单例模式是我们写代码的时候较为常用的一种模式,它不但能

够有效的减少new操作的资源消耗,而且能够很方便的对某些全局配置信息进行控制!希望大家在php学

习中深刻理解单例模式的应用。

在php中数组定义有几种方法如array(),或arr[] 实现数组定义了,下面我来给各位朋友详细介绍关于 php数组定义的各种技巧详解

PHP数组是一个重要的概念,它包含有大量的函数,方便人们的开发…现将它的数组分类,以方便查询及应

用.
先说说PHP数组的定义…PHP数组包含两个项,key和value,可以通过key来获取相应的value,其中key又可

以是数值和关联的,如$array[0],$array[one]…
创建数组
PHP中的数组声明跟其它语言的也有点小小的差别,但一样可以声明为一维,两维,三维及多维等,如
$array[0] = 1,$array = array(1,2,3); 一维数组,只包括三个值,属于数值型数组,引用时可用$array

[0]来代表1,创建数值数组时可以省略索引

PHP中创建数组使用array()结构来定义,比如:

 代码如下 复制代码


$people=array('name','sex','nation','brith');

 

而如何显示数组中的各元素的值,我们则是使用从0开始的索引,索引号在变量名称后的方括号中,比如

 代码如下 复制代码


<?php
$people=array('name','sex','nation','birth');
echo $people[2];
?>

 

输出的$people[2]就是显示的是nation(索引第一项从0计数)。

PHP除了支持数字索引数组以外,还支持相关数组。所谓相关数组,就是可自定义关键字来替换不直观的

数字索引,比如:

 代码如下 复制代码


<?php
$peoples=array('xm'=>'name','xb'=>'sex','mz'=>'nation','cs'=>'birth');
echo $peoples['cs'];
?>

 

使用相关数组使得输出的选择很直观(不需要预先计算索引号然后输出),定义的关键字和值之间使用

“=>”符号定义。

根据PHP数组元素的两种显示方式,还可以如变量一样无需array()声明和初始化,直接自动创建数字。

比如

 代码如下 复制代码


$people[0]='name';
$people[1]='sex';
$people[2]='nation';
$people[3]='brith';

 或者

 代码如下 复制代码


$peoples['xm']='name';
$peoples['xb']='sex';
$peoples['mz']='nation';
$peoples['cs']='birth';

 该数组的大小根据所增加元素的多少动态的变化。

 代码如下 复制代码


//索引数组
    $user[0]=1;//用户序号
    $user[1]="zhangsan";//用户名
    $user[2]=10;//年龄
    $user[3]="nan";//性别
    echo '<pre>';
    print_r($user);
    echo '</pre>';
 
    //关联数组
    $user["id"]=1;
    $user["name"]="zhangsan";
    $user["age"]=10;
    $user["sex"];
    $user["age"]=90;//赋值
    echo $user["name"];//输出
 
    //使用array()声明数组
    $user=array(1,"zhangsan",10,"nan");
    //使用array()声明关联数组
    $user=array("id"=>1,"name"=>"zhangsan","age"=>10,"sex"=>"nan");
 
    //声明多维数组(多条记录),来保存一个表中的多条用户信息记录
    $user=array(
        //用$user[0]调用这一行,比如调用这条记录中的姓名,$user[0][1]
        array(1,"zhangsan",10,"nan"),
        //用$user[1]调用这一行,比如调用这条记录中的姓名,$user[1][1]
        array(2,"lisi",20,"nv")
    );
 
    //数组保存多个表,每个表有多条记录
    $info=array(
        "user"=>array(
            array(1,"zhangsan",10,"nan"),
            array(2,"lisi",20,"nv")
        ),
 
        "score"=>array(
            array(1,90,80,70),
            array(2,60,40,70)
        )
 
 
 
    );
 
    echo $info["score"][1][1];//输出60,

Php.ini文件是php的一个配置文件,在windows主机中如果你未修改配置文件php.ini文件肯定是和你的php安装目录在一起的,但在linux中好像不一样,下面我来介绍查找php.ini位置的方法。

在linux下

最有可能的位置是:/etc目录下或/usr/local/lib目录下。

如果你还是找不到位置,那么请使用终极解决办法:

新建php文件,写入如下代码<?php echo phpinfo(); ?>保存,然后在浏览器访问该页面,搜索php.ini,恭喜你,你要找的php.ini文件位置已经找到了。(用该方法找Php.ini文件位置,在linux和windows下都是绝招哦)


在linux服务器上用命令行/data/php/bin/php  a.php | grep php.ini

显示

 代码如下 复制代码

Configuration File (php.ini) Path => /data/php/etc
Loaded Configuration File => /data/php/bin/php.ini

linux服务器上用的是 nginx+php

/data/php/bin/php.ini的权限

-rwxrwxrwx. 1 root root 69737 2月   3 13:49 /data/php/bin/php.ini

要怎么处理才能在浏览器里浏览a.php  显示Loaded Configuration File => /data/php/bin/php.ini

php命令行方式运行和在浏览器浏览php文件的主要区别是什么

Php.ini位置修改方法如下:

php.ini文件缺省放在/usr/local/lib上面,可以在编译的时候使用--with-config-file-path参数来修改php.ini的存放位置,例如你可以使用--with- config-file-path=/etc把它存放到/etc下面,然后可以从源码包中拷贝php.ini-dist到/etc/php.ini。


windows

在php安装文件夹里。

一共有两个类似php.ini-xxxxxxxx。你选择一个你把“-xxxxxxxxx”删除就是用这个。

在php中set_time_limit函数是用来限制页面执行时间的,如我想把一个php页面的执行时间定义为5秒就可以set_time_limit(5)了。

一个php脚本通过crontab每5分钟执行一次,考虑到脚本执行时间会超过5分钟,特意用set_time_limit(290)来控制脚本在290秒退出。某天突然发现后台有多个该脚本的进程在执行,也就是说set_time_limit(290)没有起作用。为了证明,特意使用如下代码测试。

 代码如下 复制代码

set_time_limit(5);

for ($i = 0; $i < 100; $i++) {
    echo date('Y-m-d H:i:s') . "n";
    sleep(1);
}

无论是在web还是CLI下,上述脚本并没有在5秒钟后退出。后来加上ini_set(‘max_execution_time’, 5)测试,结果一样。那是不是说明set_time_limit函数根本就没有用呢?其实不然,在 http://stackoverflow.com/questions/5874950/set-max-execution-time-in-php-cli 这里找到根源所在,其实是上面的写法有问题,例如使用下述代码:

 代码如下 复制代码

set_time_limit(5);

for (;;) {
}

执行后,大概5秒钟就可以看到”Fatal error: Maximum execution time of 5 seconds exceeded in”类似这样的错误提示。说明set_time_limit是起作用的。现在在去看看官方文档(http://www.php.net/manual/en/function.set-time-limit.php)上关于此函数的说明,在Note中写到:

The set_time_limit() function and the configuration directive max_execution_time only affect the execution time of the script itself. Any time spent on activity that happens outside the execution of the script such as system calls using system(), stream operations, database queries, etc. is not included when determining the maximum time that the script has been running. This is not true on Windows where the measured time is real.

 

 代码如下 复制代码
<?php
//set_time_limit(0);
$i=1500;
include ("inc/conn.php");
while($i>0)
{
$sql="INSERT INTO php (php)
VALUES ('$i')";
if ($conn->execute($sql)===flase)
{
//echo "数据插入错误".$conn->errormsg();
}
else
{
$phpid=$conn->Insert_ID();
echo $i."已经存入数据库,编号:".$phpid;
}
$i--;
echo "<hr>";
}
?>

注意:sleep函数暂停的时间也是不计入脚本的执行时间的。所以也是第一个测试失败的原因。

当你的页面有大量数据时,建议使用set_time_limit()来控制运行时间,默认是30s,所以需要你将执行时间加长点,如 set_time_limit(300)  ,其中将秒数设为0 ,表示持续运行!

如:set_time_limit(0)表示长时间链接运行!

注意:这个函数的运行需要你关闭安全模式,在php.ini中将safe_mode = Off 安全模式设置为Off,否则将会出现下面错误:

Warning: set_time_limit() [function.set-time-limit]: Cannot set time limit in safe mode in

再次注意的是:

在php.ini可以通过定义max_execution_time来设置PHP页面的最大执行时间,比如下面:

 代码如下 复制代码
set_time_limit(900);

这个函数指定了当前所在php脚本的最大执行时间,
虽然设定值是900秒,实际上
最大执行时间=php.ini里的max_execution_time数值 - 当前脚本已经执行的时间 + 设定值
假如php.ini里的max_execution_time=30,当前脚本已经执行10秒,则:
最大执行时间=30-10+900=920秒。

php中设置set_time_limit不起作用的解决方法:

set_time_limit用来设置脚本的超时时间,用法如下:

set_time_limit(秒数);
规定从该句运行时起程序必须在指定秒数内运行结束,
超时则程序出错退出.
但是有时候设置set_time_limit没有效果,set_time_limit函数最好是在linux下执行,windows执行可能也无效
解决方法:
修改php.ini里的max_execution_time = 30了。这个默认是30秒,修改为max_execution_time = 300.重新启动apache服务器。这样超时设置为300秒就有提示信息了.

[!--infotagslink--]

相关文章

  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • python 计算方位角实例(根据两点的坐标计算)

    今天小编就为大家分享一篇python 计算方位角实例(根据两点的坐标计算),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • JS实现购物车中商品总价计算

    这篇文章主要为大家详细介绍了JS实现购物车中商品总价的计算 ,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-03-07
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • PHP如何通过date() 函数格式化显示时间

    这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
  • PHP+jQuery+Ajax实现多图片上传效果

    今天我给大家分享的是在不刷新页面的前提下,使用PHP+jQuery+Ajax实现多图片上传的效果。用户只需要点击选择要上传的图片,然后图片自动上传到服务器上并展示在页面上。...2015-03-15
  • golang与php实现计算两个经纬度之间距离的方法

    这篇文章主要介绍了golang与php实现计算两个经纬度之间距离的方法,结合实例形式对比分析了Go语言与php进行经纬度计算的相关数学运算技巧,需要的朋友可以参考下...2016-07-29
  • PHP正则表达式过滤html标签属性(DEMO)

    这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06
  • php构造方法中析构方法在继承中的表现

    这篇文章主要为大家详细介绍了php构造方法中析构方法在继承中的表现,感兴趣的小伙伴们可以参考一下...2016-04-15
  • thinkPHP中多维数组的遍历方法

    这篇文章主要介绍了thinkPHP中多维数组的遍历方法,以简单实例形式分析了thinkPHP中foreach语句的使用技巧,需要的朋友可以参考下...2016-01-12
  • PHP如何使用cURL实现Get和Post请求

    这篇文章主要介绍了PHP如何使用cURL实现Get和Post请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-11
  • C#实现计算一个点围绕另一个点旋转指定弧度后坐标值的方法

    这篇文章主要介绍了C#实现计算一个点围绕另一个点旋转指定弧度后坐标值的方法,涉及C#针对坐标的数学运算相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • c# 计算时间间隔的简单方法(推荐)

    下面小编就为大家带来一篇c# 计算时间间隔的简单方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • 谈谈PHP中相对路径的问题与绝对路径的使用

    经常看到有人踩在了PHP路径的坑上面了,感觉有必要来说说PHP中相对路径的一些坑,以及PHP中绝对路径的使用,下面一起来看看。 ...2016-08-24