手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表全部文章

kq_init: detected broken kqueue

升级到macOS了,在使用libevent的时候,报这个错:kq_init: detected broken kqueue,导致代码无法使用。

网上查了一下,可以通过一个简单的设定:export EVENT_NOKQUEUE=1,不知道有没有后遗症!

目前这样已经可以使用了。

Editor.md 上传图片的注意事项

 一般情况下,editor.md的上传图片功能已经够用了,提供了两种方式:本地上传和跨域上传,方式也很简单,跨域上传的话,则需要加callbackUrl的地址。参考:http://www.ipandao.com/editor.md/examples/image-upload.html 和 http://www.ipandao.com/editor.md/examples/image-cross-domain-upload.html。

不过我的问题和上面的不一样,因为我使用了PHP开发框架,那么在正常开发的过程中,表单提交都有csrf的验证。editor.md却没有这个功能,在官方的issue里有人提出了,可以通过设置uploadUrl来加入get参数。

嗯,理论上这样也OK。然而我使用的是YII2,在实际使用中,这个办法无效,原因是:

PHP代码
  1. public function validateCsrfToken($token = null)  
  2. {  
  3.     $method = $this->getMethod();  
  4.     // only validate CSRF token on non-"safe" methods http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.1  
  5.     if (!$this->enableCsrfValidation || in_array($method, ['GET''HEAD''OPTIONS'], true)) {  
  6.         return true;  
  7.     }  
  8.   
  9.     $trueToken = $this->loadCsrfToken();  
  10.   
  11.     if ($token !== null) {  
  12.         return $this->validateCsrfTokenInternal($token$trueToken);  
  13.     } else {  
  14.         return $this->validateCsrfTokenInternal($this->getBodyParam($this->csrfParam), $trueToken)  
  15.             || $this->validateCsrfTokenInternal($this->getCsrfTokenFromHeader(), $trueToken);  
  16.     }  
  17. }  

看最后两个判断,只判断了POST和HEADER中有Csrf的情况,没有判断GET参数里的情况,如果你的项目已经趋向于稳定,不再随便升级Yii的版本,你可以在$this->validateCsrfTokenInternal($this->getBodyParam($this->csrfParam), $trueToken)加一行:

PHP代码
  1. || $this->validateCsrfTokenInternal($this->get($this->csrfParam),$trueToken)  

即,允许从GET参数中获取 csrf的值。

然而,很多时间我们都会手贱去composer update,所以这个方法有点不太敢使用。最终,还是决定修改editor.md的插件,在image-dialog.js中加入几行:

JavaScript代码
  1. if (settings.crossDomainUpload)  
  2. {  
  3.     action += "&callback=" + settings.uploadCallbackURL + "&dialog_id=editormd-image-dialog-" + guid;  
  4. }  
  5. //在上面的if代码后先加入csrfToken的值的获取   
  6. var csrfToken = $('meta[name="csrf-token"]').attr('content');  
  7. var csrfField = "";  
  8. if (csrfToken) {  
  9.    var csrfParam = $('meta[name="csrf-param"]').attr('content');  
  10.    csrfField = "<input type='hidden' name='" + csrfParam + "' value='" + csrfToken + "' />";  
  11. }  

然后在下面的dialogContent里加入csrfField的内容,使之 变成:

JavaScript代码
  1. var dialogContent = ( (settings.imageUpload) ? "<form action=\"" + action +"\" target=\"" + iframeName + "\" method=\"post\" enctype=\"multipart/form-data\" class=\"" + classPrefix + "form\">" : "<div class=\"" + classPrefix + "form\">" ) +  
  2.                         ( (settings.imageUpload) ? "<iframe name=\"" + iframeName + "\" id=\"" + iframeName + "\" guid=\"" + guid + "\"></iframe>" : "" ) +  
  3.                         "<label>" + imageLang.url + "</label>" +  
  4.                         "<input type=\"text\" data-url />" + (function(){  
  5.                             return (settings.imageUpload) ? "<div class=\"" + classPrefix + "file-input\">" +  
  6.                                                                 "<input type=\"file\" name=\"" + classPrefix + "image-file\" accept=\"image/*\" />" +  
  7.                                                                 csrfField +  
  8.                                                                 "<input type=\"submit\" value=\"" + imageLang.uploadButton + "\" />" +  
  9.                                                             "</div>" : "";  
  10.                         })() +  
  11.                         "<br/>" +  
  12.                         "<label>" + imageLang.alt + "</label>" +  
  13.                         "<input type=\"text\" value=\"" + selection + "\" data-alt />" +  
  14.                         "<br/>" +  
  15.                         "<label>" + imageLang.link + "</label>" +  
  16.                         "<input type=\"text\" value=\"http://\" data-link />" +  
  17.                         "<br/>" + csrfField +  
  18.                     ( (settings.imageUpload) ? "</form>" : "</div>");  

注意红字所在地方,其实就加了这个字段而已。再次提交图片上传的时候,不会再报400错误了。

 

 

PhpStorm with Laravel Plugin

有时候,有一个好的IDE其实也没有用的。就象PhpStorm ,明明有Laravel Plugin,但你会发现,你安装了这个插件,在使用Laravel进行开发的时候,还是什么用都没有,仿佛这个插件就象没有安装似的。

确实,如果不是看到官方的介绍,我就真以为这个插件是弄来玩的。

在要使用LaravelPlugin前,你得做好几个准备工作

1、安装 laravel-ide-helper,这是一个 composer 的库:composer require "barryvdh/laravel-ide-helper":"v2.2.0"

2、在config/app.php中加入:Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,

3、重建索引,点击菜单:File | Invalidate Crashes / Restart ...,系统会认为你原来是因为出错而重启,重启后会自动重建索引 

4、artisan clear-compiled 清除编译缓存

5、artisan ide-helper:generate ,会在项目目录下生成一个_ide_helper.php文件。

然后就完成了所有的配置,你在routes.php中输入Route::get('/test','H'); 你会发现:get方法认到了,输入H的时候,会将你所有的H开头的Controller都认出来。而且会自动将其中的方法形成一个列表,方便你引用。

至此,Laravel的整体插件才算完成(如果你需要自动编译less等,还要安装FileWatch插件)

更详细的教程和图文,详看官方:

1、https://blog.jetbrains.com/phpstorm/2015/01/laravel-development-using-phpstorm/

2、https://confluence.jetbrains.com/display/PhpStorm/Laravel+Development+using+PhpStorm

3、https://github.com/koomai/phpstorm-laravel-live-templates

 

 

wordpress 升级遇到问题

升级wordpress的时候遇到:Briefly unavailable for scheduled maintenance. Check back in a minute.

其实解决方法很简单,到wordpress的根目录下。删除 .maintenance 文件即可。
 

linux下vim中文乱码的解决方法

新初装服务器的时候,有时候打开vim后中文是乱码,怎么处理呢?

最简单的办法:
XML/HTML代码
  1. 编辑~/.vimrc文件,加上如下几行:  
  2.   
  3.    set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936  
  4.    set termencoding=utf-8  
  5.    set encoding=utf-8  
OK,重新打开,搞定
 

Tags: vim