易栈网-膘叔

浏览模式: 标准 | 列表 | 图文
How To Install PHP (7.2, 7.1 & 5.6) on Debian 9 Stretch

How To Install PHP (7.2, 7.1 & 5.6) on Debian 9 Stretch

如果你当前不是用root登录的,命令如下:

sudo apt-get install apt-transport-https lsb-release ca-certificates
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
同时,如果你是用root的。那就不需要sudo了!
然后你可以运行:apt-get install php7.2,但如果直接这样运行,其实是会帮你安装php7.2 for apache的组件。如果你不需要,那就:
sudo apt-get install php7.2-cli php7.2-common php7.2-curl php7.2-gd php7.2-json php7.2-mbstring php7.2-mysql php7.2-opcache php7.2-readline php7.2-xml
轻松搞定
一次半手贱的迁移过程

一次半手贱的迁移过程

要说起这个迁移过程,其实时间跨度已经很长了,从头说起吧

1、N年前淘了台二手MAC,250空间,分了两个区,各120G左右 。当时觉得可能也会象windows那装系统,万一崩了,数据还在,于是一个盘就放系统,一个盘放文件,随着时间的流逝,两个盘空间几乎都满了。为什么?微信差不多就20G(如果存聊天记录和文件),一个虚拟机+软件,又是30多G,一个xcode,10G+,几个jetbrains的软件。再加上history的文件,少说也有10几G。然后因为偶尔还插了手机。自动备份就不得了。嗯。还有sleepimage。很快主分区就不够用了,于是开始第二步
(忘了说,还装了一个风暴英雄,7个多G)
2、设置用户目录到另一个分区,结果目录是过去了。文件没过去。然后就再也登录不了。只能选择登录另一个账户root,重新建了一个管理员,并在终端将/Users/xxx目录 rsync到另一分区,再为它设置成原来用户的权限 ,前后折腾了一个上午
3、主分区一下子空出来了。然而,我发现另一个分区却没空间了。。。原因在于,下载各类SDK的时候,默认都是保存在~/Library中。这时候就开始苦逼了,各种调目录路径。总算也是搞定了
4、然后选择了时间胶囊备份(买了innov8),它是typec的头。我擦 我的电脑没有typec,然后各类typec的线都拿过来用了,几乎全部供电不足!所幸,我买原来二手电脑的那年,买了一台乐视手机。他的typec,居然可以供电。这是我唯一可以供电的线(其中:小米不行、锤子不行),然后上官网一看,乐视也不卖这线了。苦逼中
5、这两天又淘了台500G的,想来几年内应该都够用了,然后迁移,这时候才发现我胶囊备份,只备份了主分区。恢复好后,用户是在,但登录不了。只能在原电脑用rsync将数据分区的文件,全部同步到新的电脑。
6、在此期间,登录界面上没有(切换用户功能),只能用cmd+r恢复,然后想着能不能登录,结果 cmd+r只有resetpassword功能。最后参考 网上的教程,用cmd+s登录(参考 我上一篇博客)
7、再将原来的用户目录,mv到/Users目录。(先删除用户,),然后再修改/Applications下的用户权限 ,不少APP的用户组都变成了:501:admin,重新改好权限,退出当前用户(这个用户是步骤6里新建的管理员),登录旧用户,哇。都还在
最后回顾了一下,其实耗时不长
1、胶囊恢复,花了大约2小时(主要是第一次恢复的时候,屏幕一暗,然后没关注它,结果断了,)
2、rsync,我是睡觉的时候弄的。反正早上起床已经好了
3、找资料创建新用户,花了半小时。
4、之后一些乱七八槽 的事情,花了半小时左右
记录完毕
mac 重新创建管理员账号

mac 重新创建管理员账号

由于之前磁盘空间不够,然后我将用户组目录设置到其他分区,最后导致不能登录。。
所以,只能在启动的时候,按住cmd+s,进入单一用户模式。然后运行
1、/sbin/mount -uaw 加载硬盘驱动
2、rm /var/db/.AppleSetupDone,删除配置文件
3、reboot 重启
世界就清静了,会让你重新创建一个用户,就是一个新的管理员,然后你怎么折腾都行
如果用command+r进行登录,可以在终端里运行resetpassword进行密码恢复。这也是一个办法
Safari 11.1: ajax/XHR form submission fails when input[type=file] is empty

Safari 11.1: ajax/XHR form submission fails when input[type=file] is empty

