php程序报错一开,各种麻烦事都来

页面上本来是专门开启了的。

但是今天发现项目中多个页面用不了,一看,一堆notice出在我的Json前面。

比如说define多了一个wp_debug。

比如说建议我用wp_get_current_user来替换get_current_userinfo,又比如说建议我用严格的方式拿time来替换mktime。

这些东西本来无伤大雅,但是有了它们,json就解析不了。

只好边用边改喽。

我一直觉得用vim直接在服务器端改代码比较酷。

又成了一个没有本地备份的状况,上git吗?觉得太麻烦了。

打洞这种事情其实并不简单

我不过是想在墙上装个架子,没想到这么麻烦。

首先我买了一个冲击钻。

但这货是充电的,电用完必须再充,不能直接接线。

看它提供五个钻头,以为啥事都行。

结果用最大的钻头打完洞才发现,原来买的架子附带的膨胀螺丝比钻头还要粗很多,所以根本进不了洞。

还好家里有塑料的膨胀螺丝,好不容易挤进洞。

架子下方的洞又搞错了。

因为昨天用的另外一个小架子在墙上画了圈圈,本来是想废掉这圈圈来新的,但是同样的水笔在这粉墙上没法再画圈了。画了半天是空的,让我以为原来新圈圈和旧圈圈重合,结果在旧圈圈上打了个洞,装完膨胀螺丝才发现根本就是歪的。

好吧,冒险在附近再打一个,希望不崩。

墙皮是崩了,不过洞还是牢靠的。

剩下另一边的架子,用同样的钻头钻,结果连小一号的塑料膨胀螺丝都进不去。

而且钻完电也没了,只能等它充电。

真无语。

不甘心等,只好各种能钻洞的都上来招呼,可惜腰围合适的只有一个,那就是筷子!但是筷子身上没毛没刺的,没办法把洞再加大了。

怎么办?只好等呗。

早知道先上网买个大号钻头再说。

 

经验:源码安装的时候若要小心修改数据库前缀

有个傻源码,在安装界面上提供了修改表前缀的选项。

然而修改安装完,发现登录不进后台,提示没有XX表。

进数据库一看,果然,前缀还是默认的。

估计是开发者没注意到这个事。

没办法,先把sql文件里的前缀全给替换了,再上传安装,成功。

不过这事也有风险,以后要升级的时候,估计可能会遇到硬编码的错误。

到时候再改?

不放心,先看看目前的源码是怎么写的。

结果一搜索,其实没有硬编码,只不过他在安装的程序中没想到这个事情,你得自己改sql文件,仅此而已。

ssh被尝试暴力破解,只好改端口

一直以来,登录上ssh之后我是不看提示的。

今天登录的时候发现自从上次登录成功之后,居然有7000多次登录失败。

哪个臭流氓搞这个啊。

于是只好改ssh端口。

网上说改完了之后要用/etc/init.d/sshd restart

实际上没用。提示没有这个文件。

一查,确实是没有。

后来通过查进程找到了文件位置,不过试过之后又提示参数不对,也就是说restart是没用的。

然后看到另外一行命令:service sshd restart

这个好使。这种命令好,不涉及到文件路径,比较好记,也比较安全。

毕竟是服务嘛。

然而换台机器却不行了。也不知道是什么鬼。

bootstrap模态框,说简单也不简单

一开始,我以为引用了bootstrap的css文件就万事大吉了。

结果把人家的demo拷来没法用。

为什么呢?因为bootstrap还有个js啊,不然$(‘identifier’).modal()这种东西怎么用?

浏览器一定会说:

bootstrap “modal : is not a function”

当然,这也不是最可笑的,可气的是我也知道要用jquery必须引用jquery,不引用jquery,咱们引用一个zepto也行啊。但是我引用了还是不行。

为什么呢?

因为jquery或者zepto必须在boostrap.js前面引用。

这不是必须的吗?这还用说?

一开始我没想到这个,为什么没想到这个?因为浏览器报错的时候先报$不是个xx,这就让人以为是jquery的cdn不给力,用chrome的source一看,文件已经下载到本地了。

大概是因为boostrap.js里用了$,它用到$的时候,jquery还没加载呢。

特别恶心的是,我之前在调试的时候把preserve log给勾上了(这功能就是会一直把页面跳转之前的东西留着),以至于我修改了引用顺序之后,刷新页面仍然能看到报错,其实这个报错是旧的,丫不消失了而已。

(所以说,牛逼的功能有时候也会搞出麻烦来)

这玩意除了js有问题,其实css也挺复杂,光用个modal样式不行,还得用modal-dialog,还得有modal-content,套三层,里面再用什么header、body、footer装上,少了这些,这个模态框就缺头少脚。

关于页面的逻辑,这里也有问题,模态框默认是你点到框外面的白地,它也会消失掉。

