Hi,
有钱终成眷属
没钱亲眼目睹

技术文章 第10页

WordPress自定义显示当前日期及问候语

伊阳阅读()

本文最后更新于2021年4月1日,已超过 4 年没有更新,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

这几天在浏览别人网站时,看着别人的网站可以显示当前日期及问候语,感觉很欢莘,想着要不自己也弄一个呗!!! 说弄咱就弄,下面介绍方法及代码。

1、将下面代码保存为date_hello.js。

function show_date_One(){
  var enabled = 0; today = new Date();
  var day; var date;
  if(today.getDay()==0) day = " 周日"
  if(today.getDay()==1) day = " 周一"
  if(today.getDay()==2) day = " 周二"
  if(today.getDay()==3) day = " 周三"
  if(today.getDay()==4) day = " 周四"
  if(today.getDay()==5) day = " 周五"
  if(today.getDay()==6) day = " 周六"
  show_date_week.innerHTML = day;
}
show_date_One();

function show_date_two(){
  today=new Date();
  var day; 
  var date; 
  var hello;
  hour=new Date().getHours();
  if(hour < 6){ 
    hello=' 凌晨好! ';
  }else if(hour < 9){ 
    hello=' 早上好!';
  }else if(hour < 12){ 
    hello=' 上午好!';
  }else if(hour < 14){ 
    hello=' 中午好! ';
  }else if(hour < 17){ 
    hello=' 下午好! ';
  }else if(hour < 19){ 
    hello=' 傍晚好!';
  }else if(hour < 22){ 
    hello=' 晚上好! ';
  }else{ 
    hello='夜深了! ';
  }
function GetCookie(sName) { 
  var arr = document.cookie.match(new RegExp("(^| )"+sName+"=([^;]*)(;|$)")); if(arr !=null){return unescape(arr[2])}; 
  return null;
}
  var Guest_Name = decodeURIComponent(GetCookie('author'));
  var webUrl = webUrl;if (Guest_Name != "null" ){ hello = Guest_Name+' , '+hello+' 欢迎回来。';
}
show_date_hello.innerHTML = ' '+hello;}
show_date_two();

2、在需要显示的位置加入一下代码:

<span id=show_date_week></span><span id=show_date_hello></span>

3、在之前加入下列代码。

<script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/js/date_hello.js" charset="UTF-8"></script>

js路径自己根据实际情况修改。
到此,基本上搞完了,至于css样式,自己看着改吧,这里就不多说了。

WordPress纯代码实现“返回顶部、返回底部、评论”效果

伊阳阅读()

本文最后更新于2021年4月1日,已超过 4 年没有更新,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

搞了个网站,由于主题没有自带返回顶部按钮,那只能自己动手了,这类的第三方插件非常多,但是我认为能用代码实现的就不要用插件,插件越多拖慢网站速度那是必须的。

在网上找到一种代码方法,非常简单,效果如下,下面就分享一下吧:

效果



1、下载图标图片上传到主题目录下的images文件夹下:点击下载(密码为chyiyang,图片是白色透明的哦~)
2、首先编辑主题目录下的footer.php文件,在 <\/body><\/html>代码之前添加以下的代码:

<div id="sticky-nav">
    <a class="gotop" onclick="window.scrollTo(0,0);return false;" href="#top">
       <span>返回顶部</span>
    </a> 
    <a class="about" href="http://www.heminjie.com/" target="_blank" rel="noopener noreferrer">
       <span>关于我们</span>
    </a> 
    <?php if ( is_singular() && comments_open() ) { ?>
    <a class="gocom" onclick="document.getElementById('comment').focus();return false;" href="#respond">
       <span>发表评论</span></a>
    <?php } ?>
    <a class="bianlan" <span><span class="close-sidebar">隐藏侧边</span></span>
       <span class="show-sidebar" style="display:none;">显示侧边</span>
    </a>
    <a class="gobtm" onclick="window.scrollTo(0,document.body.scrollHeight);return false;" href="#colophon">
       <span>前往底部</span>
    </a>
</div>

3、再编辑主题目录下的style.css文件,在最后面添加如下的代码,给其增加样式:

#sticky-nav {-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;position:fixed;right:0px;bottom: 5%;
	z-index: 9999;width:30px;_position:absolute;_top:expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight/2-this.offsetHeight/2))}
