解决WordPress标题中数字英文字符串不能自动换行的问题

在发表文章的时候,如果标题中有长串的数字和英文字符,例如文件的路径、注册表路径、下载地址等,通常不能自动换行,从而造成溢出的部分要么延伸到侧边栏中,要么被隐藏,这都是不正常的。如下图所示:
TitleTooLong

解决这个问题的方法就是要在CSS样式表中加入换行控制代码。

操作方法如下:

1.用FireFox中的Firebug查看页面中标题的源代码
EntryTitleSrc
可以看到,Title部分的标题的源代码对应的是entry-title,字体大小为h2

2.修改对应主题的样式表(style.css),以Twenty Fifteen为例,在外观->编辑->style.css,源代码中搜索entry-title可以发现比较多,如下两处:

.entry-title,
.widecolumn h2 {
	font-size: 35px;
	font-size: 3.5rem;
	line-height: 1.2;
	margin-bottom: 1.2em;
}
.entry-title {
    font-size: 26px;
    font-size: 2.6rem;
    line-height: 1.1538;
    margin-bottom: 0.9231em;
}

我们增加word-wrap:break-word;word-break:break-all;告诉浏览器标题超长之后,主动换行,修改后的结果如下所示:

.entry-title,
.widecolumn h2 {
	font-size: 35px;
	font-size: 3.5rem;
	line-height: 1.2;
	margin-bottom: 1.2em;
	word-wrap:break-word;
	word-break:break-all;
}
.entry-title {
    font-size: 26px;
    font-size: 2.6rem;
    line-height: 1.1538;
    margin-bottom: 0.9231em;
    word-wrap:break-word;
    word-break:break-all;
}

如此修改之后,如果使用了WP Super Cache,则需要刷新缓存,如果没有使用WP Super Cache则直接刷新页面就可以了。

修改后的页面如下所示:

word_wrap_break_word

注意,只设置word-wrap:break-word;就可以满足需求,建议同时设置word-break:break-all;,效果会更好一些。

对于手机端来说,标题是h1大小的。使用Chrome查看手机端的网页的源代码是view-source:www.mobibrw.com就可以看到手机网页的源代码了。

解决开启 WP Super Cache 缓存时 WP-Postviews 1.71 不计数的问题

WP Super Cache的缓存插件可以有效地对动态网页进行缓存,降低主机资源的使用率,使得网站更加稳定。但是,这个插件也会导致别的插件工作不正常,比如这个统计访问次数的WP PostViews插件。

说下 WP Super Cache 的原理吧,是把所有的页面转化成静态html,然后再通过30X定向,绕后php直接访问静态html来加速,在有新评论和新文章时会更新缓存,而 WP-Postviews 原理是每次访问给meta加1,启用cache后不调用php文件了,所以自然不会计数。于是插件的作者通过ajax来增加计数。

我们以WP PostViews 1.7.1为例。

在PostViews的设置页面中点击允许使用Ajax进行计数统计,如下图:

PostViewsOptions

然后重新生成下缓存,就OK了。

这时候每次点击的时候后台会更新显示数,但是前台不会更新,下面我们来解决这个问题。

可以通过AJAX和DOM操作来解决。把下面的代码添加到wp-postviews.php文件尾部

function show_postview(){
	$views_options = get_option('views_options');
	$ID = $_POST["bigfa_view"];
	$custom_fields = get_post_custom($ID);
	$my_custom_field = $custom_fields['views'];
	foreach ( $my_custom_field as $key => $value ) {
		echo str_replace('%VIEW_COUNT%', number_format_i18n($value), $views_options['template']);
	}
	die;
}
add_action('wp_ajax_nopriv_show_postview', 'show_postview');
add_action('wp_ajax_show_postview', 'show_postview');

这段添加到postviews-cache.js文件尾部

jQuery(document).ready(function() {
	var ajax_data = {
		action: "show_postview",
		bigfa_view: viewsCacheL10n.post_id
	};
	 
	jQuery.post(viewsCacheL10n.admin_ajax_url, ajax_data,function(data) {
															jQuery('.show-view').html(data);
														});
	return false;
});

默认的调用方法是:

<?php 
	/*View Counter for  wp-postviews*/
	if(function_exists('the_views')) { the_views(); } 