所以bootstrap给了一个隐藏事件,’hidden.bs.modal’,如果想把模态框当成原生confirm来用的话,得往这个事件上绑定一个默认操作。

话说回来,原生confirm挺好用的,为什么非要写一个模态框呢?

原因很简单,手机浏览器发现一个页面反复用confirm或者alert的时候,它会干掉你的取消按钮,代之以关闭本页面,因为它觉得这个页面可能是一个恶意页面,用户要是一害怕,点了那个关闭,页面就真关掉了。

当然,本次的需求是页面初始化的时候就弹提示,你必须确定或取消。所以严格来说,这个反复点的可能性并不大。

但是还有一个问题,让人点确定没啥可说的,让人点“取消”进入某一个路径,这个事情感觉挺别扭的,用户必须认真看清楚提示才知道到底应该点确定还是取消。

自己用一个模态框,可以在主按钮和辅按钮上分别写个各自的功能或者角色,比如“主讲人”是主按钮,用的是蓝色的btn-primary样式,而“观看者”是辅按钮,用的是白色的btn样式。

想想也是挺蛋疼的,就为了做个弹出框,引用了两个js,一个css,写了一堆扯淡的html和js。早知道这样,还不如从哪儿找个diy版本的模态框用用得了。

读读《预见》,掌握打开未来的正确姿势

前一段时间在知乎收到一位编辑的私信,问我有没有兴趣写一篇书评,可以免费寄书给我,我看了一下这本书的介绍,这部书是美国的未来学家Amy Webb的作品,大体上就是讲怎么“预见未来”,感觉很有意思,就同意了。

收到书之后,一天时间就把书看完了,不是因为这本书有多么吸引人,而是因为我已经养成了囫囵吞枣的习惯,这样看完之后,感觉这部书挺乱的。然而当我翻到第三遍的时候,突然觉得这仍然算是一部良心作品,如果你静一下心,会发现,这书确乎是预见未来的“操作指南”。

为了方便大家食用,我先来打几个预防针:

首先书的封面上有两句特别牛逼的推荐语“所谓有眼光,就是站在未来看现在”、“未来是设计出来的”,看到这两句话,让人觉得这作者真是信心满满(其实我也不知道书中有没有出现过这两句话),但是当我把书翻完,丝毫没发现哪儿有“站在未来看现在”的意思,哪儿有“未来是设计出来的”意思,难道只是因为作者自序里讲了一点20年前对今日的预见并引以为自豪?好吧,我得原谅小编,营销是必须的,营销没有过错,酒香确实会害怕巷子深。

再来吐槽一下翻译,翻译上有不少硬得不能再硬的部分,比如作者常用到的一个词“边缘”,乍一看很是莫名其妙,我不是做翻译的,我也没什么解决方案,只能说这个词出现在标题和内容中都非常的令人难以理解。另外,有一些翻译肯定是错误的,书中提到索尼公司拍摄一部电影的成本竟然达到了惊人的4000亿美元,看到这个的时候我都怀疑是不是我看错了。而该书提到世界上的第一部电子游戏,译者把它译成《星际争霸》,这也太轻率了,也许从字面上看,译成“星际争霸”并没有不对,但是但凡译者知道风靡世界几近20年的即时战略大作也叫《星际争霸》,就不应该进行这样误导读者的翻译,而且这对于两个“星际争霸”都是极为不尊重的做法。这些错误,即使可以被读者自己修复,其带来的不适感,也不是那么容易克服的。

最后,我得说,作为一个被碎片化阅读给宠坏的人,我很难接受既没有故事性又纲不举目不张的文字,换句话说,你要么精彩到我不会“出戏”,要么直接给我列出明确的提纲,并让我像读PPT一样读你的文字,否则我是很难忍受长时间阅读的。这本书显然达不到我要求的标准,或许,除了差强人意的翻译,书本身的写法过于“美式”,这也是导致难以阅读另外一个原因;此外,这部书的内容也不能算是全球化的,作为一个未来学者,一个长期关注新技术和IT行业的作者,对于中国这样快速走到互联网创新前列的市场,几乎没有提到。这就很难引起我这种土鳖的共鸣。放5年到10年前,分析互联网世界的趋势无疑都应该看着美国,而今天,不观察观察中国合适吗?

好了,吐槽结束。

说说该书的价值和意义所在。

首先它不是预言书,所以作者并没有立太多flag,为了使自己成为一部合格的操作手册,它提供了简单而有趣的示例,也追溯了索尼的大败局,并说明了边缘做图法(我自己给它取的名字)、密码模式等思维工具,如果我们盯紧关键字,仔细体会一下,会发现它们还是可以令人信服的。最关键的是,它列举了面对未来时最常见的几个问题,比如蜥蜴脑的逃避反应、现时悖论问题,乍一看好像没什么实操意义,但仔细想想,我们面对新潮流时要不犯错是有多难。