有时候真不知道苹果都在做些什么。。这次safari的更新会导致 form在使用xhr提交的时候,如果表单里有<input type="file" />但没有选择文件,这时候表单就提交失败了,本文的标题就是stackoverflow上面的人提出的问题。
大部分奇技淫巧(或者说奇巧淫技)都是说,如果判断input type=file,如果length==0,即没有选择文件,就先将它disable掉,然后new FormData后,再将它恢复。
原文看这里,提供了两个解决方案,一个是用jquery的,一个是不用的:https://stackoverflow.com/questions/49614091/safari-11-1-ajax-xhr-form-submission-fails-when-inputtype-file-is-empty
用JQuery:
var $form = $('form')
var $inputs = $('input[type="file"]:not([disabled])', $form)
$inputs.each(function(_, input) {
if (input.files.length > 0) return
$(input).prop('disabled', true)
})
var formData = new FormData($form[0])
$inputs.prop('disabled', false)
不用:
var form = document.querySelector('form')
var inputs = form.querySelectorAll('input[type="file"]:not([disabled])')
inputs.forEach(function(input) {
if (input.files.length > 0) return
input.setAttribute('disabled', '')
})
var formData = new FormData(form)
inputs.forEach(function(input) {
input.removeAttribute('disabled')
})
为什么safari还不更新????
更详细 更多的回复,直接看原文吧
“恼羞成怒”与“老羞成怒”的辨析

“恼羞成怒”与“老羞成怒”的辨析

小孩在背书的时候,突然读到了老羞成怒,原以为是小朋友L和N不分,结果一看确实是老羞成怒,google了一下,原来是有下列的解析,原文来自:http://blog.sina.com.cn/s/blog_513bad040100c950.html
钱钟书的《读〈伊索寓言〉》中有句这样的话:“这只乌鸦借来的羽毛全给人家拔个干净,现了原形,老羞成怒……”有学生向我提出,这个“老羞成怒”应写成“恼羞成怒”,是不是这样呢?
《现代汉语成语规范词典》将“恼羞成怒”注解为“由于气恼、羞愧而发怒”,并明示不要写成“老羞成怒”。但在《新编汉语词典》中将两个词语全部并入了语汇条款中,只是“恼羞成怒”一词有注解,而“老羞成怒”一词没有注解。较为详尽的当属《汉语大词典》,它将“恼羞成怒”一词注解为“因烦恼羞愧到了极点而发怒”,将“老羞成怒”一词注解为“因恼恨羞愧而发怒”。并各自有了例句。现各举两例:
恼羞成怒:1、冒得官见他如此说法,不禁恼羞成怒,喝令左右:“替我赶他出去!”(《官场现形记》第三十回)
2、那排长恼羞成怒,拿着枪头的刺刀,向哥哥的手臂上扎了一下。(冰心《去国·斯人独惟悴》)
老羞成怒:1、想因却蔹一事,太激烈了,故此老羞成怒耳。(清·孔尚任《桃花扇》)
2、张志让律师当日为沈老先生的辩护人,不知说了多少直率的话那检察官居然老羞成怒,大发雷霆。(邹韬奋《患难余生记》第一章)
由此可见,两个词语应该是可以通用的。从《现代汉语大词典》(规范用法)“恼羞成怒”注解后的说明:“‘恼羞成怒’也说‘老羞成怒’”中也可说明这一点。
那么这两个词语有没有区别呢?
据《辞海》的解释:“恼”有三个义项:①恨、怒 ②忧愁、苦闷 ③病痛。“恼羞成怒”这个词语很显然用的是第一个义项。据《现代汉语词典》的解释:“老”有十七个义项,其中的第十四个义项是“很、极”。因此,较为正确的解释应当是:
恼羞成怒:因恼恨羞愧而导致发怒。其中““恼”跟“羞”一样是形容词,属于并列结构。
老羞成怒:因羞愧到了极点而发怒。其中“老”属于副词,来修饰“羞”,意思是“极端羞愧”、“很羞愧”。
Yii2自定义组件在phpstorm中识别

Yii2自定义组件在phpstorm中识别

有时候你会在Yii2中自定义一些组件,比如:Yii::$app->sms / Yii::$app->chat / Yii::$app->queue(你看,这个虽然是系统自带的,但不代表就能被认得出)

那怎么办?IDE无法认出的时候,难道我们一个个的写:

<?php
/** @var IM $im */
$im = Yii::$app->im;

如果是这样,那也太累了。翻了一下google,找到这一篇教程:https://github.com/samdark/yii2-cookbook/blob/master/book/ide-autocompletion.md,意思就是说,你自己建一个Yii的文件,创建一些类,然后把刚才的Yii::$app->sms之类的,注释成类的property,然后IDE就能识别了。

