php用strtotime加减运算得到指定日期的方法

 更新时间:2016年11月25日 15:02  点击:1450
在计算与指定日期相关的某一周的周几或者某一天的日期时,利用strtotime的参数的语法可以对日期进行加减处理,快速得到想要的日期。
 代码如下 复制代码


$oneDay = "2013-01-01″;

$nextWeekFirstDay = date("Y-m-d",strtotime("$oneDay + 7 days"));

strtotime
这个函数可以将一个时间字符串转化为时间变量
如:
strtotime("2011-1-1″);

好了,有了上面这两个函数来转化为时间变量后就只要直接加减时间了,然后返回的是秒,只要自己再算成天之类的了。如:

 代码如下 复制代码


//第一种方法

$time1 = mktime(10,20,30,2,5,2000); //2000-2-5 10:20:30
$time2 = mktime(18,30,20,5,2,2000); //2000-5-2 18:30:20

//第二种方法

$time1= '2010-7-1';
$time2='2010-7-8';
//计算两者差值
$days=abs((strtotime($date1)-strtotime($date2))/86400);
$diff = (int)(($time2-$time1)/(24*3600));
echo "$time2 和 $time1 的时间差为:" . $diff . "天
";

?>

在php中文件操作函数有很多很多,下面我来给各们同学介绍在php中文件操作常用函数使用方法与介绍。

1、获取文件名:basename();

2、获取文件所在的目录:dirname();

3、pathinfo()获取文件信息,返回结果为一个array,包括路径、文件全名、文件名和扩展名。例如:

 代码如下 复制代码

$file = '/com/netingcn/error.log';
print_r(pathinfo($file));

结果为:

Array(
    [dirname] => /com/netingcn
    [basename] => error.log
    [extension] => log
    [filename] => error
)

4、判断文件是否存在:is_file();

5、判断目录是否存在:is_dir();

6、判断文件或目录是否存在:file_exists();

7、读取文件所有内容:file()或file_get_contents(),其中file()返回的是一个一行为元素的array,file_get_contents()把文件全部内容作为一个String返回;

8、写文件fwrite,如:

 代码如下 复制代码

$handler = fopen($file, 'w'); // w 会冲掉以前的内容、a 是追加
fwrite($handler, 'content');
fclose($handler);              //记得关闭打开的文件句柄9、文件读取操作有很多,下面简单介绍几个:

$handler = fopen($file, 'r');

while(!feof($handler)) {
    $datas[] = fgets($handler);  //读取一行内容
}

while(!feof($handler)) {
    $datas[] = fgetss($handler); //读取一行内容并过来html标记
}

while(!feof($handler)) {
    $datas[] = fgetcsv($handler); //读取一行内容并解析csv字段
}

$content = fread($handler, $strLength); //读取指定长读的字符

fclose($handler);  

本文章来给各位同学介绍关于在php中system,exec,passthru函数的一些使用方法,各位同学不防进入参考。


php提供了system(),exec(),passthru()这几个函数来调用外部的命令。

他们的区别 :

system() 输出并返回最后一行shell结果。
exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。
passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。
相同点:都可以获得命令执行的状态码


ystem()、exec()、shell_exec() 官方文件?明如下:

system — Execute an external program and display the output
string system ( string $command [, int &$return_var ] )
exec — Execute an external program
string exec ( string $command [, array &$output [, int &$return_var ]] )
shell_exec — Execute command via shell and return the complete output as a string
string shell_exec ( string $cmd )
ystem()、exec()、shell_exec() 官方文件说明如下:

system — Execute an external program and display the output
string system ( string $command [, int &$return_var ] )
exec — Execute an external program
string exec ( string $command [, array &$output [, int &$return_var ]] )
shell_exec — Execute command via shell and return the complete output as a string
string shell_exec ( string $cmd )
一般系统会有两种输出, 一种是系统状态(return code), 一种是输出文字(output string), 这三个 Function 主要就是这些回传的差异.

system()
$last_line = system('ls', $return_var);
system() 会将输出内容直接印出, 所以若於网页, 会将所有回传内容都显示於页面上.
$last_line: 只能取得最后一行的内容
$return_var: 取得系统状态回传码
exec()
exec('ls', $output, $return_var);
$output: 回传内容都会存於此变数中(储存成阵列), 不会直接秀在页面上.
$return_var: 取得系统状态回传码
shell_exec()
$output = shell_exec('ls');
$output: 回传内容都会存於此变数中(储存成纯文字内容), 不会直接秀在页面上

在PHP中调用外部命令,可以用如下三种方法来实现:

1) 用PHP提供的专门函数
PHP提供共了3个专门的执行外部命令的函数:system(),exec(),passthru()。