当然,若没有场景化的描述,相信很多人难以理解作者提示的未来学的意义,在本书的前几章,作者就讲到了无人机引发的未来的一些变化,发人深思。作者提到,由于无人机需要政府为其规划专用的航道,因而会引发市政规划和建筑形态的变化,产生摩地大楼,在我理解,摩地大楼就是像山一样的建筑,不再像传统大厦一样呈条状,而是又高又大横卧在地面上。哦,其实这个理解是错的,摩地大楼是地下建筑,其意义仍然是减少对天空的占用。其实这不是作者的想像,很多年前就已经有人提出这种城市建筑形态,用于解决城市空间不足交通拥堵的问题,而根据作者的预判,这种形态的建筑最后会因为无人机的大行其道而成为新城市的主要构成者。我想这一定是我们一般人难以想像的。

作者还为我们回顾了一些曾经昙花一现的“梦幻发明”,比如人不动路动的城市交通设施,其实就是载人的传送带(自动人行道moving sidewalk),这个东西我以前小时候就曾经幻想过,不过没想到美国在上个世纪早期就已经实践过,真是令人唏嘘。还有飞行汽车,这个东西为人喜闻乐见,很多公司为之努力,但至今未有较大进展。按照作者的说法,这些是我们预见未来、洞察趋势的干扰项,但是,这些干扰项本身暗示了趋势的存在,从上述案例来看,趋势其实是交通的自动化。

所以,看完这部书,没准你真会知道打开未来的正确姿势:

不要逃避,认真寻找边缘,识别信号(或者说征兆),形成模式,找到变化与自己的关系,抓住机会,避免被昙花一现的潮流所误,获得成功。

这不是剧透,因为关键的内容我也没提,渴求在碎片化阅读中快速得到干货,某种意义上说是饮鸩止渴,所以你还是去读书吧。

作为一个从小想当发明家,长大做了产品经理的屌丝男,正确预见并掌控未来可以说是我的梦想和使命。有人对我说做产品要做大众产品不要做小众产品,我觉得从产品经理的个人发展角度来说,这无疑是一个稳健的策略。但如果想真正地掌控未来,必须从小众做起,因为引领未来的征兆总在边缘出现,边缘就意味着小众,从小众走向大众,就是成功之路。一将功成万骨枯,若不想做骨枯,就不会有机会成为万军上将。

怎样实现wordpress绑定多个域名?

wordpress是不支持多域名的,比如我现在用的www.pmpie.com,实际上我还有一个www.pmbean.com,如果只是域名解析过来,那么只有首页可以是www.pmbean.com,所有链接还是www.pmpie.com。
有些老外想出办法,比如:在wp-config.php中添加:

define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST']);

define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);

通过对WP_SITEURL和WP_HOME的重新定义,当你使用HTTP_HOST也就是域名去访问它时,wordpress内部的机制就会将需要用到访问地址的地方全部修改为当前访问的HTTP_HOST。

但这种方法仅仅是让网站可以被多域名访问,搜索引擎会把另外一个域名识别为镜像网站,从而对网站进行严厉处罚。

于是有人开发了相关的插件,比如:
Multiple Domains with Analytics
MultiDomain
Domain Mirror

它们会针对不同的域名修改的网站标题,替换一些词汇。

但说实话,这种小伎俩,我不敢用,因为搜索引擎太狡猾了,虽然我的网站现在不需要流量,但是天晓得以后有没有什么用呢

网站搬家诸般问题

首先,令人很难堪的是,现在的速度还不如之前外国的服务器。
其次,遇到的毛病也不少。
比如我的微信授权搞不定了。
跑到公众号后台查了半天,也没看出个所以然,毕竟只是网页授权,并不需要什么特别的权限,为了避免出问题,特地把IP加到白名单(事实是之前不加也没事)。
找到原来的代码,一行行看,找到错误提示的那条语句,但是没办法调试。
尝试输出日志,结果lampp的php错误日志我都不知道在哪里。
这时想到还是不要有什么妄想,还是把微信返回open_id的那个url拿到微信里访问试试,结果拿到了open_id和access_token,说明微信那头没出什么问题,而且既然在微信浏览器里可以直接访问,那么说明它肯定也不会对服务器使什么绊子。
所以微信公众号平台的问题已经排除了。
之前想到要么是php的文件函数有问题,要么是json_decode函数有问题。
file_get_contents测试起来有点麻烦,先排除json_decode的问题,查了一下5.2以上版本都是自带json处理函数的,按道理不应该出问题,php -v一查版本号,这机子是5.6版的,必须没问题。
剩下的问题就一定是file_get_contents的问题了。
是什么问题呢?
还是跑到日志文件里看看吧,vim /opt/lampp/logs/php_error_log一查,有这么一句:
failed to open stream: no suitable wrapper could be found in
其实这句根本就是屁,只有把它拿到网上搜一下,结果就出来了,无非就是php.ini中的开关被off了,改一下,一切就好了。
allow_url_fopen = On
allow_url_include = On