最后找到一个项目:https://github.com/iiifx-production/yii2-autocomplete-helper,看样子好象一位俄罗斯大佬写的,嗯,它自动根据你的config来生成一个类似的_ide_components.php,并建议你在IDE里将Yii.php设置为:Mark As Text,这样IDE就不会主动去读Yii.php并识别了。

于是我composer引用了并执行了一下。然后在.gitignore里忽略了_ide_components.php,感觉世界一下子清静多了。

简单用法:

'bootstrap' => ['log', 'autocomplete'],
'components' => [
'autocomplete' => [
'class' => 'iiifx\Yii2\Autocomplete\Component',
'config' => [
'@app/config/console.php', # <-- config list
'@app/config/web.php',
],
],
# ...
]
正式启用https

正式启用https

其实早就该启用了,之前在折腾小菜谱的https的时候发现非常麻烦。现在acme.sh进化了,一步走就完成了

1、acme.sh --issue -d domain.com --nginx 他会自己找配置
2、将生成好的key,copy到指位位置,为了方便,一般都扔到/etc/nginx/ssl目录下
3、修改nginx配置,在指定的hosts下面添加下列内容:
listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/neatstudio.com.cer;
ssl_certificate_key /etc/nginx/ssl/neatstudio.com.key;

ssl_session_cache shared:SSL:20m;
ssl_session_timeout 10m;

ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;

add_header Strict-Transport-Security "max-age=31536000";
因为我是用neatstudio.com来创建的,所以生成的文件也就是neatstudio.com.cer和neatstudio.com.key了
如果你webserver上东西多,你干脆server nginx force-reload。官方说用reload可能不生效。如果你东西少,你就直接restart算了。
打开https://neatstudio.com ,就OK了。
然后再配置一条。如果是http,就跳到https,(当然 我还没有做这个,因为我还有不少资源用了http的)
mac 安装supervisor

mac 安装supervisor

supervisor是一个python写的守护进程程序,如果你不想用xxx.sh & 或者用nohup xxx.sh > xxx & 这样的方式来运行程序,那么用supervisor是最简单的。

在macosx下,安装supervisor实在太简单了(网上的教程都是用pip来安装),对于mac来说,直接brew install supervisor就OK了。

然而装完后,你ps aux|grep supervisor,会发现其实进程不存在。而你用brew services start supervisor,却又提示你服务在运行。我靠这是多么大的一个坑?

其实还算比较简单,直接打开vim ~/Library/LaunchAgents/homebrew.mxcl.supervisor.plist,看看里面的执行文件路径,运行一下就知道了。

果然 就直接报错了!

/usr/local/opt/supervisor/bin/supervisord -n -c /usr/local/etc/supervisord.ini
Error: section [inet_http_server] has no port value
For help, use /usr/local/opt/supervisor/bin/supervisord -h

咦。居然报[inet_http_server] has no port value?怪不得刚才用supervisorctl 的时候报:http://localhost:9001访问被拒绝。于是,修改/usr/local/etc/supervisord.ini,把那个注释掉的9001端口打开,再运行就OK了

cat一下supervisord.ini,会发现最后一行是include /usr/local/etc/supervisor.d/*.ini。这个时候就要注意了。

在其他平台都是加载的.conf,mac上是.ini,所以其他平台的不能直接复制过来就用!当然,这个目录本身也不存在:/usr/local/etc/supervisor.d/,要先mkdir一下。

好了,其他的就不说了。笔记一下,浪费我半小时时间

qcloud使用公钥登录

qcloud使用公钥登录

有时候,你不得不承认,在某些方面,腾讯就是比阿里要好一点点。(只是个人观点)

在使用云服务器的时候,很多时候为了安全,我们都采用了publickey进行登录,但阿里的你就得一个个的建,然后上传。而腾讯就比较方便。你只要copy你的id_rsa.pub里的内容,在管理界面进行上传。然后可以直接导入就OK了。

因此,从这方面来说,T真的比A要方便。

Yii2使用自定义jQuery

Yii2使用自定义jQuery

Yii2自带的jQuery随着版本一次次的更新,其实也都在每次调整,但事实上为了兼容旧版,我们有时候不需要这么新的jquery.js,这时候,怎么办?其实只要用assetManager对jqueryAsset进行一个覆写就行了。

比如这样:
'assetManager'=>[
'bundles' => [
'yii\web\JqueryAsset' => [
'sourcePath' => null,
'basePath' => '@webroot',
'baseUrl' => '@web',
'js' => [
'js/jquery.js',
]
],
],
]
是不是很简单?