system()

原型:string system (string command [, int return_var])
system()函数很其它语言中的差不多,它执行给定的命令,输出和返回结果。第二个参数是可选的,用来得到命令执行后的状态码。

返回结果

        成功返回0, 
        失败(命令不存在等原因)   返回   非0值

例子: system("/usr/local/bin/webalizer/webalizer");

exec()

原型:string exec (string command [, string array [, int return_var]])
exec ()函数与system()类似,也执行给定的命令,但不输出结果,而是返回结果的最后一行。虽然它只返回命令结果的最后一行,但用第二个参数array 可以得到完整的结果,方法是把结果逐行追加到array的结尾处。所以如果array不是空的,在调用之前最好用unset()最它清掉。只有指定了第二 个参数时,才可以用第三个参数,用来取得命令执行的状态码。

例子:

 代码如下 复制代码
exec("/bin/ls -l");
exec("/bin/ls -l", $res);
exec("/bin/ls -l", $res, $rc);

passthru()

原型:void passthru (string command [, int return_var])
passthru ()只调用命令,不返回任何结果,但把命令的运行结果原样地直接输出到标准输出设备上。所以passthru()函数经常用来调用象pbmplus (Unix下的一个处理图片的工具,输出二进制的原始图片的流)这样的程序。同样它也可以得到命令执行的状态码。

例子:
header("Content-type: image/gif");
passthru("./ppmtogif hunte.ppm");

2) 用popen()函数打开进程

上面的方法只能简单地执行命令,却不能与命令交互。但有些时候必须向命令输入一些东西,如在增加Linux的系统用户时,要调用su来把当前用户换到 root才行,而su命令必须要在命令行上输入root的密码。这种情况下,用上面提到的方法显然是不行的。
popen ()函数打开一个进程管道来执行给定的命令,返回一个文件句柄。既然返回的是一个文件句柄,那么就可以对它读和写了。在PHP3中,对这种句柄只能做单一 的操作模式,要么写,要么读;从PHP4开始,可以同时读和写了。除非这个句柄是以一种模式(读或写)打开的,否则必须调用pclose()函数来关闭它。

例子1:
$fp=popen("/bin/ls -l", "r");

例子2 :
/* PHP中如何增加一个系统用户
下面是一段例程,增加一个名字为james的用户,
root密码是 verygood。仅供参考

 代码如下 复制代码
*/
$sucommand = "su --login root --command";
$useradd = "useradd ";
$rootpasswd = "verygood";
$user = "james";
$user_add = sprintf("%s "%s %s"",$sucommand,$useradd,$user);
$fp = @popen($user_add,"w");
@fputs($fp,$rootpasswd);
@pclose($fp);
?>