#sticky-nav a:hover { right:56px;}
#sticky-nav a {background:url(images/sideTools.png) no-repeat;width:30px;height:30px;display:block;-webkit-border-top-left-radius:3px;-moz-border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-bottom-left-radius:3px;border-top-left-radius: 3px;border-bottom-left-radius: 3px;position:relative;text-decoration:none;}
#sticky-nav span {background:#333;-webkit-border-top-right-radius:3px;-moz-border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-bottom-right-radius:3px;	border-top-right-radius:3px;border-bottom-right-radius:3px;font-size:12px;position:absolute;right: -56px;padding:6.5px 4px;color:#fff;}
#sticky-nav a:hover {overflow:visible;}
#sticky-nav a:hover span {-webkit-transform:translate(0,0);-moz-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);	transform:translate(0,0);opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity =100)";filter:alpha(opacity=100)}
#sticky-nav span:before,#sticky-nav span:after {content:'';display:block;width:0;height:0; }
#sticky-nav span:before {border-left-color:#ccc;right:-8px;}
#sticky-nav a.gotop {background-position: -3px -3px;background-color: #333;margin-bottom: 5px;}
#sticky-nav a.gobtm {background-position: -4px -186px;background-color: #333;}
#sticky-nav a.gocom {background-position: -4px -150px;background-color: #333;margin-bottom: 5px;}
#sticky-nav a.bianlan {	background-position: -3px -77px;background-color: #333;	margin-bottom: 5px;}
.close-sidebar {cursor:pointer;}
.show-sidebar {	cursor:pointer;}
#sticky-nav a.about {background-position: -3px -40px;background-color: #333;margin-bottom: 5px;}

## 上面第一部分代码中定义了5个按钮,返回顶部、关于我们、评论、隐藏/显示侧边栏、返回顶部,如果不想要“隐藏/显示侧边栏”按钮,可直接删除第一部分中的下面一段代码:

<a class="bianlan">
   <span class="close-sidebar">隐藏侧边</span>
   <span class="show-sidebar" style="display:none;">显示侧边</span>
</a>

如果不需要“关于我们”可删除下面代码:

<a class="about" href="http://www.heminjie.com/" target="_blank" rel="noopener noreferrer">
   <span>关于我们</span>
</a>

且不需要往下看教程了,刷新页面,已经有效果了吧~
增加“关闭/显示侧边栏”按钮的js控制文件:
1、请复制以下代码另存为all.js,上传到网站FTP中:
注意:下面js代码中那个宽度两个width值需要相应修改,1280px是整个网站的宽度,900px是文章主体的宽度。

jQuery(document).ready(function($){ 
   $('.close-sidebar').click(function() {  //点击class=“close-sidebar”的对象,即导航中“关闭侧边栏”时 
   $('.close-sidebar,.sidebar').hide();       //隐藏class=“close-sidebar”和“sidebar”的对象,即导航中“关闭侧边栏”和主题的“侧边栏” 
   $('.show-sidebar').show();     //显示class=“show-sidebar”的对象,即导航中“显示侧边栏” 
   $('.content').animate({width: "1280px"}, 0); }); //“文章主体部分”的宽度增加到1280px 
   $('.show-sidebar').click(function() {  //点击导航中“显示侧边栏”时 
   $('.show-sidebar').hide();             //隐藏导航中“显示侧边栏” 
   $('.close-sidebar,.sidebar').show();        //显示导航中“关闭侧边栏”和主题的“侧边栏” 
   $('.content').animate({width: "900px"}, 0);});    //“文章主体部分”的宽度收缩回900px
});

2、编辑主题目录下的footer.php文件,在 代码之前添加以下的代码(载入all.js):

<script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/js/all.js"></script>

到这里就结束了,都搞好后,ctrl+f5刷新下网站看看效果哦,可能不同的wp主题css样式都不太相同,如果有样式有偏差,就需要微微调整css样式了~

原文标题:WordPress纯代码实现“返回顶部、返回底部、评论”效果
原文地址:http://www.heminjie.com/wordpress/2229.html

WordPress侧边栏调用带Gravatar头像的最新评论的方法

伊阳阅读()

我本人最近迷上了WordPress,在浏览他人的站点时,看到侧边栏显示最新评论的效果,很是喜欢。但是本人代码又不会写,只能是在别人代码基础上进行修改(博主我是爱瞎折腾性的)。网上找了好久,终于给找到了两种实现方法,下面就说说如何使用。

方法一、

1、在主题的 functions.php 的最后一个 ?> 前面添加下面的代码:


//边栏评论
function h_comments($outer,$limit){
    global $wpdb;
    $sql = "SELECT DISTINCT ID, post_title, post_password, comment_ID, comment_post_ID, comment_author, comment_date_gmt, comment_approved, comment_type,comment_author_url,comment_author_email, SUBSTRING(comment_content,1,22) AS com_excerpt FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID = $wpdb->posts.ID) WHERE comment_approved = '1' AND comment_type = '' AND post_password = '' AND user_id='0' AND comment_author != '$outer' ORDER BY comment_date_gmt DESC LIMIT $limit";
    $comments = $wpdb->get_results($sql);
    foreach ($comments as $comment) {
        $output .= '<li>'.get_avatar( $comment, 32,"",$comment->comment_author).' <p class="s_r"><a href="'. get_permalink($comment->ID) .'#comment-' . $comment->comment_ID . '" title="《'.$comment->post_title . '》上的评论"><span class="s_name">'.strip_tags($comment->comment_author).':</span><span class="s_desc">'. strip_tags($comment->com_excerpt).'</span></a></p></li>';
    }
    $output = convert_smilies($output);
    echo $output;
}

2、在主题的 sidebar.php 文件使用下面的调用代码即可:


<h3>最新评论</h3>
<div id="comment-list">
     <ul>
	<?php h_comments($outer='博主',$limit='10'); ?>
     </ul>
</div>

注:$outer 后面应填写博主的昵称,这样可以使博主的评论不在边栏评论中显示;$limit 后面填写的是调用数量,10表示10条。
到这里就基本搞定了,剩下的就是根据自己的主题来修改CSS样式即可。
下面的CSS可根据自己网站样式进行修改:


#comment-list{width:280px;}
#comment-list li{height:40px;border-bottom:1px dashed #eee;padding:8px 0;}
#comment-list li a{display:inline;width:280px;height:40px;cursor:pointer;}
#comment-list .avatar{float:left;width:32px;height:32px;border:1px dashed #eee;padding:2px;}
#comment-list .s_r{float:left;margin-left:5px;height:40px;}
#comment-list .s_name{display:block;overflow:hidden;width:222px;height:20px;text-overflow:ellipsis;white-space:nowrap;font-size:14px;}
#comment-list .s_desc{display:block;overflow:hidden;width:222px;height:20px;color:#999;text-overflow:ellipsis;white-space:nowrap;line-height:20px;}
方法二、

1、新建一个r_comment.php,并复制下列代码:


<?php if (get_option('swt_type') == 'Display') { ?>
<div class="r_comment">
  <ul>
    <?php
       global $wpdb;
       $my_email = get_bloginfo ('admin_email');
       $sql = "SELECT DISTINCT ID, post_title, post_password, comment_ID, comment_post_ID, comment_author, comment_date_gmt, comment_approved, comment_type,comment_author_url,comment_author_email, SUBSTRING(comment_content,1,50) AS com_excerpt FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID = $wpdb->posts.ID) WHERE comment_approved = '1' AND comment_type = '' AND post_password = '' AND comment_author_email != '$my_email' ORDER BY comment_date_gmt DESC LIMIT 10";
       $comments = $wpdb->get_results($sql);
       $output = $pre_HTML;
       foreach ($comments as $comment) {
       $a= get_bloginfo('wpurl') .'/avatar/'.md5(strtolower($comment->comment_author_email)).'.jpg';
       $output .= "\n<li><img src='". $a ."'  alt=\".$comment->comment_author." class='avatar'/>$comment->comment_author:<br /><a href=\"" . get_permalink($comment->ID) ."#comment-" . $comment->comment_ID . "\" title=\"查看: " .$comment->post_title . "\">" . strip_tags($comment->com_excerpt)."</a></li>";
       }
       $output .= $post_HTML;
       $output = convert_smilies($output);
       echo $output;
    ?> 
  </ul>
</div>
    <?php { echo ''; } ?>
        <?php } else { include(TEMPLATEPATH . '/includes/r_comment2.php'); } ?>

2、再新建一个r_comment2.php,然后复制下列代码并保存:


<div class="r_comment">
  <ul>
    <?php
       global $wpdb;
       $my_email = get_bloginfo ('admin_email');
       $sql = "SELECT DISTINCT ID, post_title, post_password, comment_ID, comment_post_ID, comment_author, comment_date_gmt, comment_approved, comment_type,comment_author_url,comment_author_email, SUBSTRING(comment_content,1,50) AS com_excerpt FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID = $wpdb->posts.ID) WHERE comment_approved = '1' AND comment_type = '' AND post_password = '' AND comment_author_email != '$my_email' ORDER BY comment_date_gmt DESC LIMIT 10";
       $comments = $wpdb->get_results($sql);
       $output = $pre_HTML;
       foreach ($comments as $comment) {
       $output .= '<li>'.get_avatar(get_comment_author_email(), 40).strip_tags($comment->comment_author).':<br />' . ' <a href="'. get_permalink($comment->ID) .'#comment-'. $comment->comment_ID . '\" title="查看: ' .$comment->post_title . '\">' . strip_tags($comment->com_excerpt).'</a></li>';}
       $output .= $post_HTML;
       $output = convert_smilies($output);
       echo $output;
    ?> 
  </ul>
</div>

3、在当前主题目录下新建一个includes的文件夹,并将r_comment.php和r_comment2.php上传至该文件夹内。
4、在主题的sidebar.php 文件使用下面的调用代码即可:


<h3>最新评论</h3>
<?php include('includes/r_comment.php'); ?>

5、到此基本上搞定了,下面附上该CSS代码,可根据自己网站情况进行修改:


