最近动态

PHP

array_walk中的$this报错

Fatal Error:Using $this when not in object context on line 54

  今天在完成一个小功能开发并提交SVN后,收到前端的求助,说是更新了我的代码后页面打不开了。很着急啊,我这里都是测试成功才提交版本的。现在只能麻溜的跑过查看了。

  首先,出现的情况是空白页面(对,没有任何输出)。报错肯定没打开,帮他打开E_ALL后就看到了今天的重点报错提示了。说是在54行有个$this不在对象环境中?

  然后我去看了,那个$this出现在array_walk方法的function中,从语句上来看是完全没有问题的,在类的方法里面用$this肯定没毛病啊,可是为什么他那里就报错呢?

  我突然想起来,如果要在array_walk里面使用外面的变量的时候需要使用use方法。所以改进一下:

1
2
3
4
$user_id = $this->user->id;
array_walk($arr,function(&$v) use($user_id) {
$v['user_id']=$user_id;
});

  这样就没毛病了。看来这个array_walk还挺调皮啊,不得不说这个方法的使用还真有许多需要注意的地方呢。

  通过查资料,得知这个$this在PHP版本低于5.4的情况下是会出现问题的。高版本的不会出现。

参考:Using $this when not in object context error within array_walk

阅读剩下更多

默认配图
PHP

PHP时区默认为Europe/zurich且修改php.ini无效的困惑

为何我的date(“Y/m/d H:i:s”)相差了7个小时?

环境:MacOS X EI Capitan / PHP5.6.25

  今天在校验Crontab的计划执行时,利用PHP输出执行时间却发现输出的时间和当地事件相差了7个小时,对!是7不是8,并不是默认的UTC,呵呵了~

  好吧,一贯思路,我去把php.ini中的date.timezone修改成PRC。嗯,肯定正常了吧。

  要能正常我也不会写本文了^_~!

  不论是修改成PRC还是Asia/Shanghai又或者UTC,全都未然。   


  1. apache输出phpinfo(),查看date区域它的Default Timezone还是没变。
    Phpinfo的date区域
  2. 在控制台查看php -i | grep zone也还是同样没变
    控制台输出timezone
  3. 核对加载的php.ini文件是否正确并且配置信息格式是否正确

  4. 控制台使用php -a交互模式,调用ini_get('date.timezone'),检查配置的INI是否生效

  全都没有任何问题啊!!!为什么结果却出乎意料呢??百度,谷歌我都问遍了,大家没人出现我这样的情况啊。正当我发愁的时候,小伙伴过来给我支招了。

阅读剩下更多

默认配图
PHP

php上传进度之uploadprogress

我的学习是项目驱动,这次遇到的需求是上传进度条。

注意:此方法仅在Apache下运行PHP时有效,如果您采用FastCGI方式(如:Nginx+fpm),这个不适用!

通过查PHP手册,了解到PHP版本5.4+有一个新特性uploadprogress,也可以说是新扩展吧!

1
2
当 session.upload_progress.enabled INI 选项开启时,PHP 能够在每一个文件上传时监测上传进度。 这个信息对上传请求自身并没有什么帮助,但在文件上传时应用可以发送一个POST请求到终端(例如通过XHR)来检查这个状态
当一个上传在处理中,同时POST一个与INI中设置的session.upload_progress.name同名变量时,上传进度可以在$_SESSION中获得。 当PHP检测到这种POST请求时,它会在$_SESSION中添加一组数据, 索引是 session.upload_progress.prefix 与 session.upload_progress.name连接在一起的值。

将这个扩展启用,需要开启PHP.INI支持:

session.upload_progress.enabled = On
session.upload_progress.cleanup = On
session.upload_progress.prefix = "upload_progress_"
session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS"
session.upload_progress.freq = "1%"
session.upload_progress.min_freq = "1"

  当然,我按照官方的示例操作了N久,就是读不到此类session的值。一开始以为是公司框架的问题,后来自己在本地单独写文件来测试,结果还是一样!

  在网上查找各种此类问题的解决办法,虽说有相同提问的,但是解答问题的人根本就没找到根本的原因。其实很简单:上传的文件Size太小

阅读剩下更多

默认配图
学习笔记

Learning-Markdown

MarkDown的学习

这里面就是一些简单的MarkDown语法,提供给我自己看一下,刚开始还是需要不断练习来接受这种语法,必然能够在码字的过程中体验乐趣!

下面开始啦:

阅读剩下更多

默认配图
杂谈

Hi! Github Pages

时间 事件
2017/01/17 考虑到服务器5个月后到期,无法提供一个月65元的费用(因为性价比),寻求新的方式
2017/01/18 快速学习Hexo与Github Pages,初步学习如此方式的博客
2017/01/19 配置Hexo和域名解析,完成以前的文章的迁移(图片还没找到合适的方法),imsry.cn域名正式使用!