?>

现在替换为

<span class="show-view">
	<?php 
		/*View Counter for  wp-postviews*/
		if(function_exists('the_views')) { the_views(); } 
	?>
</span>

或者

<span class="show-view">loading..</span>

这时候我们发现,文章页是正常计数的而且实时刷新,但是首页还是不行啊,这个没办法了,不过可以通过设置WP Super Cache,不缓存首页,这样就完美解决问题了。

参考链接:


解决开启 WP Super Cache 缓存时 WP-Postviews 不计数的问题

Git常用命令

Git检出使用SSH-KEY认证的服务器上的源代码:(注意,此处SSH-KEY只能使用绝对路径)

$ssh-agent bash -c 'ssh-add /home/longsky/ssh_keys/theuser;git clone git@github.com:TheUser/TheProject.git'

Git提交更改

$git add *
$git commit -m "代码提交信息"

Git提交代码到使用SSH-KEY认证的服务器master分支:(注意,此处SSH-KEY只能使用绝对路径)

$ssh-agent bash -c 'ssh-add /home/longsky/ssh_keys/theuser;git push origin master'

参考链接:


git - 简易指南
specify private SSH-key to use when executing shell command with or without Ruby?

repo如何取消本地改动(How to discard changes using repo)

Android源代码中经常出现同步问题,最常见的就是本地无意修改了某些文件,那么,如何取消掉这些更改呢?

执行如下命令:

$repo forall -vc "git reset --hard"

如果执行完成后,依旧提示某个目录有改动,则切换到有问题的目录,继续执行

$git reset --hard

完成后,删除所有没有增加到Git中的文件即可。

参考链接:
How to discard changes using repo

Ubuntu 15.10 使用Ubuntu Make简化Android开发环境配置

Ubuntu 15.10 中,已经可以使用Ubuntu Make简化Android开发环境配置了,具体方法如下:

1.安装Ubuntu Make

$ sudo apt-get install ubuntu-make

2.配置Android开发环境

$ umake android

然后根据提示,一步一步操作就可以了。

一会之后,就会发现Android Studio已经安装成功了。

就是这么简单!

Windows下创建Ubuntu的USB系统安装盘

要从U盘运行Ubuntu,需要插入一个至少2G空余空间的U盘。使用USB安装器是将Ubuntu安装到U盘最简单的方式,它由 pendrivelinux.com 提供。下载Pen Drive Linux’s USB安装器后,安装并运行。也可本站下载

从下拉选项中选择Ubuntu桌面版本,或者自行用BT、迅雷等软件下载Ubuntu ISO文件。

image-createausbstickonwindows-1

点击“浏览”然后打开已下载的ISO文件。image-createausbstickonwindows-2

选择一个USB驱动器并点击“创建”,注意,U盘里的数据请备份,“创建”过程会格式化U盘。

image-createausbstickonwindows-3

Ubuntu系统本身附带一个小程序Startup Disk Creator,直接制作可启动U盘Ubuntu系统。本站下载

参考链接:


制作Ubuntu USB可启动系统盘解决Windows问题

java.util.concurrent.TimeoutException: com.android.internal.os.BinderInternal$GcWatcher.finalize() timed out after 10 seconds

最近在查看上传到服务器上的应用崩溃信息的时候,发现两个比较奇怪的崩溃栈,如下:

java.util.concurrent.TimeoutException: com.android.internal.os.BinderInternal$GcWatcher.finalize() timed out after 10 seconds
at com.android.org.conscrypt.NativeCrypto.EVP_MD_CTX_destroy(Native Method)
at com.android.org.conscrypt.OpenSSLDigestContext.finalize(OpenSSLDigestContext.java:27)
at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:191)
at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:174)
at java.lang.Thread.run(Thread.java:818)
java.util.concurrent.TimeoutException: com.android.internal.os.BinderInternal$GcWatcher.finalize() timed out after 10 seconds
at java.lang.Daemons$Daemon.isRunning(Daemons.java:79)
at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:171)
at java.lang.Thread.run(Thread.java:818)

百思不得其解,最后在网上查到了貌似可以解释这个现象的原因:

The reason for this timeout can come from two options:
1. A problem in the finalize code - trying to perform complex logic in the native destroy part.
2. CPU/Screen timeouts - the screen will dim and power off, followed by a System deep sleep state. the deep sleep can happen in a Garbage collection run, and when the device wakes up - a timeout can happen.

参考链接:


Wodpress主题底部显示当前网站备案号

后台备案号的设置是从 WP 3.7 开始的,查看网站根目录的 wp-config.php 文件,一般会看到 define('WP_ZH_CN_ICP_NUM', true); 这个定义,这个就是用来添加后台备案号设置的。如果你的 WP 版本在 3.7 以上,而且 wp-config.php 含有define('WP_ZH_CN_ICP_NUM', true);  就可以在后台 设置 - 常规 中看到配置选项。

icp

这个“ICP备案号”仅对WordPress自带主题有效。

如果使用的是第三方WordPress主题,因此不能享受到 WordPress 这个新添加的小功能实在是让人窝火。不过好在你只需要在自己所用的主题的footer.php中添加一行代码,即可让在WordPress 后台添加的ICP备案号显示出来了。

<a href="http://www.beian.miit.gov.cn/" rel="external nofollow" target="_blank">
<?php echo get_option( 'zh_cn_l10n_icp_num' );?>
</a>

如果你不希望链接到工信部网站,只添加下面的代码即可。

<?php echo get_option( 'zh_cn_l10n_icp_num' );?>

注意,由于工信部网站地址发生变动,导致上述操作之后,默认主题无法正常跳转到正确的工信部备案网站地址,需要对跳转地址进行修改具体修改方式请参考 解决WordPress 5.2.3后台ICP备案链接不能跳转到工信部网站(www.miitbeian.gov.cn)的问题

PHP中$_SERVER中的SERVER_NAME和HTTP_HOST的区别

最近在开发站群软件,用到了根据访问域名判断子站点的相关问题。PHP获取当前域名有两个变量 HTTP_HOST 和 SERVER_NAME,我想知道两者的区别以及哪个更加可靠。

首先我想说,百度上那些转来转去的文章都是扯淡!
有说相同的,有说不同的,都没说明原因,没经过验证就互相转来转去的,浪费观众时间。

下面说说本人经过亲自验证 + 查阅官方文档 + 官方BUG列表 + 官方邮件列表 + sitepoint + webmasterworld + google的总结:

相同点:
当满足以下三个条件时,两者会输出相同信息。
1. 服务器为80端口
2. apache的conf中ServerName设置正确
3. HTTP/1.1协议规范

不同点:
1. 通常情况:
_SERVER["HTTP_HOST"] 在HTTP/1.1协议规范下,会根据客户端的HTTP请求输出信息。
_SERVER["SERVER_NAME"] 默认情况下直接输出apache的配置文件httpd.conf中的ServerName值。

2. 当服务器为非80端口时:
_SERVER["HTTP_HOST"] 会输出端口号,例如:mobibrw.com:8080
_SERVER["SERVER_NAME"] 会直接输出ServerName值
因此在这种情况下,可以理解为:HTTP_HOST = SERVER_NAME : SERVER_PORT

3. 当配置文件httpd.conf中的ServerName与HTTP/1.0请求的域名不一致时:
httpd.conf配置如下:

<virtualhost *>
	ServerName mobibrw.com
	ServerAlias www.mobibrw.com
</virtualhost>

客户端访问域名www.mobibrw.com
_SERVER["HTTP_HOST"] 输出 www.mobibrw.com
_SERVER["SERVER_NAME"] 输出 mobibrw.com

所以,在实际程序中,应尽量使用_SERVER["HTTP_HOST"] ,比较保险和可靠。

参考链接:
php $_SERVER中的SERVER_NAME 和HTTP_HOST的区别

Ubuntu 12.04 Apache2重启提示could not reliably determine the server's fully…问题解决

Ubuntu 环境,当apache2重启提示:

* Starting web server apache2
apache2: Could not reliably determine the server's fully qualified domain name,
... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

解决的问题是:

$sudo vim /etc/apache2/sites-available/default

打开default文件后,在default文件顶端(第一行)加入:

ServerName www.mobibrw.com

重启Apache2就不会提示上述错误了。

参考链接
Ubuntu Apache2重启提示could not reliably determine the server’e fully…问题解决