PHP date函数显示1970-01-01问题详解
如date("Y-m-d H:i:s",$t);。但是这样是无法调出正确的时间的,该值为空,所以会显示1970-01-01的问题
问题是国类$t是一个不正确的时间截了,我们只要利用如$t =time()这样就可以了显示正确了。
例子
echo date("Y-m-d",time());
输入是
2014.05.11
我碰到过这样的一个问题也给大家分析一下,碰到存储数据库的日期格式为 2009-1-22 了,如果我们还使用
echo date("Y-m-d",'2009-1-22');这样也会有问题 1970-01-01
echo date("Y-m-d",'abc'); 也会有问题 1970-01-01
对于cookie path很多的朋友不以为燃了这样会发现就是因为一个小点或一个路径问题测试了一天发现读取不了cookie值了,今天我就来给大家介绍cookie中路径的一些例子与注意细节。先看phpcms中的一个函数
代码如下 | 复制代码 |
phpcms/libs/classes/param.class.php public static function set_cookie($var, $value = '', $time = 0, $path = '') { |
这个函数与cookie没什么区别我们先不介绍它,可能很多朋友懂,下面我们再看
setcookie函数的第四个参数为cookie路径,关于路径的设置,本文做了一些尝试,下面是两个测试页(直接用url表示路径和文件目录了):
http://localhost/test/cookie/father.php
http://localhost/test/cookie/child/child.php
代码如下 | 复制代码 |
<?php //setcookie("TestCookie", $value, time()+3600, "/~rasmus/", ".example.com", 1); print_r($_COOKIE); |
代码如下 | 复制代码 |
<?php //setcookie("TestCookie", $value, time()+3600, "/~rasmus/", ".example.com", 1); print_r($_COOKIE); |
分别按如下顺序访问页面father.php—>child.php—>father.php—>child.php,使用firebug查看,分别有如下结果:
图中可以看出,本次请求服务端做出响应,打印了$_COOKIE数组,但数组为空。设置了三个cookie值,分别是:"father_set_1_/"、"father_set_2_/child"、"father_set_3_test/cookie/child",它们对应的路径为"/"、"/child"、"/test/cookie/child",其中"/"指的是站点根目录。
访问child.php能看到请求中发送了两个cookie分别为"father_set_1_/"、"father_set_3_test/cookie/child",接收到四个cookie分别是"child_set_0"、"child_set_1_/"、"child_set_2_/child"、"child_set_3_/test/cookie/child/"。
第二次访问father.php打印出了二个值,也就是本次请求发送了两个值,也就是意味着father.php能访问两个值它们分别是"father_set_1_/"、"child_set_1_/"对应的路径都是"/"。
好了现在不知道你对cooke路径设置懂了没有其它就是我们要使用那个就设置那个路径了,如果是多域名就直接设置主域名就可以了,如果是目录指定目录就行了,如果是单文件指定单文件路径就可以了哦。
上传文件出现问题, 检查了一遍发现是php.ini配置问题我们只要修改php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项即可。php的配置:
代码如下 | 复制代码 |
upload_max_filesize = 200M |
nginx配置:
代码如下 | 复制代码 |
client_max_body_size 200m; |
按说没啥了额, 又怀疑是否是 nginx 做反向代理这里的限制,也检查过了没问题。
又仔细观察了一下 , $_POST 过来的数据是空的, 难道是 POST 大小的问题? 检查了php.ini, 还真的有一个配置项:
代码如下 | 复制代码 |
upload_max_filesize = 8M |
改为 200M, 重启一下 php, OK!! 搞定!! 还真的是 POST过来的数据大小超过限制了!
下现附给没有服务器操作权限的朋友
在PHP上传上加入下面的代码,即可暂时让PHP能上传大文件,如下
代码如下 | 复制代码 |
<?php |
有此主机商是把ini_set函数禁止使用了,我们可以使用下面函数来检测
代码如下 | 复制代码 |
<?php |
看到错误提示如下
Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 46
Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 47
Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 47
Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 48
Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 49
Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 51
Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 56
Warning: Call-time pass-by-reference has been deprecated in E:网站目录www目录a.php on line 56
解决办法如下:
方法1:
把php.ini的display_errors = on改成display_errors = off // (不显示错误)
就不显示了。
但是这种方法不是太好,只是不显示错误,其实错误还是存在的。
方法2:
1. 在PHP.ini中搜索关键字 : allow_call_time_pass_reference 没有的自行建立。
2. 将 Off 改成 On ,Web Server重起就OK了~
allow_call_time_pass_reference = Off 变成 allow_call_time_pass_reference = On
顺便解释下allow_call_time_pass_reference这个参数的含义:
是否启用在函数调用时强制参数被按照引用传递。此方法已不被赞成并在 PHP/Zend 未来的版本中很可能不再支持。鼓励使用的方法是在函数定义中指定哪些参数应该用引用传递。鼓励大家尝试关闭此选项并确保脚本能够正常运行,以确保该脚本也能在未来的版本中运行(每次使用此特性都会收到一条警告,参数会被按值传递而不是按照引用传递)。
在函数调用时通过引用传递参数是不推荐的,因为它影响到了代码的整洁。如果函数的参数没有声明作为引用传递,函数可以通过未写入文档的方法修改其参数。要避免其副作用,最好仅在函数声明时指定那个参数需要通过引用传递。
这两天决定试一把 Perl6,因为扶凯兄已经把还没有正式发行 Rakudo Star 包的 MoarVM 编译打包好了,所以可以跳过这步直接进入模块安装。当然,源码编译本身也没有太大难度,只不过从 github 下源码本身耗时间比较久而已。既然木有 Star 包,那么安装好 MoarVM 上的 Rakudo 后我们就有必要先自己把 panda 之类的工具编译出来。这一步需要注意一下你的 @*INC 路径和实际的 $PERL6LIB 路径,已经编译之后的 panda 存在的 $PATH 是不是都正确,如果不对的修改一下 ~/.bashrc 就好了。
我的尝试迁移对象是一个很简单的 Puppet 的 ENC 脚本,只涉及 SQLite 的读取,以及 YAML 格式的输出。通过 panda install DBIish 命令即可安装好 DBIish 模块。
脚本本身修改起来难度不大,结果如下:
代码如下 | 复制代码 |
#!/usr/bin/env perl6 use v6; use DBIish; use YAML; my $base_dir = "/etc/puppet/webui"; # 函数在 Perl6 中依然使用 sub 关键字定义,不过有个超酷的特性是 multi sub # 脚本中没有用到,但是在 YAML::Dumper 中遍地都是,这里也提一句。 # MAIN 函数在 Perl6 里可以直接用 :$opt 命令参数起 getopt 的作用 # 不过 ENC 脚本就是直接传一个主机名,用不上这个超酷的特性 sub MAIN($node) { # connect 方法接收参数选项是 |%opts,所以可以把哈希直接平铺写 # 这个 | 的用法一个月前在《Using Perl6》里看到过 my $dbh = DBIish.connect( 'SQLite', database => "{$base_dir}/node_info.db" ); my $sth = $dbh.prepare("select * from node_info where node_fqdn = ?"); $sth.execute("$node"); my $ret = $sth.fetchrow_hashref; my $res; if ( !$ret ) { $res = { # Perl5 的 qw() 在 Perl6 里直接写成 <> 。也不用再通过 [] 来指明是引用 classes => <puppetd repos>, environment => 'testing', }; } else { $res = { environment => $ret{'environment'}, parameters => { role => $ret{'role'} }, classes => {}, }; # 这个 for 的用法,在 Perl5 的 Text::Xslate 模板里就用过 for split(',', $ret{'classes'}) -> $class { if ( $class eq 'nginx' ) { # 这个 <== 符号指明数据流方向,完全可以把数组倒过来,然后用 ==> 写这行 # 如果不习惯这种流向操作符的,可以用,号,反正不能跟 Perl5 那样啥都不写 # 这里比较怪的一点是我试图把这么长的一句分成多行写,包括每行后面加,我看到 YAML 代码里就用分行了,但是我这就会报错 # Perl6 的正则变化较大,这里 /^#/ 要写成 /^'#'/ 或者 /^x23/ # 正则 // 前面不加 m// 不会立刻开始匹配 # 原先的 s///g 可以写作 s:g///,也可以写作对象式的 .subst(m//, '', :g),. 前面为空就是默认的 $_ # 捕获的数据存在 @() 数组里,也可以用 $/[i] 的形式获取 # 字符串内插时,不再写作 ${*},而是 {$*} 的形式 # 命名捕获这里没用上,写个示例: # $str ~~ /^(w+?)$<laststr>=(w ** 4)w$/; # $/<laststr>.chomp.say; # 注意里面的 w{4} 变成了 w ** 4 my @needs <== map { .subst(m/^(.+):(d+)$/, "{$/[0]} max_fails=30 weight={$/[1]}", :g) } <== grep { !m/^x23/ } <== split(',', $ret{'extstr'}); $res{'classes'}{'nginx'}{'iplist'} = @needs; } else { # Perl5 的 undef 不再使用,可以使用 Nil 或者 Any 对象 $res{'classes'}{$class} = Nil; } } }; $dbh.disconnect(); # 这个 dump 就是 YAML 模块导出的函数 # Perl6 的模块要导出函数不再需要 Exporter 那样,直接用 our sub dump($obj) {} 就可以了 say dump($res); }; |
但是麻烦的是 YAML 模块本身,这个模块是 ingydotnet 在好几年前草就,后来就没管了,实际现在压根跑不起来。花了半天时间,一边学习一边修改,总算修改正常了。主要涉及了 Attribute 对象,Nil 对象,twigls 前缀符,:exists 定义几个概念,以及 YAML 格式本身的处理逻辑。
YAML 模块修改对比如下:
代码如下 | 复制代码 |
diff --git a/lib/YAML/Dumper.pm b/lib/YAML/Dumper.pm |
另一处是 pir::getattribute__PPs() 函数,pir 是 parrot 上的语言,而 MoarVM 和 JVM 上都是先实现了一个 nqp 再用 nqp 写 Perl6,不巧的是这个 pir 里的 getattribute__PPs() 刚好至今还没有对应的 nqp 方法。(在 pir2nqp.todo 文件里可见)
所以只能用高级的 Perl6 语言来做了。
总的来说,这个 yaml-pm6 代码里很多地方都是试来试去,同样的效果不同的写法,又比如 .WHICH 和 .WHAT.perl 也是混用。 而且我随手测试了一下,即使在 parrot 上,用 pir::getattribute__PPs 的速度也比 Attribute.get_value 还差点点。
最后提一句,目前 ENC 脚本在 perl5、perl6-m、perl6-p、perl6-j 上的运行时间大概分别是 0.13、1.5、2.8、12s。MoarVM 还差 Perl5 十倍,领先 parrot 一倍。不过 JVM 本身启动时间很长,这里不好因为一个短时间脚本说它太慢。
另外还试了一下如果把我修改过的 YAML::Dumper 类直接写在脚本里运行,也就是不编译成 moarvm 模块,时间大概是 2.5s,比 parrot 模块还快点点。
不过如何把 perl6 脚本本身编译成 moarvm 的 bytecode 格式运行还没有研究出来,直接 perl6-m --target=mbc --output=name.moarvm name.pl6 得到的文件运行 moar name.moarvm 的结果运行会内存报错。
原文来自:tiejiang.org
相关文章
- eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
- 在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
Python astype(np.float)函数使用方法解析
这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08- 这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
- 本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
- 下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
PHP传值到不同页面的三种常见方式及php和html之间传值问题
在项目开发中经常见到不同页面之间传值在web工作中,本篇文章给大家列出了三种常见的方式。接触PHP也有几个月了,本文总结一下这段日子中,在编程过程里常用的3种不同页面传值方法,希望可以给大家参考。有什么意见也希望大...2015-11-24Android开发中findViewById()函数用法与简化
findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20- js修改input的type属性有些限制。当input元素还未插入文档流之前,是可以修改它的值的,在ie和ff下都没问题。但如果input已经存在于页面,其type属性在ie下就成了只读属性了,不可以修改。...2013-10-19
- 这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
- 1,utf8_bin跟utf8_general_ci的区别 ci是 case insensitive, 即 "大小写不敏感", a 和 A 会在字符判断中会被当做一样的; bin 是二进制, a 和 A 会别区别对待. 例如你运行: SELECT * FROM table WHERE txt = 'a'...2013-10-04
- strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
- 这篇文章主要为大家详细介绍了jQuery实现广告显示和隐藏动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-07-05
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07- Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
- free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
- 一、1 CREATE TABLE NAME(name VARCHAR(10)); 对这个表,缺省情况下,下面两个查询的结果是一样的:复制代码 代码如下: SELECT * FROM TABLE NAME WHERE name='clip'; SELECT * FROM TABLE NAME WH...2015-03-15
- 为了网站的安全性,很多朋友都把密码设的比较复杂,但是如何密码不能明显示,不知道输的是对是错,为了安全起见可以把密码显示的,那么基于js代码如何实现的呢?下面通过本文给大家介绍JavaScript实现表单密码的隐藏和显示,需要的朋友参考下...2016-03-03
- 一.mysql默认不支持中文,它的server和db默认是latin1编码.所以我们要将其改变为utf-8编码,因为utf-8包含了地球上大部分语言的二进制编码 1.关闭mysql服务 sudo /etc/init.d/mysql stop 2.修改mysql配置文件 mysql配...2015-10-21