感谢大家的支持与厚爱!

注:dshui.wang暂时并存一段时间,以免部分朋友找不到入口。请大家记住新的地址(www.imsry.cn –对不起.cn/抱歉.cn/我是抱歉.cn)

阅读剩下更多

默认配图
学习笔记

我是如何将mac OS X(10.11.6)的PHP版本升级到5.6.29的


由于项目和学习的需要,本机曾经升级到了5.5.38已经不够折腾了,所以时候升级一波5.6了(没必要到7的时候,我是不会去升级的)。
首先直接去搜索引擎找便捷的方法呗,直接就选中了一款来自“简书”的文章,因为它就简单的一条命令:

1
curl -s http://php-osx.liip.ch/install.sh | bash -s 5.6

看到这个地址,我心里就放心了!因为上一个版本也是liip的。
我首先看了一下这个install.sh的内容,确定没有什么危险,里面其实就是检测一下设备的系统版本和cpu类型是否可以升级。
环境检测没问题就去下载了一个叫做“packager.tgz”的压缩包,然后解压,运行里面的pythony脚本。

1
2
#TYPE = 5.6-10.10
sudo packager.py install $TYPE-frontenddev

阅读剩下更多

默认配图
杂谈

2017年的开篇,居然是这个!

今天一天其实可以说,相~当~累! 因为去了一趟八达岭长城,徒步北长城让我精疲力竭。回来已经晚上9点了,收拾收拾东西,洗漱完。坐着等2017的到来。
然后就干了这么一件事:
20170206148636027922625.png

然后产生的结果是:
20170206148636024291000.png

对于这个,2017年1月1日 00时00分01秒,我露出了无奈的笑容~

阅读剩下更多

默认配图
我的分享

JetBrains家的IDEA真不便宜

先贴出来正版购买链接

JetBrains公司的那些IDE真的是非常的好用,No.1的水准!一直都非常喜欢这家的产品,也难怪价格会稍微贵那么不止一点点了!
IntelliJ IDEA专为Java打造,当然还有为PHP打造的PHPStorm,为javascript打造的WebStorm,为Python打造的PyCharm等等。
不过今天不是来吹嘘JetBrains家的产品的,我是来吐槽自己买不起的事实。[/摊手]

阅读剩下更多

默认配图
数据库

初探MongoDB安全之RBAC(基于角色的访问控制)

写在开头的一段话:我是一名忠实的SQL玩家,虽说MySQL并没有达到精通的级别,但在日常使用中还是会经常出现“这个表要是NoSQL的话就好办多了”的想法。所以说,我认为无论是站在关系型数据库还是非关系性数据库的立场上,二者并不是相对立的,而且我觉得应该用“相辅相成”来形容二者的关系。

通过在《MongoDB 教程|菜鸟教程》轻量级的了解了一下MongoDB的基础知识,我在自己电脑上安装并使用了这款NoSQL软件。很明显地,读别人的教程只能是迅速的、简单的和容易理解的。也正是这样,我发现了其中有一块并没有提及!那就是并没有说要登录数据库啊。

阅读剩下更多

默认配图
算法

实现寻找两个字符串的最大公子串的方法

昨天在做某兔的校招笔试题的时候遇到的题目,就这一个编程题,然而当时却没有拿下,把它和字符串匹配中的子串包含给弄混了,哎!
废话少说,上代码!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
function MaxSubCommonStr($str1,$str2){
$a = str_split($str1); //字符串分割成数组
$b = str_split($str2);
$len1 = strlen($str1); //字符串的长度
$len2 = strlen($str2);
$maxlen = 0; //最大计数器
for($i=0;$i<$len1;$i++){
for($j=0;$j<$len2;$j++){
if($a[$i] == $b[$j]){ //找到第一个相等的字符
$as = $i; //拷贝字符串1的起点
$bs = $j; //拷贝字符串2的起点
$count = 1; //有一个相等的字符了
while ($as + 1 < $len1 && $bs + 1 < $len2 && $a[++$as] == $b[++$bs])
$count++; //往后比较,每匹配一个计数+1,直到其中一个查完或者出现不相等
if($count > $maxlen){ //当本次计数长度大于最大记录时
$maxlen = $count; //更新最大计数长度
$start1 = $i; //更新本次比较的字符串1起点
$start2 = $j; //更新本次比较的字符串2起点
}
}
}
}
return substr($str1,$start1,$maxlen); //直接返回字符串1,从$start1起点往后$maxlen最大匹配长度个数的子串
}

$str1 = 'abcdefgabc';
$str2 = 'defghijabc';
echo MaxSubCommonStr($str1,$str2);
?>

没什么含金量,只是写出来练练手,思路照搬过来的。

阅读剩下更多

默认配图
返回顶部