.r_comment {}
.r_comment ul {list-style-type:none;}
.r_comment li {font-family:Microsoft YaHei;line-height:24px; clear:both;height:auto; overflow:hidden;color:#5bc0eb;font-size:14px;}
.r_comment ul li img.avatar {float:left;padding:3px;margin:3px 4px 0 0;background:#fff;border: 1px solid #ddd;border-radius:50%;width:40px;height:40px;}
.r_comment_author{font-size:14px;margin:0;padding:0;color:#5bc0eb;}
.r_comment a{font-family:Microsoft YaHei;font-size:16px;}

好了,侧边栏实现最新评论显示的两种方法就介绍完了,上面两种方法我都试过,可以实现。其中方法一取自Wordpress大学的《WordPress边栏调用带Gravatar头像的最新评论》,在此表示感谢!!方法二,本人再次找的话,又找不见了,如日后本人再次看到时,一定附上链接。

WordPress鼠标点击文字特效教程

伊阳阅读()

本文最后更新于2021年4月1日,已超过 4 年没有更新,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

最近,我给网站添加了鼠标点击特效,用鼠标点击页面会显示文字,其中文字可以自己定义。代码如下:

<script type="text/javascript"> 
/* 鼠标特效 */
var a_idx = 0; 
jQuery(document).ready(function($) { 
    $("body").click(function(e) { 
        var a = new Array("富强", "民主", "文明", "和谐", "自由", "平等", "公正" ,"法治", "爱国", "敬业", "诚信", "友善"); 
        var $i = $("<span/>").text(a[a_idx]); 
        a_idx = (a_idx + 1) % a.length; 
        var x = e.pageX, 
        y = e.pageY; 
        $i.css({ 
            "z-index": 999999999999999999999999999999999999999999999999999999999999999999999, 
            "top": y - 20, 
            "left": x, 
            "position": "absolute", 
            "font-weight": "bold", 
            "color": "#ff6651" 
        }); 
        $("body").append($i); 
        $i.animate({ 
            "top": y - 180, 
            "opacity": 0 
        }, 
        1500, 
        function() { 
            $i.remove(); 
        }); 
    }); 
}); 
</script>

WordPress文章中添加上一篇、下一篇链接

伊阳阅读()

本文最后更新于2021年4月1日,已超过 4 年没有更新,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

最近,我给博客Single.php页面中添加了上一篇、下一篇链接功能,代码如下:

<?php previous_post_link('上一篇: %link') ?>
<?php next_post_link('下一篇: %link') ?>

但当出现没有上一篇或者下一篇时,就会显示空白,比较难看。然后呢,就对代码进行了优化。变成当出现没有上一篇或者下一篇时,就会显示一句话,如:


代码如下:

<?php if (get_previous_post()) { previous_post_link('上一篇: %link');} else {echo "没有了,已经是最后文章";} ?>
<?php if (get_next_post()) { next_post_link('下一篇: %link');} else {echo "没有了,已经是最新文章";} ?>

至于css,可自己进行修改。

WordPress修改后台登陆地址

伊阳阅读()

本文最后更新于2021年4月1日,已超过 4 年没有更新,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

本篇主要是讲如何对wordpress后台地址进行修改的几种方法,供大家使用和参考,wordpress程序的默认登陆地址链接为http://xxx.com/wp-login.php。但为了保障网站安全性,可以修改wordpress登陆文章的名称wp-login.php后缀来防止密码被暴力破解。下面我们通过下列几种方法来修改后台的默认地址,以提高网站安全性。

方法一、wordpress后台登陆地址修改方法之登陆文章重命名

1、修改wordpress程序网站根目录下wp-login.php的文件名,修改为houtai.php(其它任意名称都可以),并将该文件houtai.php中出现的字符wp-login.php全部改为houtai.php;
2、找到根目录下的wp-includes/general-template.php文件,除代码第238行

$login_url = site_url('wp-login.php', 'login');

不要修改外,该文件内的其他字符wp-login.php均替换为houtai.php,注意完成修改后需要覆盖原文件并保存!

同时,为了保障我们的网站更加安全,我们也可以使用 Limit Login Attempts, 安装并启用该插件后不需要做其他特别设置。当连续登陆失败,插件会临时屏蔽登陆 IP 地址。

方法二、wordpress后台登陆地址修改方法之主题函数代码法

1、打开当前使用的WordPress主题中的functions.php文件,在末尾?>加上代码:

//保护后台登录 
function login_protection(){
if($_GET['master'] != 'hello')header('Location: http://www.xxx.xxx/');
}
add_action('login_enqueue_scripts','login_protection');

1 其中“master(标记信息)”、“hello(标记信息)”和“XXX.XXX(网址)”都可以自定义。
2 URL是区分大小写字母的,所以设置标记信息时大小写字母和数字都可以使用(参见: HTML and URLs )。
3 由于URL编码中特殊字符一般都有专用含义,所以如果标记信息中使用了特殊字符需要确认一下是否能正常登陆。

2、保存并退出。

这样WordPress后台的登陆地址就变成了:

http://www.xxx.xxx/wp-login.php?master=hello
方法三、wordpress后台登陆地址修改方法之登陆文件代码法

打开wordpress根目录找到wp-login.php文件用编辑器打开在55行左右找到如下代码

if ( $shake_error_codes && $wp_error->get_error_code() && in_array( $wp_error->get_error_code(), $shake_error_codes ) )
add_action( 'login_head', 'wp_shake_js', 12 ); 
//在其代码之下加上一段代码 
if($_GET["qq"]!="332106247"){ header('Location:/404 '); }

Linux查看和设置主机名

伊阳阅读()

本文最后更新于2021年2月9日,已超过 4 年没有更新,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

1、设置主机名
通过编辑/etc/sysconfig/network文件中的HOSTNAME字段就可以修改主机名。如下所示:
[root@cyy~]# vim /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=cyy
HOSTNAME=cyy 表示主机设置为 cyy.
注意:修改主机名后,需要重启系统后生效。
2、查看主机名
[root@cyy~]# hostname
cyy
技巧:两个简单的命令可以临时设置主机名。
(1). 使用sysctl命令修改内核参数,格式:sysctl kernel.hostname=主机名,如下。
[root@cyy~]# sysctl kernel.hostname=newname
kernel.hostname=newname newname为新设置的主机名
(2). 使用hostname命令设置主机名。格式为:hostname 主机名,如下。
[root@cyy~]# hostname newname
该设置为临时生效。重新启动系统后,设置失效。

hostname命令的使用:

hostname
-s, –short short host name
-a, –alias alias names
-i, –ip-address addresses for the host name
-f, –fqdn, –long long host name (FQDN)
-d, –domain DNS domain name
-y, –yp, –nis NIS/YP domain name
-F, –file read host name or NIS domain name from given file

 

PHP优化加速:CentOS 7.4 开启 Zend Opcache

伊阳阅读()

本文最后更新于2021年4月1日,已超过 4 年没有更新,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

继上次安装完nextcloud后,但在设置概述里面的安全及设置警告里一直显示:

  • The PHP OPcache module is not loaded.For better performance it is recommended to load it into your PHP installation.

大致意思是OPcache没有加载。通过用命令:php -v查看

PHP 7.2.11 (cli) (built: Oct 11 2018 19:14:35) (NTS)
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

OPcache没有安装。之后通过度娘找到了一种方法,就是先下载—解压—编译—配置,但当进行到编译时,报错,提示大概是说“zend_unit”错误。之后试了几次都不成功。
就在快要疯掉的时候,无意搜到到一篇《php5.6安装zendopcache加速》的文章,根据里面的内容进行了一些修改,OPcache最终安装成功。在此写下相关的步骤:

1、安装 Remi 源

安装最新的 Remi 源自动安装文件

#CentOS 7 yum install?http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

2、编辑Remi 源配置文件

vim /etc/yum.repos.d/remi.repo 修改以下

[remi]

修改 enabled=0enabled=1

结尾另起一行添加下面的代码:

priority=3

更新yum缓存:

#CentOS 7 yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

3、安装 Zend Opcache(pecl版本):

yum install php72w-pecl-zendopcache

需要说明的是php为7.2对应php72w-peclzendopcache,总之与php版本对应
4、上面步骤完成后,查看/etc/php.d里面是否产生下面两个文件:

opcache-default.blacklist
opcache.ini

5、用php -v查看opcache是否安装成功:

PHP 7.2.11 (cli) (built: Oct 11 2018 19:14:35) (NTS)
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.11, Copyright (c) 1999-2018, by Zend Technologies   //提示安装成功

6、用vi /etc/php.d/opcache.ini命令打开,安装下面的配置进行修改:

opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

Linux、Nginx、MariaDB环境下部署Nextcloud14的过程

伊阳阅读()

前几天,脑子一抽买了阿里云ECS后,一直有点后悔,但已经买了,也退不掉。所以这几天一直在想着装个什么,不能浪费啊!!!最后思来想去,决定要不装个私有云盘玩玩。网上的私有云盘有SeaFile、Owncloud、Nextcloud这三个主要的。通过综合比较,SeaFile不免费,Owncloud与Nextcloud原是一家,最终决定那就先装Nextcloud吧。既然决定了,那就不能闲着,说干就干!!

本此主要在CentOS7.4下安装和配置最新版本的 Nextcloud 14,并且会通过 Nginx 和 PHP7.2-FPM 来运行 Nextcloud,同时使用 MariaDB 做为数据库系统。
阿里云ECS的系统是Centos7.4版本


[root@chyiyanghost~]#cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
一、安装并配置Nginx和php7.2-fpm

将自带的epel、nginx、php全部卸载(rpm -e … –nodeps)


[root@chyiyanghost~]#rpm -qa|grep php
[root@chyiyanghost~]#rpm -qa|grep php-common
[root@chyiyanghost~]#rpm -qa|grep nginx

CentOS默认的yum源中并不包含Nginx和php-fpm,首先要为CentOS添加epel源:


[root@chyiyanghost~]#yum -y install epel-release
[root@chyiyanghost~]#yum -y install nginx

需要再添加一个yum源来安装php-fpm,可以使用webtatic


[root@chyiyanghost~]#rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

安装php7.2-fpm和一些其它的必要的组件


[root@chyiyanghost~]#yum -y install php72w-fpm php72w-cli php72w-gd php72w-mcrypt php72w-mysql php72w-pear php72w-xml php72w-mbstring php72w-pdo php72w-json php72w-pecl-apcu php72w-pecl-apcu-devel

需要说明的是php72为php7.2,如果要装php7.1就改为php71,php7.0就是php70
完成后,检查一下php-fpm是否已正常安装


[root@chyiyanghost~]#php -v
PHP 7.2.11 (cli) (built: Oct 11 2018 19:14:35) (NTS)
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

配置php-fpm


root@chyiyanghost~]#vim /etc/php-fpm.d/www.conf
.....
user = nginx      //将用户和组都改为nginx
group = nginx
.....
listen = 127.0.0.1:9000     //php-fpm所监听的端口为9000
......
env[HOSTNAME] = $HOSTNAME      //去掉下面几行注释
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

按ESC,输入wq!保存退出。
在/var/lib目录下为session路径创建一个新的文件夹,并将用户名和组设为nginx


[root@chyiyanghost~]#mkdir -p /var/lib/php/session
[root@chyiyanghost~]#chown nginx:nginx -R /var/lib/php/session/
[root@chyiyanghost~]#ll -d /var/lib/php/session/
drwxr-xr-x 2 nginx nginx 4096 Nov 1 12:23 /var/lib/php/session/

启动Nginx和php-fpm服务,并添加开机启动


[root@chyiyanghost~]#systemctl start php-fpm
[root@chyiyanghost~]#systemctl start nginx
[root@chyiyanghost~]#systemctl enable php-fpm
Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service. //提示成功信息
[root@chyiyanghost~]#systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.     //提示成功信息
二、安装并配置MariaDB

使用MaraiDB作为Nextcloud数据库。yum安装MaraiDB服务


[root@chyiyanghost~]#yum -y install mariadb mariadb-server

启动MariaDB服务并添加开机启动


[root@chyiyanghost~]#systemctl start mariadb
[root@chyiyanghost~]#systemctl enable mariadb
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.  //提示信息

接下来设置MariaDB的root密码


[root@chyiyanghost~]#mysql_secure_installation     //按照提示设置密码,首先会询问当前密码,密码默认为空,直接回车即可
Enter current password for root (enter for none):       //直接回车
Set root password?[Y/n]Y
New password:         //输入新密码
Re-enter new password:        //再次输入新密码
Remove anonymous users?[Y/n]Y
Disallow root login remotely?[Y/n]Y
Remove test database and access to it?[Y/n]Y
Reload privilege tables now?[Y/n]Y

设置完MariaDB的密码后,使用命令行登录MariaDB,并为Nextcloud创建相应的用户和数据库。
例如数据库为nextcloud_db,用户为nextclouduser,密码为nextcloudpasswd:


[root@chyiyanghost~]#mysql -p
......
MariaDB [(none)]&gt;create database nextcloud_db;
Query OK, 1 row affected (0.00sec)
MariaDB [(none)]&gt;create user nextclouduser@localhost identified by'nextcloudpasswd';
Query OK, 0 rows affected (0.00sec)
MariaDB [(none)]&gt;grant all privileges on nextcloud_db.* to nextclouduser@localhost identified by'nextcloudpasswd';
Query OK, 0 rows affected (0.00sec)
MariaDB [(none)]&gt;flush privileges;
Query OK, 0 rows affected (0.00sec)
MariaDB [(none)]&gt;exit
Bye
三、为Nextcloud生成自签名SSL证书

为SSL证书创建一个新的文件夹:


[root@chyiyanghost~]#mkdir -p /etc/nginx/cert/
[root@chyiyanghost~]#cd /etc/nginx/cert/
[root@chyiyanghost cert]#openssl req -new -x509 -days 365 -nodes -out /etc/nginx/cert/nextcloud.crt -keyout /etc/nginx/cert/nextcloud.key
.....
Country Name (2 letter code) [XX]:cn                                           //国家
State or Province Name (full name) []:shaanxi                                  //省份
Locality Name (eg, city) [Default City]:shaanxi                                //地区名字
Organization Name (eg, company) [Default Company Ltd]:chyiyang                 //公司名
Organizational Unit Name (eg, section) []:Technology                           //部门
Common Name (eg, your name or your server's hostname) []:chyiyang              //CA主机名
Email Address []:330601425@qq.com

然后将证书文件的权限设置为660


[root@chyiyanghost cert]#chmod 700 /etc/nginx/cert
[root@chyiyanghost cert]#chmod 600 /etc/nginx/cert/*
四、下载并安装Nextcloud

[root@chyiyanghost~]#yum -y install wget unzip
[root@chyiyanghost~]#cd /usr/local/src/
[root@chyiyanghost src]#wget https://download.nextcloud.com/server/releases/nextcloud-14.0.3.zip
[root@chyiyanghost src]#unzip nextcloud-14.0.3.zip
[root@nextcloud-server src]#ls
nextcloud nextcloud-14.0.3.zip
[root@chyiyanghost src]#mv nextcloud /usr/share/nginx/html/

进入Nginx的root目录,并为Nextcloud创建data目录,将Nextcloud的用户和组修改为nginx


[root@chyiyanghost src]#mv nextcloud /usr/share/nginx/html/
[root@chyiyanghost src]#cd /usr/share/nginx/html/
[root@chyiyanghost html]#mkdir -p nextcloud/data/
[root@chyiyanghost html]#chown nginx:nginx -R nextcloud/
[root@chyiyanghost html]#ll -d nextcloud
drwxr-xr-x 15 nginx nginx 4096 Nov  1 15:50 nextcloud
五、设置Nginx虚拟主机

进入Nginx的虚拟主机配置文件所在目录并创建一个新的虚拟主机配置(记得修改两个server_name为自己的域名):


[root@chyiyanghost html]#cd /etc/nginx/conf.d/
[root@chyiyanghost conf.d]#vim nextcloud.conf
upstream php-handler {
    server 127.0.0.1:9000;
    #server unix:/var/run/php5-fpm.sock;
}     
server {
    listen 80;
    server_name chyiyang.net;
    # enforce https
    return 301 https://$server_name$request_uri;
}     
server {
    listen 443 ssl;
    server_name chyiyang.net;     
    ssl_certificate /etc/nginx/cert/nextcloud.crt;
    ssl_certificate_key /etc/nginx/cert/nextcloud.key;     
    # Add headers to serve security related headers
    # Before enabling Strict-Transport-Security headers please read into this
    # topic first.
    add_header Strict-Transport-Security "max-age=15768000;
    includeSubDomains; preload;";
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;     
    # Path to the root of your installation
    root /usr/share/nginx/html/nextcloud/;     
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }
     
    # The following 2 rules are only needed for the user_webfinger app.
    # Uncomment it if you're planning to use this app.
    #rewrite ^/.well-known/host-meta /public.php service=host-meta last;
    #rewrite ^/.well-known/host-meta.json /public.php service=host-meta-json
    # last;
     
    location = /.well-known/carddav {
      return 301 $scheme://$host/remote.php/dav;
    }
    location = /.well-known/caldav {
      return 301 $scheme://$host/remote.php/dav;
    }
     
    # set max upload size
    client_max_body_size 512M;
    fastcgi_buffers 64 4K;
     
    # Disable gzip to avoid the removal of the ETag header
    gzip off;
     
    # Uncomment if your server is build with the ngx_pagespeed module
    # This module is currently not supported.
    #pagespeed off;
     
    error_page 403 /core/templates/403.php;
    error_page 404 /core/templates/404.php;
     
    location / {
        rewrite ^ /index.php$uri;
    }
     
    location ~ ^/( :build|tests|config|lib|3rdparty|templates|data)/ {
        deny all;
    }
    location ~ ^/( :\.|autotest|occ|issue|indie|db_|console) {
        deny all;
    }
     
    location ~ ^/( :index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php( :$|/) {
        include fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS on;
        #Avoid sending the security headers twice
        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }
     
    location ~ ^/( :updater|ocs-provider)( :$|/) {
        try_files $uri/ =404;
        index index.php;
    }
     
    # Adding the cache control header for js and css files
    # Make sure it is BELOW the PHP block
    location ~* \.( :css|js)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "public, max-age=7200";
        # Add headers to serve security related headers (It is intended to
        # have those duplicated to the ones above)
        # Before enabling Strict-Transport-Security headers please read into
        # this topic first.
        add_header Strict-Transport-Security "max-age=15768000;includeSubDomains; preload;";
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        # Optional: Don't log access to assets
        access_log off;
    }
     
    location ~* \.( :svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        # Optional: Don't log access to other assets
        access_log off;
    }
}

接下来测试以下配置文件是否有错误,确保没有问题后重启Nginx服务。


[root@chyiyanghost conf.d]#nginx -t
nginx:the configuration file /etc/nginx/nginx.conf syntax is ok
nginx:configuration file /etc/nginx/nginx.conf test is successful
[root@chyiyanghost conf.d]#systemctl restart nginx
六、为Nextcloud设置Firewalld防火墙和SELinux

可以选择关闭Firewalld和SELinux


[root@chyiyanghost~]#systemctl stop firewalld

[root@chyiyanghost~]#systemctl disable firewalld

[root@chyiyanghost~]#setenforce 0

[root@chyiyanghost~]#getenforce
disable

[root@chyiyanghost~]#cat /etc/sysconfig/selinux
......
SELINUX=disabled
如果打开了防火墙,则需要设置FirewalldSELinux

首先需要安装SElinux管理工具policycoreutils-python


[root@chyiyanghost~]#yum -y install policycoreutils-python

接着设置SELinux


[root@chyiyanghost~]#semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/data(/.*)'
[root@chyiyanghost~]#semanage fcontext -a -t httpd_sys_rw_content_t'/usr/share/nginx/html/nextcloud/config(/.*)'
[root@chyiyanghost~]#semanage fcontext -a -t httpd_sys_rw_content_t'/usr/share/nginx/html/nextcloud/apps(/.*)'
[root@chyiyanghost~]#semanage fcontext -a -t httpd_sys_rw_content_t'/usr/share/nginx/html/nextcloud/assets(/.*)'
[root@chyiyanghost~]#semanage fcontext -a -t httpd_sys_rw_content_t'/usr/share/nginx/html/nextcloud/.htaccess'
[root@chyiyanghost~]#semanage fcontext -a -t httpd_sys_rw_content_t'/usr/share/nginx/html/nextcloud/.user.ini'
[root@chyiyanghost~]#restorecon -Rv'/usr/share/nginx/html/nextcloud/'

接下来设置Firewlld防火墙,为Nextcloud开放http和https两个端口


[root@chyiyanghost~]#systemctl start firewalld
[root@chyiyanghost~]#systemctl enable firewalld
[root@chyiyanghost~]#firewall-cmd --permanent --add-service=http
[root@chyiyanghost~]#firewall-cmd --permanent --add-service=https
[root@chyiyanghost~]#firewall-cmd --reload
七、安装Nextcloud

解析上面nginx中配置的域名chyiyang.net,访问访问http://chyiyang.net进行Nextcloud界面安装(访问http域名会自动跳转到https,安装提示安装即可!)

安装截图

 

安装截图

 

安装截图

至此,nextcloud算是部署完成了。

Linux系统vi命令的使用(一般模式)

伊阳阅读()

Linux系统下的Vim是一款强大的文本编辑器,它不仅支持基本的文本编辑功能,还有很多高级特性。在日常工作中,熟练使用Vim可以使你的编辑效率倍增。
基本上Vim共分为3种模式,分别是一般模式,编辑模式和命令行模式,这三种模式的作用分别如下简述:

  • 一般模式:默认模式。打开vim直接进入的是一般模式,在这个模式下,可以进行的操作有:移动光标,复制,粘贴,删除。
  • 编辑模式:编辑文件内容,在界面左下方会出现INSERT的字样。
  • 命令行模式:查找、读取、保存、替换字符、显示行号、离开vim等等操作。

下面将进行一般模式的介绍。

一、进入命令模式命令
vi filename: 打开或新建文件,并将光标置于第一行首
vi +n filename:打开文件,并将光标置于第n行首
vi + filename:打开文件,并将光标置于最后一行首
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename:在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename....filename:打开多个文件,依次编辑
二、移动光标
j:向下
20j:向下移动 20 行
k:向上
h:向左
l:向右
0:数字0,到行首
^:到行首第一个字符,如果前面有空格的话
$:到行尾
n$:光标移至第n行尾
gg:快速到文件头
G:快速到文件尾
50G:跳转到第 50 行
n+:光标下移n行
n-:光标上移n行
w:光标跳到下个字的开头
e:光标跳到下个字的字尾
b:光标回到上个字的开头
#l:光标移到该行的第#个位置,如:5l,56l。
ctrl+ b:屏幕往后移动一页。
ctrl + f:屏幕往前移动一页。
ctrl + u:屏幕往后移动半页。
ctrl + d:屏幕往"前"移动半页。
ctrl + g列出光标所在行的行号
space:光标右移一个字符
Backspace:光标左移一个字符
):光标移至句尾
( :光标移至句首
}:光标移至段落开头
{:光标移至段落结尾
H :光标移至屏幕顶行
M :光标移至屏幕中间行
L :光标移至屏幕最后行
注意:请不要在插入模式进行光标移动,效率很低下
三、复制
yy:复制一行
#yy:例如,6yy表示拷贝从光标所在的该行往下数6行文字
8yy:向下复制8行
yw:复制光标开始的一个单词
#yw:复制#个字到缓冲区
y$:复制光标到行尾
yfA:复制光标到第一个大写A中间的内容
y2fA:复制光标到第二个大写A中间的内容
n,my:指定n到m行复制
四、剪切
x:向后剪切一个一个字符,如果是在行尾,则为向前剪切
4x:剪切4个
xp:非行尾交换两个字符,如从bs变成sb
五、删除
dd:删除一行
100dd:删除100行
dw:删除一个单词
df":删除到出现的第一个双引号
d^:删除至行首
#dd:从光标所在行开始删除#行
x:每按一次,删除光标所在位置的后面一个字符。
#x:例如,6x表示删除光标所在位置的后面6个字符。
X:大写的X,每按一次,删除光标所在位置的前面一个字符。
#X:例如,20X表示删除光标所在位置的前面20个字符。
Ctrl+u:删除输入方式下所输入的文本
六、粘贴
p(小写):粘贴复制或剪切的内容,将缓冲区内的字符贴到光标所在位置。在光标下一行粘贴
注意:所有与y有关的复制命令都必须与p配合才能完成复制与粘贴功能
5p:将复制或剪切的内容粘贴5次
P(大写):在光标上一行粘贴(插入)
七、替换和撤销
r+<待替换字母>:将游标所在字母替换为指定字母
R:连续替换,直到按下
Esccc:替换整行,即删除游标所在行,并进入插入模式
cw:替换一个单词,即删除一个单词,并进入插入模式
c#w:例如,c3w表示更改3个字
u{n}:撤销一次或n次操作
U(大写):撤销当前行的所有修改Ctrl+r:redo,即撤销undo的操作