一个极验验证拖垮了我的主机

昨天阿里云主机和百度加速就开始报警,网站多地不能访问,我开始以为是其他网站转载文章造成的,主机流量是有所增大,使用iftop命令查看访问量却为零,没有链接网站的地址出现。

之前在其他网站使用该插件的时候也出现过拖慢网速的情况,花了一天的时间才让我想到可能是这个插件造成的。停止插件后,网站恢复!

Editing Gravity Forms Entries on The Front-End

edit gravity forms on frontend

If you are using WordPress and the Gravity Forms plugin, you might want to allow users to edit their posts or entries on the front-end. This is not supported by the plugin but there are other plugins or addons like Gravity Forms Edit Entries, Gravity Forms Sticky List, Gravity Forms: Post Updates, and GravityView that provide such functionality. But, they also come with other features that you might not want or need and installing more and more plugins can certainly impact performance. Moreover, a few of the plugins that I have tried would create and delete entries in GravityFroms causing missing Entry IDs which isn’t ideal and it is additional work on the system. Today, I will show you how to edit Gravity Forms entries on a page by simply using GF actions, hooks, and the API.

Rewriting frontend and backend validation is a pain so let’s embed a new GF form on a page as it has all the validation in place. We use the function call in a page template file because it allows us to prefill the form using $field_values. You can use a query parameter in the page URL to specify your existing entry ID, pull the contents via GFAPI::get_entry(); and then we use the function call mentioned above and fill the form values with the $field_values parameter.

Submitting this form will create a new entry but we can easily fix that by dropping a conditional in gform_pre_submission action hook which gets run after form validation but before the entry is created and stored in the database. We could hook into page name by using an if statement that checks what page was the form submitted from via $_SERVER[“REDIRECT_URL”]. So, if the page is “create entry”, we continue but if the page is “edit entry”, we look at what has been submitted via $_POST, use the values to update the entry via GFAPI::update_entry(), redirect via PHP header() call and kill the process via die(). The explanation seems long but the code is quite concise.

Here is a code example, and it also shows how to unserialize a Gravity Forms List Field:

<?php
//link on a page to edit an entry: <a href=”http://domain.com/edit-page/?entry=1″>Edit</a>
//page template for “edit-page”
//grab entry id from query parameter in link above
$entry_id=$_GET[entry];
//grab the entry values via the GF API
$entry = GFAPI::get_entry($entry_id);
if ( is_wp_error( $entry ) ) {
echo Error;
} else {
//list field, example how to unserialize
$clist = maybe_unserialize($entry[2]);
$cvalue = iterator_to_array(new RecursiveIteratorIterator(new RecursiveArrayIterator($clist)), FALSE);
//embed new form and populate the form with normal field and list field
gravity_form(1, false, false, false, array(normalfield1=>$entry[1],listfield2=>$entry[2]), true);
}
//function.php – GF action hook – edit isntead of submitting if the request comes from edit-page
add_action(gform_pre_submission_1, pre_submission_handler);
function pre_submission_handler($form){
if($_SERVER[REDIRECT_URL]==“/edit-page/”){
//submitted new values that need to be used to update the original entry via $success = GFAPI::update_entry( $entry );
//var_dump($_POST);
//Get original entry id
parse_str($_SERVER[QUERY_STRING]); //will be stored in $entry
//get the actual entry we want to edit
$editentry = GFAPI::get_entry($entry);
//make changes to it from new values in $_POST, this shows only the first field update
$editentry[1]=$_POST[input_1];
//update it
$updateit = GFAPI::update_entry($editentry);
if ( is_wp_error( $updateit ) ) {
echo Error.;
} else {
//success, so redirect
header(Location: http://domain.com/confirmation/);
}
//dont process and create new entry
die();
} else {
//any other code you want in this hook for regular entry submit
}
}
view rawedit.php hosted with ❤ by GitHub

Linux下目录的合并以及文件的覆盖

Linux下目录的合并以及文件的覆盖案例:

有两个目录test和new,test目录下有目录和文件,new目录下有更改过的一些test下的目录和文件,以及一些新增的文件,现在对两个目录进行合并以及覆盖test下的旧文件

cp -frap new/* test/

命令其实非常简单,解释下:

-f 强制覆盖,不询问yes/no(-i的默认的,即默认为交互模式,询问是否覆盖)

-r 递归复制,包含目录

-a 做一个备份,这里可以不用这个参数,我们可以先备份整个test目录

-p 保持新文件的属性不变

记住一点就是,实现合并和覆盖是用cp,而不是mv。在Win7下我们粘贴某个文件夹时也可以实现合并以及覆盖的功能,并且系统会提示是否覆盖或者两个同名文件都保存。

Windows 上通过 VMware 虚拟机安装 macOS 10.12 Sierra

这是一个安装视频,这是最新预览版本:10.12 Beta版(16A201w)。 2016年6月13日 发布。
本视频将教你你如何在 Windows 系统中通过 VMware 安装 Sierra。 MacOS 10.12 工作相当完美和Siri新功能。按照视频一步一步地安装。

安装视频:

下载链接:
谷歌硬盘 (1 part): https://goo.gl/HMpMgV
谷歌硬盘 (6 part): https://goo.gl/O35HlM
Fix Limit下载: https://goo.gl/JaHI0s

所有工具: https://goo.gl/UPLZC8
VMware Player: https://goo.gl/spT8G6
Winrar: http://goo.gl/PQHT

WordPress非插件使用七牛云存储、又拍云

qiniu-wordpress
以前介绍过使用七牛云加速,自我感觉七牛还是蛮不错的。 当然又拍云也可以啦!

关于七牛云存储的好处我们不多说了,它可以把我们网站的css.js.图片等全部放在七牛进行加速

虽然有免费流量的限制但是小站基本上够用,幻杀使用后感觉速度提升还是很明显的。

幻杀使用的插件,是我爱水煮鱼开发的七牛云存储插件,但是使用P3(点击这里查看)进行检测时,显示居然很坑速度,本来我还是很喜欢插件,但是对速度好吧……我不说了。

嗯,这个方法你可以选择用代码的,当然也可以不用代码的,如果都嫌烦那么还是用插件吧 关于

多方法可以选择性共同使用,记住是选择 !选择哟!记住看最后的评论再选择!

方法1:

把这个插件代码化,这样就不用插件了。 打开你主题文件中的funsion文件(修改有风险,用前需备份)加入以下代码
//将主题自带的 CSS 和 JS 文件替换成七牛镜像存储
define(‘CDN_HOST’,’http://hsdate.qiniudn.com/’);
add_filter(‘stylesheet_directory_uri’,’dw_cdn_stylesheet_directory_uri’,10,3);
function dw_cdn_stylesheet_directory_uri($stylesheet_dir_uri, $stylesheet, $theme_root_uri) {
return str_replace(home_url(), CDN_HOST, $stylesheet_dir_uri);
}
add_filter(‘template_directory_uri’,’dw_cdn_template_directory_uri’,10,3);
function dw_cdn_template_directory_uri($template_dir_uri, $template, $theme_root_uri) {
return str_replace(home_url(), CDN_HOST, $template_dir_uri);

把里面设置的hsdate.qiniudn.com 地址换成你自己申请的加速域名。七牛又拍应该都有吧!

然后保存刷新下后查看下源代码,发现有关js的域名是不是已经被更改了!

当然这个只可以对你的js 和css进行加速,对图片无效!

方法2:

使用上边方法加速效果不好?一般大家站点js css 数量应该没有图片多,最主要还是加速图片吧

使用这个方法图片也是可以加速的。

所以那使用下面的方法就可以将图片也使用七牛云存储了。

就如这个地址:http://ipcmen.com/wp-admin/options.php,然后那找到upload_url_path,使用快捷键 跟方便 别自个凭眼睛慢慢找,你会疯的!

其中 ipcmen.com 要换成你自己个博客地址 如果安装在子目录下 将子目录一块弄进去。

找到后 在那项出 添加 http://hsdate.qiniudn.com/wp-content/uploads,然后保存,其中hsdate.qiniudn.com一样换成你自己的。

这时候我们写一篇文章添加一张图片试试,图片的地址是不是已经变为七牛的地址了呢!

方法2有缺陷:就是说图片直接存在七牛的cdn空间上,这个对于网站空间紧张的用户来说是一个不错的选择

但是对于网站空间很充足的来说就不是很爽了,因为七牛毕竟不是自己的空间,我们不可能吧希望全部放在七牛那边,将来如果更换cdn空间的话这些图片有可能就全部无法使用!

简单的说,就是图片将直接上传至七牛空间而不通过你自己的空间! 图片不会在你的空间储存而是直接储存到了七牛!有利有弊,空间小的高兴,空间足的不高兴!

因为方法2没有备份,如果你有需要更换的话,就选择方法3,图片在本地回自动保留一份!

方法3:

define(‘FocusCDNHost’,’http://ihuan.me’);//wordpress网站网址
define(‘FocusCDNRemote’,’http://hsdate.qiniudn.com’);//cdn域名
define(‘FocusCDNIncludes’,’wp-content,wp-includes’);//设置加速目录,可自行输入
define(‘FocusCDNExcludes’,’.php|.xml|.html|.po|.mo’);//设置文件白名单,一样可自行输入
define(‘FocusCDNRelative’,”);
function do_cdnrewrite_ob_start() {
$rewriter = new FocusCDNRewriteWordpress();
$rewriter->register_as_output_buffer();
}
add_action(‘template_redirect’, ‘do_cdnrewrite_ob_start’);
class FocusCDNRewriteWordpress extends FocusCDNRewrite
{
function __construct() {
$excl_tmp = FocusCDNExcludes;
$excludes = array_map(‘trim’, explode(‘|’, $excl_tmp));
parent::__construct(
FocusCDNHost,
FocusCDNRemote,
FocusCDNIncludes,
$excludes,
!!FocusCDNRelative
);
}
public function register_as_output_buffer() {
if ($this->blog_url != FocusCDNRemote) {
ob_start(array(&$this, ‘rewrite’));
}
}
}
class FocusCDNRewrite {
var $blog_url = null;
var $cdn_url = null;
var $include_dirs = null;
var $excludes = array();
var $rootrelative = false;
function __construct($blog_url, $cdn_url, $include_dirs, array $excludes, $root_relative) {
$this->blog_url = $blog_url;
$this->cdn_url = $cdn_url;
$this->include_dirs = $include_dirs;
$this->excludes = $excludes;
$this->rootrelative = $root_relative;
}
protected function exclude_single(&$match) {
foreach ($this->excludes as $badword) {
if (stristr($match, $badword) != false) {
return true;
}
}
return false;
}
protected function rewrite_single(&$match) {
if ($this->exclude_single($match[0])) {
return $match[0];
} else {
if (!$this->rootrelative || strstr($match[0], $this->blog_url)) {
return str_replace($this->blog_url, $this->cdn_url, $match[0]);
} else {
return $this->cdn_url . $match[0];
}
}
}
protected function include_dirs_to_pattern() {
$input = explode(‘,’, $this->include_dirs);
if ($this->include_dirs == ” || count($input) < 1) { return ‘wp\-content|wp\-includes'; }
else { return implode(‘|’, array_map(‘quotemeta’, array_map(‘trim’, $input))); } }
public function rewrite(&$content) { $dirs = $this->include_dirs_to_pattern();
$regex = ‘#(?<=[(\“\’])'; $regex .= $this->rootrelative
? (‘(?:’.quotemeta($this->blog_url).’)?’)
: quotemeta($this->blog_url);
$regex .= ‘/(?:((?:’.$dirs.’)[^\”\’)]+)|([^/\”\’]+\.[^/\”\’)]+))(?=[\”\’)])#';
return preg_replace_callback($regex, array(&$this, ‘rewrite_single’), $content);
}
}

方法3很高大上,完全可以和插件媲美,准确说和插件差不多了,插件有的他也有,除了七牛那个恶心人的水印木有!

白名单啥的都有了!

根据前面的描述,大体给个使用的说明

方法一,可以只可以加速js css

方法二,可以加速图片等通过上传方式上传的文件,但是缺点是文件没有在本地进行备份而是直接去了七牛!

方法三,可控可存 可以控制文件储存白名单,文件也会在本地有储存!

你可以依据此说明进行一下选择,选择哟,出错咱不管!!!

好了,又可以干掉一个插件,麻麻再也不用怕插件多了!

源文地址:http://ihuan.me/2126.html

Ubuntu 15.10 Wily Werewolf 最终版发布

Ubuntu 15.10 代号 Wily Werewolf,这是最后一个“无聊”的版本更新,该版本仍然采用 Unity 7,这是一个饱受诟病的桌面环境,但很快,我们就要看到一个相当不同的Ubuntu了,尽管官方透露在 Ubuntu 16.04 版本开始尝试 Unity 8 这一具有开创性的桌面系统,但是最终还是要等到 Ubuntu 16.10 才会默认采用 unity 8。

1510-wily-werewolf

 

好了,还是公布一下下载地址。

官方下载地址:

http://releases.ubuntu.com/15.10/

http://releases.ubuntu.com/wily/

国内下载地址:

http://mirrors.ustc.edu.cn/ubuntu-releases/15.10/

其他版本下载地址:

http://cloud-images.ubuntu.com/releases/15.10/ (Ubuntu Cloud Server)
http://cdimage.ubuntu.com/netboot/15.10/ (Ubuntu Netboot)
http://cdimage.ubuntu.com/ubuntu-core/releases/15.10/release/ (Ubuntu Core)

http://cdimage.ubuntu.com/kubuntu/releases/15.10/release/ (Kubuntu)
http://cdimage.ubuntu.com/lubuntu/releases/15.10/release/ (Lubuntu)
http://cdimage.ubuntu.com/ubuntustudio/releases/15.10/release/ (Ubuntu Studio)
http://cdimage.ubuntu.com/ubuntu-gnome/releases/15.10/release/ (Ubuntu GNOME)
http://cdimage.ubuntu.com/ubuntukylin/releases/15.10/release/ (Ubuntu Kylin)
http://cdimage.ubuntu.com/ubuntu-mate/releases/15.10/release/ (Ubuntu MATE)
http://cdimage.ubuntu.com/xubuntu/releases/15.10/release/ (Xubuntu)