3) 用反撇号(`,也就是键盘上ESC键下面的那个,和~在同一个上面)
这个方法以前没有归入PHP的文档,是作为一个秘技存在的。方法很简单,用两个反撇号把要执行的命令括起来作为一个表达式,这个表达式的值就是命令执行的结果。如:
$res='/bin/ls -l';
echo '
'.$res.'
';

这个脚本的输出就象:
hunte.gif
hunte.ppm
jpg.htm
jpg.jpg
passthru.php


范例程式

由此范例执行一次就比较容易理解. (请建立一个目录, 随便放两个档案, 再将此程式放置执行)

 代码如下 复制代码

<?php
echo "nsystem";
$last_line = system('ls', $return_var);
echo "nreturn_var:";
print_r($return_var);
echo "nlast_line:";
print_r($last_line);

echo "nnexec";
exec('ls', $output, $return_var);
echo "nreturn_var:";
print_r($return_var);
echo "noutput:";
print_r($output);

echo "nnshell_exec";
$output = shell_exec('ls');
echo "noutput:";
print_r($output);
?>

*/

 

?>

本文章来给大家介绍php入门教程之工厂模式哦,工厂模式概念:实例化对象,用工厂方法替代new操作,有需要了解学习的朋友可参考。


工厂模式代码:

 

 代码如下 复制代码

<?php
//首先定义什么是人类
 interface Human {
    //人是愉快的,会笑的
    public function laugh();
    //人类还会哭,代表痛苦
    public function cry();
    //人类会说话
    public function talk();
}

//然后定义具体的人种
class YellowHuman implements Human {//黄色人种,这个翻译的不准确,将就点吧
    function cry() { var_dump( "黄色人种会哭");}
    function laugh() {var_dump( "黄色人种会大笑,幸福呀!");}
    function talk() {var_dump( "黄色人种会说话,一般说的都是双字节"); }
}
class WhiteHuman implements Human { //白色人种
    public function cry() {var_dump("白色人种会哭");}
    public function laugh() {var_dump("白色人种会大笑,侵略的笑声"); }
    public function talk() {var_dump("白色人种会说话,一般都是但是单字节!"); }
}
class BlackHuman implements Human { //黑色人种
    public function cry() {var_dump("黑色人种会哭");}
    public function laugh() {var_dump("黑色人种会大笑,侵略的笑声"); }
    public function talk() {var_dump("黑色人种会说话,一般都是但是单字节!"); }
}

//人种也定义完毕了,那我们把八卦炉定义出来:
class HumanFactory {
    //定一个烤箱,泥巴塞进去,人就出来,这个太先进了
    public static function createHuman( $c ){
        if ($c instanceof Human ) {//判断是否继承自Human
            return $c;
        }else {
            var_dump("必须跟HuMan有一腿");
        }
    }
}


var_dump("------------造出的第一批人是这样的:白人-----------------");
$whiteHuman = HumanFactory::createHuman( new WhiteHuman());
$whiteHuman->cry();
$whiteHuman->laugh();
$whiteHuman->talk();
    
 //女娲第二次造人,火候加足点,然后又出了个次品,黑人
var_dump("nn------------造出的第二批人是这样的:黑人-----------------");
$blackHuman = HumanFactory::createHuman(new BlackHuman());
$blackHuman->cry();
$blackHuman->laugh();
$blackHuman->talk();
    
//第三批人了,这次火候掌握的正好,黄色人种(不写黄人,免得引起歧义),备注:RB人不属于此列
var_dump("nn------------造出的第三批人是这样的:黄色人种-----------------");
$yellowHuman = HumanFactory::createHuman(new YellowHuman());
$yellowHuman->cry();
$yellowHuman->laugh();
$yellowHuman->talk();

在php中register globals函数在php5.3.0开始移除在5.4.0开始废弃了,但还是有很多的网站都有这个函数,下面我来介绍一些解决办法。

php4.2.0的版本是没有用过,php官网提到:php最具争议的变化是php4.2.0版本配置中register_globals的On改为了Off,对此项依赖的是如此普遍以至于很多人不知道他的存在而以为php本来就是这么工作的,下面解释这个指令如何写出不安全的代码,但是要知道这个指令没有什么不安全的地方,只有不安全的代码。

当register_globals打开以后,很多代码都可以被注入比如html表单提交的内容,再加上php在使用变量的时候无需初始化,这就使得更容易出现不安全的代码。比如我将php.ini中register_globals设置为On开始状态:

 代码如下 复制代码


<?php
// 当用户合法的时候,赋值 $flag = true
if (is_user()) {
    $flag= true;
}

// 由于并没有事先把 $flag初始化为 false,
// 当 register_globals 打开时,可能通过GET user.php?flag=1 来定义该变量值
// 所以任何人都可以绕过身份验证
if ($flag) {
    include "/highly/sensitive/data.php";
}
?>  


 以上代码在register_globals = On的时候,由于$flag没有初始化,在后面判断的时候通过get方式的flag = 1也可以执行include。

[!--infotagslink--]

相关文章

  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • ps把文字背景变透明的操作方法

    ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
  • intellij idea快速查看当前类中的所有方法(推荐)

    这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02
  • Mysql select语句设置默认值的方法

    1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
  • js导出table数据到excel即导出为EXCEL文档的方法

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13
  • mysql 批量更新与批量更新多条记录的不同值实现方法

    批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
  • ps怎么制作倒影 ps设计倒影的方法

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • js基础知识(公有方法、私有方法、特权方法)

    本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • c#中分割字符串的几种方法

    单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
  • js控制页面控件隐藏显示的两种方法介绍

    javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13
  • 连接MySql速度慢的解决方法(skip-name-resolve)

    最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21
  • C#方法的总结详解

    本篇文章是对C#方法进行了详细的总结与介绍,需要的朋友参考下...2020-06-25
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • JS日期加减,日期运算代码

    一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
  • EXCEL数据上传到SQL SERVER中的简单实现方法

    EXCEL数据上传到SQL SERVER中的方法需要注意到三点!注意点一:要把EXCEL数据上传到SQL SERVER中必须提前把EXCEL传到服务器上.做法: 在ASP.NET环境中,添加一个FileUpload上传控件后台代码的E.X: 复制代码 代码如下: if...2013-09-23