wordpress-配置cdn加速

闲鱼站长,推荐用 Cloudflare CDN加速,因为有免费加速套餐。

方法:

只需 网站默认的  dns 服务器 改成 cloudflare  的dns服务器就行了。

注意事项:

在控制面板的 Crypto 的加密选项中,需要将 ssl 的加密模式,从 flexible 改成 full。因为我的网站自身就是只能通过https访问了。

full的含义是,从浏览器到cdn,及cdn到网站主机都是ssl加密的,如果这个地方不修改的话。那么浏览器访问网站时就会一直 redirect,redirect,redirect,最终报错显示:重定向太多。这个时候我们用 pagespeed 测速一下就会报错:Lighthouse returned error: RPC::SERVER_ERROR: Client could not parse server reply; initialization error is 。。。

优化:

等cdn能够运行,网站可以正常访问时,就可以cloudflare控制面板中的speed 选项和 cache选项中进行配置和优化。

wordpress-从http迁移到https

一、获取并配置 https 证书

1、密码和证书-https(ssl/tls)之证书的概述及获取和网站部署 ,使网站能够通过https访问。

2、配置服务器,将网站从 http 跳转到 https。

### nginx 服务器 http 跳转 https 的配置如下
server {
listen     80;
server_name  www.huaijiujia.com;
return 301 https://www.huaijiujia.com$request_uri;
  }

二、编辑 wp-config.php 文件

# 添加下面这句话,使php网站 从 http 强制跳转到 https
define('FORCE_SSL_ADMIN', true);

三、其他操作

If that worked fine, now it’s time to do the last few steps to complete the transfer to HTTPS:

  • Update your sitemap — Ideally, your SEO plugin does this automatically. However, it doesn’t always work that way. With Yoast SEO you might have to switch off the plugin once for it to update the sitemap. Don’t forget to include it in your robots.txt file and update all other hardcoded links you might have there.
  • Add site to your webmaster tools — Go to every webmaster tool you are using and add the HTTPS version of your site as a new property. While you are there, upload the new sitemap. You might also consider doing a fetch and crawl and submit any disavow files that are already active for the old version of your site.
  • Update your CDN — If you are using a content delivery network (one of the ways to speed up your site), you also need to switch it to SSL. Many of them have that feature built in and your CDN should have documentation on this. Otherwise, ask their support to help you.
  • Make the switch in your analytics — If your analytics need a default URL, make sure to upgrade it with the new prefix. For Google Analytics, you find the option under Admin > Property Settings > Default URL. Also, note down when you made the switch to HTTPS to understand traffic changes.
  • Preserve social share counts — If you show social share counters on your site, you might have to make some changes in order to keep them up to date. Check this guide for details. Don’t forget to update the links to your site in your social profiles! And do the same in your email templates.

参考自:https://websitesetup.org/http-to-https-wordpress/#comment-131467

wordpress-网站迁移与本地主机测试

将网站定期备份到本地 ,方便本地调试 与 文件备份。 

一、网站备份迁移流程:

1、用mysql 客户端 备份数据库,导出sql

2、删除网站自动备份文件,将网站压缩打包,从服务器下载网站备份。

3、因为本地环境是Apache + php ,网站 环境是 nginx +php,所以需要迁移。

(1)开启本地mysql,导入网站 sql 数据,数据库名和原网站相同。

(2)配置本地虚拟主机,并将网站文件存放至虚拟主机目录。

(3)调整网站环境,解决其他迁移问题。


二、配置虚拟主机

mac os x已自带了apahce,so 我们不需要单独安装apache,只需修改其中配置即可。

1、修改apache主配置文件

sudo vim /etc/apache2/httpd.conf

搜索vhost关键字,将以下两行代码前的#删除

#LoadModule vhost_alias_module libexec/apache2/mod_vhost_alias.so
  
#Include /private/etc/apache2/extra/httpd-vhosts.conf

搜索php5关键字,将以下两行代码前的#删除

#LoadModule rewrite_module libexec/apache2/mod_rewrite.so

#LoadModule php5_module libexec/apache2/libphp5.so

wq保存退出,第一步完成。

2、修改虚拟主机配置文件

sudo vim /etc/apache2/extra/httpd-vhost.conf

将以下代码贴进文件尾行,并按照注释配置相关参数

<VirtualHost *:80>
    ServerAdmin [email protected]  //主机邮箱地址
    DocumentRoot "/usr/docs/dummy-host2.example.com"  //站点根目录
    ServerName dummy-host2.example.com  //站点虚拟域名
    ErrorLog "/private/var/log/apache2/dummy-host2.example.com-error_log"  //错误日志输出
    CustomLog "/private/var/log/apache2/dummy-host2.example.com-access_log" common
    <Directory "/usr/docs/dummy-host2.example.com"> //站点根目录   文件权限相关
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Require all granted
    </Directory>
</VirtualHost>

将注释中的配置项改好之后,wq保存退出。

3、修改host配置

sudo vim /etc/hosts

在文件末尾加上一行

127.0.0.1       dummy-host2.example.com  //刚配好的虚拟站点目录

保存退出。

4、将网站文件存放至虚拟主机目录,并重启服务器

sudo apachectl restart

三、调整迁移环境解决迁移问题

1、数据库密码匹配问题

为了以后的方便测试统一,将本地数据库密码与网站统一。

#### 输入密码,进入 mysql 数据库
mysql -u root -p

### 修改数据库密码
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');

2、wordpress 中的 wp-config.php问题

(1)Apache 只能 解析 127.0.0.1  而 Nginx 可以解析 127.0.0.1 和 localhost  ,一开始这个地方填了 localhsot,导致 Apache 无法解析。

/** MySQL hostname  正确填法如下 **/

define('DB_HOST', '127.0.0.1');

(2)开启 debug 输出模式,方便查找 错误

define('WP_DEBUG', true);

(3)服务器内部错误,debug输出下发现文件夹权限问题,无法写入缓存

### 修改网站文件的权限,对指定 文件夹 文件 读写 全开放
sudo chmod -R 777 文件夹  (递归调用,使子文件 文件夹也是这个权限) 

### 对指定 文件夹 ,设置 文件 文件夹 用户组 和用户 ;就是文件所有者
sudo  chown  –R  apache:apache  文件夹  (递归调用,使子文件 文件夹也是这个权限) 

### 最后 设置好 文件权限
sudo  chmod   –R  755 文件夹  (递归调用,使子文件 文件夹也是这个权限) 
### 检查效果效果 ,可以查看文件 权限 用户组
ls  –l   文件夹 

### 移植成功后,别忘记 关闭 debug 模式:
define('WP_DEBUG', false);

3、url路径请求问题

当完成上面的操作时,我们发现 浏览器 可以访问 网站首页了,但是无法访问网站的其他子页面。都是显示  404  错误。经过查找,是路径 重写问题。

以前是nginx 服务器 现在改为 Apache ,所以 在  Permalink Settings 中,需要重新再 保存一下即可。

这样子:网站根目录下的   .htaccess 文件会添加 路径重写模块,开启路径重写功能。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

建议删除 以下原网站的 配置文件,网站运行时 会根据新服务器环境  提示重新配置。
wordfence-waf.php 【插件生成的安全模块】
.htaccess 文件 【Apache 服务器下的 网站配置文件】
.user.ini 文件 【不清楚 之前哪里来的,反正也是在里面 只调用了 wordfence-waf.php 文件】

nginx.conf 【这个是nginx 服务器下的 网站配置文件,我这边是一个 缓存插件 自动生成的】

总结参考:

解决wordpress能打开(无404),但帖子无法打开的办法是:
在固定链接本身设置为 /%postname%/,即文章名的前提下:

1、确保apache的mod_rewrite是开启了。
即httpd.conf中,取消注释,已变成:

LoadModule rewrite_module libexec/apache2/mod_rewrite.so

2、确保有权限可以重写url,即httpd.conf中的<Directory />的AllowOverride从None变成了All:

<Directory /> 
Options FollowSymLinks 
AllowOverride All 
Order deny,allow 
Deny from all 
</Directory>

备份网站是虚拟主机配置,重写权限应该是下面的 虚拟主机 配置目录的AllowOverride All

<VirtualHost *:80>
        ServerAdmin [email protected]
        DocumentRoot "/Users/cool/Sites/www.yyyyy.com"
        ServerName www.yyyyy.com
        ErrorLog "/private/var/log/apache2/testLocalSite-error_log"
        CustomLog "/private/var/log/apache2/testLocalSite-access_log" common

        <Directory "/Users/cool/Sites/www.yyyyy.com">
            AllowOverride All
            Require all granted
        </Directory>
</VirtualHost>

 

四、网站域名更改

UPDATE wp_options SET option_value = replace( option_value, 'http://www.aliyun.com', 'http://www.bieryun.com' ) WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET post_content = replace( post_content, 'http://www.aliyun.com', 'http://www.bieryun.com' ) ;
UPDATE wp_posts SET guid = replace( guid, 'http://www.old.com', 'http://www.new.com' ) ;

### old代表旧域名、new代表新域名,将上面的执行语句修改为自己的,然后点击执行即可!

 

 


参考:

https://www.jianshu.com/p/d09bdabbe065

 

wordpress-优化php-fpm和mysql

个人小站,用VPS 搭建了  wordpress,因为系统配置低,所以需要优化一下。

一、优化 php-fpm

#用于查找配置文件
 find / -name php.ini
#结果  /etc/php.ini
ls /etc
#发现  /etc/php-fpm.conf  里面 调用了 /etc/php-fpm.d  这个是文件夹
# 进入   cd /etc/php-fpm.d
修改  pm.max_children 等参数

php-fpm进程设置多少合适,设成动态还是静态?

lnmp一键安装包》中会根据你服务器内存调整php-fpm进程数。

下面是摘自Google讨论话题:《 PHP-FPM on highload tips 》如果你的高负载网站使用PHP-FPM管理FastCGI,也许下面这些技巧对你有用

1、系统上优化


1. Increase Linux “max open files”, using the following command (must be root):

Linux下增加文件打开数,命令如下:

cat >> /etc/security/limits.conf <<EOF
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
EOF

可以用 ulimit -n 命令查看。

2. Using SOCKET PHP FastCGI, and put into /dev/shm on Linux;

socket连接FastCGI,/dev/shm是内存文件系统,socket放在内存中肯定会快些。

nginx 下的配置
&nbsp;location ~ \.php$ {
   #fastcgi_pass 127.0.0.1:9000;
    fastcgi_pass unix:/dev/shm/php-fcgi.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
}


systemctl restart nginx [这里可能会报错 unknown directive "fastcgi_pass" 其实是因为配置包含的空格中有一些 dirty EOL(end of line) characters,重新删除添加即可]

##################################### 

修改php-fpm.conf
;listen = 127.0.0.1:9000
listen = /dev/shm/php-fcgi.sock

# 执行下面这句话,会自动生成一个 /dev/shm/php-fcgi.sock 但是文件权限不对
systemctl restart php-fpm # 所以我又添加了权限 chmod 777 /dev/shm/php-fcgi.sock


# 原因是一开始忘记添加了下面两句话,导致生成的 php-fcgi.sock 是root所有,存在权限问题
listen.owner = apache # 这里要设置网站所有者,目标权限统一
listen.group = apache # 这里要设置网站所有者,目标权限统一 
# 但是又出问题了,于sock 文件是 nginx 和 php-fpm共享的,所以nginx和php-fpm的进程需要设置成同一个用户,权限统一

##################################### 
ps aux|grep nginx     # 发现 是 nginx 用户所有
ps aux|grep php-fpm   # 发现 是 apache 用户所有

nginx的用户名在/etc/nginx/nginx.conf配置文件中,有一个user参数,查看对应的就可以。
后来浏览器访问时,发现页面加载不全,net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)
百度后知道,nginx目录下fastcgi_temp属于nginx用户和用户组,还需要修改成 apache
chown  -R  apache:apache /etc/nginx/fastcgi_params

查看 php-fpm 配置文件
#vi /etc/php-fpm.d/www.conf
 
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache Choosed to be able to access some dir as httpd
;user = nobody
user=apache
; RPM: Keep a group allowed to write in log dir.
;group = nobody
group=apache

# 后来发现 nginx 日志中:open() "/var/cache/nginx/fastcgi_temp/3/00/0000000003" failed (13: Permission denied) while reading
# 于是我 rm -rf /var/cache/nginx/  然后发现重启 nginx 报错,mkdir() "/var/cache/nginx/client_temp" failed (2: No such file or directory)
# 于是我 mkdir /var/cache/nginx

mkdir /var/cache/nginx

 

Unix域Socket因为不走网络,的确可以提高Nginx和php-fpm通信的性能,但在高并发时会不稳定。
Nginx会频繁报错:
     connect() to unix:/dev/shm/php-fcgi.sock failed (11: Resource temporarily unavailable) while connecting to upstream

可以通过下面两种方式提高稳定性:
1)调高nginx和php-fpm中的backlog
     配置方法为:在nginx配置文件中这个域名的server下,在listen 80后面添加default backlog=1024。
     同时配置php-fpm.conf中的listen.backlog为1024,默认为128。
2)增加sock文件和php-fpm实例数
     再新建一个sock文件,在Nginx中通过upstream模块将请求负载均衡到两个sock文件背后的两套php-fpm实例上。

 

3. Compile PHP’s modules as less as possible, the simple the best (fast);

尽量少安装PHP模块,最简单是最好(快)的

妈蛋的 一个 php-fpm 占了80M
# 查看装了哪些 php 模块 ;卸载只要  yum remove 模块名
rpm -qa | grep php

# 下面是 必须要装的模块
php71w-common-7.1.22-1.w7.x86_64 【这个才是真正的主模块】
php71w-cli-7.1.22-1.w7.x86_64
php71w-mysql-7.1.22-1.w7.x86_64
php71w-pdo-7.1.22-1.w7.x86_64
php71w-fpm-7.1.22-1.w7.x86_64

# 下面是没有必要装的
mod_php71w-7.1.22-1.w7.x86_64  【这个模块应该是独立于其他模块的,可以删除,因为卸载7.1版本时,这个模块根本就没有删除】
php71w-xml-7.1.22-1.w7.x86_64
php71w-soap-7.1.22-1.w7.x86_64
php71w-mcrypt-7.1.22-1.w7.x86_64
php71w-xmlrpc-7.1.22-1.w7.x86_64
php71w-gd-7.1.22-1.w7.x86_64  // 作用是 png 转成 jpg

4. Using PHP code accelerator, e.g eAccelerator, XCache. And set “cache_dir” to /dev/shm on Linux.

使用php代码加速器,有那些PHP Opcode缓存插件?
Optimizer+(Optimizer+于2013年3月中旬改名为Opcache,PHP 5.5集成Opcache,其他的会不会消失?)、eAccelerator、xcache、APC …,例如 eAccelerator, XCache.在Linux平台上可以把`cache_dir`指向 /dev/shm

Opcache 缓存默认就存放在内存中,所以不需要指定目录了。

yum install php-opcache
# 相关配置
# vim /etc/php.d/10-opcache.ini

# 安装完后,直接用wordpress 的 W3 Total Cache 插件设置缓存 到这里就行了。

===============================
可以安装 redis 服务,启动服务端后,需要 php的 驱动
yum list | grep php72w*  ## 从网上查找所有的 php 插件
yum install php72w-pecl-redis  
## PECL is a repository for PHP Extensions, providing a directory of all known extensions and hosting facilities for downloading and development of PHP extensions.
安装完 redis 驱动后 ,直接用wordpress 的 W3 Total Cache 插件设置缓存 到这里就行了

2、php-fpm 配置文件优化


1. Increas PHP FastCGI child number to 100 and even more. Sometime, 200 is OK! ( On 4GB memory server);

把你的PHP FastCGI子进程数调到100或以上,在4G内存的服务器上200就可以(建议压力测试来得出自己服务器合理的值)其实就是 php-fpm 进程数
配置文件/etc/php-fpm.conf --> /etc/php-fpm.d/www.conf
这个配置文件的里面的池名[www] 就对应网站的域名 ,两者互相对应。这个配置文件即可以用来设置 php-fpm 运行时的用户名和用户组,也可以生成 sock文件,并规定用户名和用户组。

; Start a new pool named 'www'.
[www]

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache Choosed to be able to access some dir as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
;listen = 127.0.0.1:9000
listen = /dev/shm/php-fcgi.sock

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
;listen.owner = nobody
;listen.group = nobody
;listen.mode = 0660
listen.owner = apache
listen.group = apache

# 查看php-fpm的进程个数
ps -fe |grep "php-fpm"|grep "pool"|wc -l

# 查看每个php-fpm占用的内存大小
ps -ylC php-fpm --sort:rss

# 配置php-fpm参数
pm = dynamic #动态适合小内存机器,灵活分配进程,省内存。静态适用于大内存机器,动态创建回收进程对服务器资源也是一种消耗。
#如何控制子进程,选项有static和dynamic。如果选择static,则由pm.max_children指定固定的子进程数。如果选择dynamic,则由下开参数决定:

pm.max_children #子进程最大数
pm.start_servers #启动时的进程数
pm.min_spare_servers #保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
pm.max_spare_servers #保证空闲进程数最大值,如果空闲进程大于此值,此进行清理

###  我的 1G 主机,测试使用发现  一个 php-fpm 占了80M,所以进程配置了最多10个

2.其他参数

rlimit_files = 51200
Increase PHP-FPM open file description rlimit:增加 PHP-FPM 打开文件描述符的限制。

pm.max_requests = 10240;
每个请求完成后php-cgi会回收内存,但是不会释放给操作系统,这样就会导致大量内存被php-cgi占用。官方的解决办法是降低PHP_FCGI_MAX_REQUESTS的值,如果用的是php-fpm,对应的php-fpm.conf中的就是max_requests,该值的意思是发送多少个请求后会重启该线程,我们需要适当降低这个值,用以让php-fpm自动的释放内存,不是大部分网上说的51200等等。

request_terminate_timeout = 30;
最大执行时间, 在php.ini中也可以进行配置(max_execution_time)默认值为 0 秒,也就是说,PHP 脚本会一直执行下去。这样,当所有的 php-cgi 进程都卡在 file_get_contents() 函数时,这台 Nginx+PHP 的 WebServer 已经无法再处理新的 PHP 请求了,Nginx 将给用户返回“502 Bad Gateway”。可以使用 request_terminate_timeout = 30s,但是如果发生 file_get_contents() 获取网页内容较慢的情况,这就意味着 150 个 php-cgi 进程,每秒钟只能处理 5 个请求,WebServer 同样很难避免“502 Bad Gateway”。php-cgi进程数不够用、php执行时间长、或者是php-cgi进程死掉,都会出现502错误。

用strace跟踪 超时进程:
利用nohup将strace转为后台执行,直到attach上的php-fpm进程死掉为止:
nohup strace -T -p 13167 > 13167-strace.log &

参数说明:

-c 统计每一系统调用的所执行的时间,次数和出错的次数等.
-d 输出strace关于标准错误的调试信息.
-f 跟踪由fork调用所产生的子进程.
-o filename,则所有进程的跟踪结果输出到相应的filename
-F 尝试跟踪vfork调用.在-f时,vfork不被跟踪.
-h 输出简要的帮助信息.
-i 输出系统调用的入口指针.
-q 禁止输出关于脱离的消息.
-r 打印出相对时间关于,,每一个系统调用.
-t 在输出中的每一行前加上时间信息.
-tt 在输出中的每一行前加上时间信息,微秒级.
-ttt 微秒级输出,以秒了表示时间.
-T 显示每一调用所耗的时间.
-v 输出所有的系统调用.一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出.
-V 输出strace的版本信息.
-x 以十六进制形式输出非标准字符串
-xx 所有字符串以十六进制形式输出.
-a column
设置返回值的输出位置.默认为40.
-e execve 只记录 execve 这类系统调用
-p 主进程号

request_slowlog_timeout = 2; 配置输出php-fpm慢日志,阀值为2秒:
slowlog =/tmp/www.slow.log; 慢日志路径,可以自己定路径。
利用sort/uniq命令分析汇总php-fpm慢日志:

[root@b28-12 log]# grep -v "^$" www.log.slow.tmp | cut -d " " -f 3,2 | sort | uniq -c | sort -k1,1nr | head -n 50

   5181 run() /www/test.net/framework/web/filters/CFilter.php:41

   5156 filter() /www/test.net/framework/web/filters/CFilterChain.php:131

   2670 = /www/test.net/index.php

   2636 run() /www/test.net/application/controllers/survey/index.php:665

   2630 action() /www/test.net/application/controllers/survey/index.php:18

   2625 run() /www/test.net/framework/web/actions/CAction.php:75

   2605 runWithParams() /www/test.net/framework/web/CController.php:309

   2604 runAction() /www/test.net/framework/web/filters/CFilterChain.php:134

   2538 run() /www/test.net/framework/web/CController.php:292

   2484 runActionWithFilters() /www/test.net/framework/web/CController.php:266

   2251 run() /www/test.net/framework/web/CWebApplication.php:276

   1799 translate() /www/test.net/application/libraries/Limesurvey_lang.php:118

   1786 load_tables() /www/test.net/application/third_party/php-gettext/gettext.php:254

   1447 runController() /www/test.net/framework/web/CWebApplication.php:135

参数解释:
sort:  对单词进行排序
uniq -c:  显示唯一的行,并在每行行首加上本行在文件中出现的次数
sort -k1,1nr:  按照第一个字段,数值排序,且为逆序
head -10:  取前10行数据

3、PHP性能监控


常用的方法就是开启xdebug的性能监控功能,将xdebug输出结果通过WinCacheGrind软件分析。
xdebug的安装和配合IDE调试的方法参见:Vim+XDebug调试PHP

php.ini中配置的这几项是输出性能信息的:

xdebug.auto_trace = on

xdebug.auto_profile = on
xdebug.collect_params = on
xdebug.collect_return = on
xdebug.profiler_enable = on
xdebug.trace_output_dir = "/tmp"
xdebug.profiler_output_dir ="/tmp"

这样XDebug会输出所有执行php函数的性能数据,但产生的文件也会比较大。可以关闭一些选项如collect_params、collect_return,来减少输出的数据量。或者关闭自动输出,通过在想要监控的函数首尾调用xdebug函数来监控指定的函数。输出的文件名类似cachegrind.out.1277560600和trace.3495983249.txt,可以拿到Windows平台下用WinCacheGrind进行图形化分析。

在线监测:

# nginx 配置
location ~ ^/status$ {
    include fastcgi_params;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
}

# php-fpm配置
pm.status_path = /status

###############################
这样的话通过http://域名/status就可以看到当前的php情况

  下面介绍每个参数的作用:
  pool:php-fpm池的名称,一般都是应该是www
  process manage:进程的管理方法,php-fpm支持三种管理方法,分别是static,dynamic和ondemand,一般情况下都是dynamic
  start time:php-fpm启动时候的时间,不管是restart或者reload都会更新这里的时间
  start since:php-fpm自启动起来经过的时间,默认为秒
  accepted conn:当前接收的连接数
  listen queue:在队列中等待连接的请求个数,如果这个数字为非0,那么最好增加进程的fpm个数
  max listen queue:从fpm启动以来,在队列中等待连接请求的最大值
  listen queue len:等待连接的套接字队列大小
  idle processes:空闲的进程个数
  active processes:活动的进程个数
  total processes:总共的进程个数
  max active processes:从fpm启动以来,活动进程的最大个数,如果这个值小于当前的max_children,可以调小此值
  max children reached:当pm尝试启动更多的进程,却因为max_children的限制,没有启动更多进程的次数。如果这个值非0,那么可以适当增加fpm的进程数
  slow requests:慢请求的次数,一般如果这个值未非0,那么可能会有慢的php进程,一般一个不好的mysql查询是最大的祸首。

二、优化mysql

my.cnf  【经过使用,目前mysql5.7版本,使用默认配置,内存占用稳定在20%左右,我也懒得优化了】

MySQL 5.6版本适合在1GB内存VPS上的my.cnf配置文件(点击这里下载文件):

[client]  
port = 3306  
socket = /tmp/mysql.sock  
  
[mysqld]  
port = 3306  
socket = /tmp/mysql.sock  
  
basedir = /usr/local/mysql  
datadir = /data/mysql  
pid-file = /data/mysql/mysql.pid  
user = mysql  
bind-address = 0.0.0.0  
server-id = 1 #表示是本机的序号为1,一般来讲就是master的意思  
  
skip-name-resolve  
# 禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,  
# 则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求  
  
#skip-networking  
  
back_log = 600  
# MySQL能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,  
# 然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。  
# 如果期望在一个短时间内有很多连接,你需要增加它。也就是说,如果MySQL的连接数据达到max_connections时,新来的请求将会被存在堆栈中,  
# 以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。  
# 另外,这值(back_log)限于您的操作系统对到来的TCP/IP连接的侦听队列的大小。  
# 你的操作系统在这个队列大小上有它自己的限制(可以检查你的OS文档找出这个变量的最大值),试图设定back_log高于你的操作系统的限制将是无效的。  
  
max_connections = 1000  
# MySQL的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。可以过'conn%'通配符查看当前状态的连接数量,以定夺该值的大小。  
  
max_connect_errors = 6000  
# 对于同一主机,如果有超出该参数值个数的中断错误连接,则该主机将被禁止连接。如需对该主机进行解禁,执行:FLUSH HOST。  
  
open_files_limit = 65535  
# MySQL打开的文件描述符限制,默认最小1024;当open_files_limit没有被配置的时候,比较max_connections*5和ulimit -n的值,哪个大用哪个,  
# 当open_file_limit被配置的时候,比较open_files_limit和max_connections*5的值,哪个大用哪个。  
  
table_open_cache = 128  
# MySQL每打开一个表,都会读入一些数据到table_open_cache缓存中,当MySQL在这个缓存中找不到相应信息时,才会去磁盘上读取。默认值64  
# 假定系统有200个并发连接,则需将此参数设置为200*N(N为每个连接所需的文件描述符数目);  
# 当把table_open_cache设置为很大时,如果系统处理不了那么多文件描述符,那么就会出现客户端失效,连接不上  
  
max_allowed_packet = 4M  
# 接受的数据包大小;增加该变量的值十分安全,这是因为仅当需要时才会分配额外内存。例如,仅当你发出长查询或MySQLd必须返回大的结果行时MySQLd才会分配更多内存。  
# 该变量之所以取较小默认值是一种预防措施,以捕获客户端和服务器之间的错误信息包,并确保不会因偶然使用大的信息包而导致内存溢出。  
  
binlog_cache_size = 1M  
# 一个事务,在没有提交的时候,产生的日志,记录到Cache中;等到事务提交需要提交的时候,则把日志持久化到磁盘。默认binlog_cache_size大小32K  
  
max_heap_table_size = 8M  
# 定义了用户可以创建的内存表(memory table)的大小。这个值用来计算内存表的最大行数值。这个变量支持动态改变  
  
tmp_table_size = 16M  
# MySQL的heap(堆积)表缓冲大小。所有联合在一个DML指令内完成,并且大多数联合甚至可以不用临时表即可以完成。  
# 大多数临时表是基于内存的(HEAP)表。具有大的记录长度的临时表 (所有列的长度的和)或包含BLOB列的表存储在硬盘上。  
# 如果某个内部heap(堆积)表大小超过tmp_table_size,MySQL可以根据需要自动将内存中的heap表改为基于硬盘的MyISAM表。还可以通过设置tmp_table_size选项来增加临时表的大小。也就是说,如果调高该值,MySQL同时将增加heap表的大小,可达到提高联接查询速度的效果  
  
read_buffer_size = 2M  
# MySQL读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。  
# 如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能  
  
read_rnd_buffer_size = 8M  
# MySQL的随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,  
# MySQL会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySQL会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大  
  
sort_buffer_size = 8M  
# MySQL执行排序使用的缓冲大小。如果想要增加ORDER BY的速度,首先看是否可以让MySQL使用索引而不是额外的排序阶段。  
# 如果不能,可以尝试增加sort_buffer_size变量的大小  
  
join_buffer_size = 8M  
# 联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享  
  
thread_cache_size = 8  
# 这个值(默认8)表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,  
# 如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,  
# 增加这个值可以改善系统性能.通过比较Connections和Threads_created状态的变量,可以看到这个变量的作用。(–>表示要调整的值)  
# 根据物理内存设置规则如下:  
# 1G  —> 8  
# 2G  —> 16  
# 3G  —> 32  
# 大于3G  —> 64  
  
query_cache_size = 8M  
#MySQL的查询缓冲大小(从4.0.1开始,MySQL提供了查询缓冲机制)使用查询缓冲,MySQL将SELECT语句和查询结果存放在缓冲区中,  
# 今后对于同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。根据MySQL用户手册,使用查询缓冲最多可以达到238%的效率。  
# 通过检查状态值'Qcache_%',可以知道query_cache_size设置是否合理:如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况,  
# 如果Qcache_hits的值也非常大,则表明查询缓冲使用非常频繁,此时需要增加缓冲大小;如果Qcache_hits的值不大,则表明你的查询重复率很低,  
# 这种情况下使用查询缓冲反而会影响效率,那么可以考虑不用查询缓冲。此外,在SELECT语句中加入SQL_NO_CACHE可以明确表示不使用查询缓冲  
  
query_cache_limit = 2M  
#指定单个查询能够使用的缓冲区大小,默认1M  
  
key_buffer_size = 4M  
#指定用于索引的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,  
# 系统将开始换页并且真的变慢了。对于内存在4GB左右的服务器该参数可设置为384M或512M。通过检查状态值Key_read_requests和Key_reads,  
# 可以知道key_buffer_size设置是否合理。比例key_reads/key_read_requests应该尽可能的低,  
# 至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE 'key_read%'获得)。注意:该参数值设置的过大反而会是服务器整体效率降低  
  
ft_min_word_len = 4  
# 分词词汇最小长度,默认4  
  
transaction_isolation = REPEATABLE-READ  
# MySQL支持4种事务隔离级别,他们分别是:  
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.  
# 如没有指定,MySQL默认采用的是REPEATABLE-READ,ORACLE默认的是READ-COMMITTED  
  
log_bin = mysql-bin  
binlog_format = mixed  
expire_logs_days = 30 #超过30天的binlog删除  
  
log_error = /data/mysql/mysql-error.log #错误日志路径  
slow_query_log = 1  
long_query_time = 1 #慢查询时间 超过1秒则为慢查询  
slow_query_log_file = /data/mysql/mysql-slow.log  
  
performance_schema = 0  
explicit_defaults_for_timestamp  
  
#lower_case_table_names = 1 #不区分大小写  
  
skip-external-locking #MySQL选项以避免外部锁定。该选项默认开启  
  
default-storage-engine = InnoDB #默认存储引擎  
  
innodb_file_per_table = 1  
# InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间  
# 独立表空间优点:  
# 1.每个表都有自已独立的表空间。  
# 2.每个表的数据和索引都会存在自已的表空间中。  
# 3.可以实现单表在不同的数据库中移动。  
# 4.空间可以回收(除drop table操作处,表空不能自已回收)  
# 缺点:  
# 单表增加过大,如超过100G  
# 结论:  
# 共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时,请合理调整:innodb_open_files  
  
innodb_open_files = 500  
# 限制Innodb能打开的表的数据,如果库里的表特别多的情况,请增加这个。这个值默认是300  
  
innodb_buffer_pool_size = 64M  
# InnoDB使用一个缓冲池来保存索引和原始数据, 不像MyISAM.  
# 这里你设置越大,你在存取表里面数据时所需要的磁盘I/O越少.  
# 在一个独立使用的数据库服务器上,你可以设置这个变量到服务器物理内存大小的80%  
# 不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸.  
# 注意在32位系统上你每个进程可能被限制在 2-3.5G 用户层面内存限制,  
# 所以不要设置的太高.  
  
innodb_write_io_threads = 4  
innodb_read_io_threads = 4  
# innodb使用后台线程处理数据页上的读写 I/O(输入输出)请求,根据你的 CPU 核数来更改,默认是4  
# 注:这两个参数不支持动态改变,需要把该参数加入到my.cnf里,修改完后重启MySQL服务,允许值的范围从 1-64  
  
innodb_thread_concurrency = 0  
# 默认设置为 0,表示不限制并发数,这里推荐设置为0,更好去发挥CPU多核处理能力,提高并发量  
  
innodb_purge_threads = 1  
# InnoDB中的清除操作是一类定期回收无用数据的操作。在之前的几个版本中,清除操作是主线程的一部分,这意味着运行时它可能会堵塞其它的数据库操作。  
# 从MySQL5.5.X版本开始,该操作运行于独立的线程中,并支持更多的并发数。用户可通过设置innodb_purge_threads配置参数来选择清除操作是否使用单  
# 独线程,默认情况下参数设置为0(不使用单独线程),设置为 1 时表示使用单独的清除线程。建议为1  
  
innodb_flush_log_at_trx_commit = 2  
# 0:如果innodb_flush_log_at_trx_commit的值为0,log buffer每秒就会被刷写日志文件到磁盘,提交事务的时候不做任何操作(执行是由mysql的master thread线程来执行的。  
# 主线程中每秒会将重做日志缓冲写入磁盘的重做日志文件(REDO LOG)中。不论事务是否已经提交)默认的日志文件是ib_logfile0,ib_logfile1  
# 1:当设为默认值1的时候,每次提交事务的时候,都会将log buffer刷写到日志。  
# 2:如果设为2,每次提交事务都会写日志,但并不会执行刷的操作。每秒定时会刷到日志文件。要注意的是,并不能保证100%每秒一定都会刷到磁盘,这要取决于进程的调度。  
# 每次事务提交的时候将数据写入事务日志,而这里的写入仅是调用了文件系统的写入操作,而文件系统是有 缓存的,所以这个写入并不能保证数据已经写入到物理磁盘  
# 默认值1是为了保证完整的ACID。当然,你可以将这个配置项设为1以外的值来换取更高的性能,但是在系统崩溃的时候,你将会丢失1秒的数据。  
# 设为0的话,mysqld进程崩溃的时候,就会丢失最后1秒的事务。设为2,只有在操作系统崩溃或者断电的时候才会丢失最后1秒的数据。InnoDB在做恢复的时候会忽略这个值。  
# 总结  
# 设为1当然是最安全的,但性能页是最差的(相对其他两个参数而言,但不是不能接受)。如果对数据一致性和完整性要求不高,完全可以设为2,如果只最求性能,例如高并发写的日志服务器,设为0来获得更高性能  
  
innodb_log_buffer_size = 2M  
# 此参数确定些日志文件所用的内存大小,以M为单位。缓冲区更大能提高性能,但意外的故障将会丢失数据。MySQL开发人员建议设置为1-8M之间  
  
innodb_log_file_size = 32M  
# 此参数确定数据日志文件的大小,更大的设置可以提高性能,但也会增加恢复故障数据库所需的时间  
  
innodb_log_files_in_group = 3  
# 为提高性能,MySQL可以以循环方式将日志文件写到多个文件。推荐设置为3  
  
innodb_max_dirty_pages_pct = 90  
# innodb主线程刷新缓存池中的数据,使脏数据比例小于90%  
  
innodb_lock_wait_timeout = 120   
# InnoDB事务在被回滚之前可以等待一个锁定的超时秒数。InnoDB在它自己的锁定表中自动检测事务死锁并且回滚事务。InnoDB用LOCK TABLES语句注意到锁定设置。默认值是50秒  
  
bulk_insert_buffer_size = 8M  
# 批量插入缓存大小, 这个参数是针对MyISAM存储引擎来说的。适用于在一次性插入100-1000+条记录时, 提高效率。默认值是8M。可以针对数据量的大小,翻倍增加。  
  
myisam_sort_buffer_size = 8M  
# MyISAM设置恢复表之时使用的缓冲区的尺寸,当在REPAIR TABLE或用CREATE INDEX创建索引或ALTER TABLE过程中排序 MyISAM索引分配的缓冲区  
  
myisam_max_sort_file_size = 10G  
# 如果临时文件会变得超过索引,不要使用快速排序索引方法来创建一个索引。注释:这个参数以字节的形式给出  
  
myisam_repair_threads = 1  
# 如果该值大于1,在Repair by sorting过程中并行创建MyISAM表索引(每个索引在自己的线程内)    
  
interactive_timeout = 28800  
# 服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。默认值:28800秒(8小时)  
  
wait_timeout = 28800  
# 服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,  
# 取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。参数默认值:28800秒(8小时)  
# MySQL服务器所支持的最大连接数是有上限的,因为每个连接的建立都会消耗内存,因此我们希望客户端在连接到MySQL Server处理完相应的操作后,  
# 应该断开连接并释放占用的内存。如果你的MySQL Server有大量的闲置连接,他们不仅会白白消耗内存,而且如果连接一直在累加而不断开,  
# 最终肯定会达到MySQL Server的连接上限数,这会报'too many connections'的错误。对于wait_timeout的值设定,应该根据系统的运行情况来判断。  
# 在系统运行一段时间后,可以通过show processlist命令查看当前系统的连接状态,如果发现有大量的sleep状态的连接进程,则说明该参数设置的过大,  
# 可以进行适当的调整小些。要同时设置interactive_timeout和wait_timeout才会生效。  
  
[mysqldump]  
quick  
max_allowed_packet = 16M #服务器发送和接受的最大包长度  
  
[myisamchk]  
key_buffer_size = 8M  
sort_buffer_size = 8M  
read_buffer = 4M  
write_buffer = 4M

 

参考:

https://blog.csdn.net/dc_726/article/details/12340349

https://blog.csdn.net/dc_726/article/details/9336193

https://blog.linuxeye.cn/380.html

wordpress-上传文件类型限制

楼主想上传一个脚本文件到wordpress,但是 发现 由于安全限制,无法上传。

文件类型不符合安全规则。试试别的文件。

这种错误是由于WordPress中做了文件上传格式的限制,这种限制可以在WordPress中的wp-include/functions.php的get_allowed_mime_types函数中找到,函数如下:

function get_allowed_mime_types() {
static $mimes = false;
if ( !$mimes ) {
// Accepted MIME types are set here as PCRE unless provided.
$mimes = apply_filters( ‘upload_mimes’, array(
‘jpg|jpeg|jpe’ => ‘image/jpeg’,
‘gif’ => ‘image/gif’,
‘png’ => ‘image/png’,
‘bmp’ => ‘image/bmp’,
‘tif|tiff’ => ‘image/tiff’,
‘ico’ => ‘image/x-icon’,
‘asf|asx|wax|wmv|wmx’ => ‘video/asf’,
‘avi’ => ‘video/avi’,
‘divx’ => ‘video/divx’,
‘flv’ => ‘video/x-flv’,
‘mov|qt’ => ‘video/quicktime’,
‘mpeg|mpg|mpe’ => ‘video/mpeg’,
‘txt|c|cc|h’ => ‘text/plain’,
‘rtx’ => ‘text/richtext’,
‘css’ => ‘text/css’,
‘htm|html’ => ‘text/html’,
‘mp3|m4a’ => ‘audio/mpeg’,
‘mp4|m4v’ => ‘video/mp4′,
‘ra|ram’ => ‘audio/x-realaudio’,
‘wav’ => ‘audio/wav’,
‘ogg’ => ‘audio/ogg’,
‘mid|midi’ => ‘audio/midi’,
‘wma’ => ‘audio/wma’,
‘rtf’ => ‘application/rtf’,
‘js’ => ‘application/javascript’,
‘pdf’ => ‘application/pdf’,
‘doc|docx’ => ‘application/msword’,
‘pot|pps|ppt|pptx’ => ‘application/vnd.ms-powerpoint’,
‘wri’ => ‘application/vnd.ms-write’,
‘xla|xls|xlsx|xlt|xlw’ => ‘application/vnd.ms-excel’,
‘mdb’ => ‘application/vnd.ms-access’,
‘mpp’ => ‘application/vnd.ms-project’,
’swf’ => ‘application/x-shockwave-flash’,
‘class’ => ‘application/java’,
‘tar’ => ‘application/x-tar’,
‘zip’ => ‘application/zip’,
‘gz|gzip’ => ‘application/x-gzip’,
‘exe’ => ‘application/x-msdownload’,
// openoffice formats
‘odt’ => ‘application/vnd.oasis.opendocument.text’,
‘odp’ => ‘application/vnd.oasis.opendocument.presentation’,
‘ods’ => ‘application/vnd.oasis.opendocument.spreadsheet’,
‘odg’ => ‘application/vnd.oasis.opendocument.graphics’,
‘odc’ => ‘application/vnd.oasis.opendocument.chart’,
‘odb’ => ‘application/vnd.oasis.opendocument.database’,
‘odf’ => ‘application/vnd.oasis.opendocument.formula’,
) );
}
return $mimes;
}

以上传入 apply_filters函数中的Array,即使允许上传的类型列表,我们可以修改这个地方,以禁止或允许可以上传的文件类型。

例如我们想要允许rar文件上传,只需添加一行格式说明即可:

‘rar’ => ‘application/rar’,

除了直接修改这个Array外,还有另外一种方法,可以修改wp-config.php文件,这个文件在WordPress的根目录下,在其中增加一行语句:
define(‘ALLOW_UNFILTERED_UPLOADS’, true);

这条语句将去除上传的文件类型限制,一劳永逸。

转载自:https://www.cnblogs.com/kedarui/p/3627307.html

wordpress-修改26主题代码记录

修改twenty-sixteen主题代码记录

一、添加了底部日期和版权信息

需要修改 foot.php 文件

<div class="site-info">
				<?php
					/**
					 * Fires before the twentysixteen footer text for footer customization.
					 *
					 * @since Twenty Sixteen 1.0
					 */
					do_action( 'twentysixteen_credits' );
				?>
		
				<span class="site-title">
		© Copyright 2017 -&nbsp;<?php esc_attr_e(date('Y')); ?> &nbsp;|&nbsp;
<a href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a>
		|&nbsp;&nbsp;All Rights Reserved		
				</span>
				<a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentysixteen' ) ); ?>"><?php printf( __( 'Proudly powered by %s', 'twentysixteen' ), 'WordPress' ); ?></a>
				
			</div><!-- .site-info -->

二、添加了额外的主题的css样式

不需要修改文件,只需要在 appearance 的 customize里面的 additional css 里面添加就行了

@media screen and (min-width: 61.5625em){

body:not(.search-results) article:not(.type-page) .entry-content {
		float: right;
		width: 100%;
	}
	
}

@media screen and (min-width: 56.875em)
{
.sidebar {
    margin-left: 72%;
    width: 28%;
}
}

wordpress-子主题Child Theme

zh-cn:子主题

WordPress子主题也是一个主题,它继承了另一个主题——父主题——的功能,并允许你对父主题的功能进行修改,或者添加新功能。本文将说明如何创建一个基本的子主题并解释您能用它来干什么。本文将使用 WordPress 3.0 的默认主题 Twenty Ten 作为父主题进行举例说明。

创建一个子主题是很简单的。创建一个目录,将格式编写正确的 style.css 文件放进去,一个子主题就做成了!只需要对 HTML 和 CSS具有基本的了解,您就可以通过创建一个非常基本的子主题 来对一个父主题的样式和布局进行修改和扩展,而不需要对父主题的文件作任何修改。通过这样的方式,当父主题被更新的时候,您所做的修改就可以保存下来。

因为这个原因,我们强烈推荐您使用子主题的方式来对主题进行修改。

如果您对 PHP, WordPress Templates,和 WordPress Plugin API有个基本的理解,理论上来讲,您可以使用子主题对父主题的每一个方面进行扩展,而不需要对父主题的文件进行任何修改。

目录结构

子主题放在wp-content/themes目录下属于自己的目录里。下面的结构显示的就是子主题和它的父主题(Twenty Ten)在典型的WordPress目录结构中的位置:

  • public_html
    • wp-content
      • themes (主题存放的目录)
        • twentyten (示例中父主题Twenty Ten的目录)
        • twentyten-child (子主题存放的目录,可以任意命名)
          • style.css (子主题中不可或缺的文件,文件名必需为 style.css)

这个文件夹里面可以少至只包含一个style.css文件,也可以包含多至一个完整WordPress主题所拥有的文件:

  1. style.css (必需)
  2. functions.php (可选)
  3. Template files (可选)
  4. Other files (可选)

让我们看看它们是如何起作用的。

必需的style.css文件

style.css是一个子主题唯一必须的文件。它的头部提供的信息让WordPress辨认出子主题,并且重写父主题中的style.css文件

对于任何WordPress主题,头部信息必须位于文件的顶端,唯一的区别就是子主题中的Template:行是必须的,因为它让WordPress知道子主题的父主题是什么。

下面是一个style.css文件的头部信息的示例:

/*
Theme Name:     Twenty Ten Child
Theme URI:      http: //example.com/
Description:    Child theme for the Twenty Ten theme 
Author:         Your name here
Author URI:     http: //example.com/about/
Template:       twentyten
Version:        0.1.0
*/

逐行的简单解释:

  • Theme Name. (必需) 子主题的名称
  • Theme URI. (可选) 子主题的主页。
  • Description. (可选) 子主题的描述。比如:我的第一个子主题,真棒!
  • Author URI. (可选) 作者主页。
  • Author. (optional) 作者的名字。
  • Template. (必需) 父主题的目录名,区别大小写。 注意: 当你更改子主题名字时,要先换成别的主题。
  • Version. (可选) 子主题的版本。比如:0.1,1.0,等。

*/ 这个关闭标记的后面部分,就会按照一个常规的样式表文件一样生效,你可以把你想对WordPress应用的样式规则都写在它的后面。

要注意的是,子主题的样式表会替换父主题的样式表而生效。(事实上WordPress根本就不会载入父主题的样式表。)所以,如果你想简单地改变父主题中的一些样式和结构——而不是从头开始制作新主题——你必须明确的导入父主题的样式表,然后对它进行修改。下面的例子告诉你如何使用@import规则完成这个。

一个子主题的范例

这个例子中的父主题是Twenty Ten,我们喜欢这个主题的几乎每个部分,除了网站标题的颜色,因为我想把它从黑色的改成绿色的。使用子主题的话,只用完成以下三个简单的步骤:

  1. wp-content/themes目录下创建一个新目录,并将它命名为twentyten-child(或其他你喜欢的名称)。
  2. 将下面的代码保存在名为style.css的文件里,并将它放到新建的这个文件夹。
  3. 到WordPress的控制台>主题,然后激活你的新主题:Twenty Ten Child。
/*
Theme Name: Twenty Ten Child
Description: Child theme for the Twenty Ten theme 
Author: Your name here
Template: twentyten
*/

@import url("../twentyten/style.css");

#site-title a {
    color: #009900;
}

下面一步步解释上面代码的作用:

  1. /* 开启子主题的头部信息。
  2. Theme Name: 子主题名称的声明。
  3. Description: 主题的描述(可选,也可被省略)。
  4. Author: 作者名字的声明(可选,也可被省略)。
  5. Template: 声明子主题的父主题,换言之,父主题所在的文件夹的名称,区分大小写。
  6. */子主题头部信息的关闭标记。
  7. 用 @import规则将父主题的样式表调入
  8. #site-title a 定义网站标题的颜色(绿色),覆盖父主题中相同的样式规则。

注意 @import 规则

需要注意的是,@import 规则之前没有其他的CSS样式规则,如果你将其他的规则置于它之上,那么它将无效,并且父主题的样式表不会被导入。

使用 functions.php

不像style.css,子主题中的functions.php不会覆盖父主题中对应功能,而是将新的功能加入到父主题的functions.php中。(其实它会在父主题文件加载之前先载入。)

这样,子主题的functions.php提供了一个灵活稳定的方式来修改父主题的功能。如果你想在你的主题里加入一些PHP函数,最快的方式可能是打开functions.php文件然后加入进去。但那样并不灵活:下次你的主题升级更新了,你加入的新功能就会丢失掉。相反地,如果你使用子主题,将functions.php文件放进去,再将你想加入的功能写进这个文件里,那么这个功能同样会工作得很好,并且对于父主题以后的升级更新,子主题中加入的功能也不会受到影响。

functions.php文件的结构非常简单:将PHP起始标签置于顶部,关闭标签置于底部,它们之间就写上你自己的PHP函数。你可以写得很多,也可以写得很少,反正按你所需。下面的示例是一个基本的functions.php文件的写法,作用是将favicon链接加入到HTML页面的head元素里面。

<?php

function favicon_link() {
    echo '<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />' . "\n";
}
add_action('wp_head', 'favicon_link');

?>

给主题作者的提示。事实上子主题的functions.php首先加载意味着你的主题的用户功能可插入——即子主题是可替换的——通过有条件地进行声明。例如:

if (!function_exists('theme_special_nav')) {
    function theme_special_nav() {
        //  Do something.
    }
}

注意,替换的过程是在父级主题中,使用php的function_exits进行判断。 用这种方式,子主题可以替换父主题中的一个PHP函数,只需要简单地对它再次声明。

模板文件

模板文件 在子主题中的表现和style.css一样,它们会覆盖父主题中的相同文件。子主题可以覆盖任何父主题模板中的文件,只需要创建同名文件就行。(注意:index.php在WordPress3.0及以上版本才能被覆盖。)

同样,这项WordPress的功能允许你修改父主题的样式功能而不用去编辑父主题的文件,并且你的修改能让你在更新父主题后继续保留。

下面是一些使用模板文件的子主题的例子:

  • 增加一个父主题没有提供的模板(例如:网站地图页面的模板,或者一单栏页面,它们在页面编辑,模板选择里是可用的)
  • 增加一个比父模板更加具体的模板(见模板级别)。(例如:新加的tag.php模板用于按tag归档的文章来代替父主题中通常的archive.php模板。)
  • 替换父主题中的一个模板.(例:使用你自己的home.php来覆盖父主题中的home.php

其他文件

除了style.css,functions.php,index.php和home.php,子主题可以使用任何正式主题使用的类型的文件,只要文件被正确链接。打个比方,你可以使用在样式表里或者Javascript文件里链接的图标、图片,或者从functions.php文件中调用出来的额外PHP文件。

转载自:https://codex.wordpress.org/Child_Themes

wordpress-好用插件介绍

一、系统安全类

1、Wordfence Security
wordpress 老牌 防火墙插件,必装。

2、Google Authenticator
wordpress 后台登录两步验证插件,提升安全性。

3、Disable XML-RPC / Disable XML-RPC Pingback
关闭远程调用接口,接口是为移动端发博客调用的,但会被黑客利用,所以jing

二、系统优化类

1、EWWW Image Optimizer
对上传的图片进行压缩的插件。

2、W3 Total Cache
建立网站缓存的插件。

3、Accelerated Mobile Pages 
AMP 网站搜索,文章迅速加载插件。

三、文章编辑类

1、Black Studio TinyMCE Widget
wordpress  可以编辑文本的 网页小工具。

2、TinyMCE Advanced
增强版,wordpress 文章编辑软件,可以满足一般的使用需求了。

3、Crayon Syntax Highlighter
wordpress 代码编辑插件,可以方便的在文章中插入代码片段。风格比较多,覆盖比较全。

4、SyntaxHighlighter Evolved
wordpress 代码编辑插件,可以方便的在文章中插入代码片段。风格和前一种不同。

四、实用工具类

1、Collapsing Archives
一款将文章按月份自动收纳展开的插件。

2、Collapsing Categories
一款将文章按类别自动收纳展开的插件。

3、Media Library Assistant
一款对网站图片视频资源分类管理插件

4、Phoenix Media Rename
一款网站媒体资源重命名插件

5、Private content
可以在文章中,根据用户角色,判断是否能展示 文章部分隐藏内容。

6、User Access Manager
用户权限管理,可以设置哪些类别,文章,能被哪些用户访问。

7、Top 10
统计网站最流行的文章插件

8、WP Statistics
网站数据统计插件,统计网站各项数据

9、WP User Avatar
修改网站头像插件

10、wpDiscuz
网站论坛插件,在文章回复中添加验证码模块

11、Easy Table of Contents
有widget插件,可以自动生成文章目录,方便阅读

12、Q2W3 Fixed Widget

将侧边栏控件,自由设置固定还是滚动

五、网站维护类

1、Search & Replace
域名替换插件,可以替换数据库中所有域名信息。

2、UpdraftPlus – Backup/Restore
网站备份还原插件

六、界面美化类

1、weichuncai(WP伪春菜)
一款wordpress 桌面精灵插件。

2、Calendar Event
一款好看的日历插件

3、Responsive Lightbox
一款不错的网页图片浏览插件

wordpress 5.0 后,采用 simple code block 代码高亮插件

wordpress-代码高亮插件

一、SyntaxHighlighter Evolved

使用方法:
[code language="css"]
your code here
[/code]

The language (or lang) parameter controls how the code is syntax highlighted. The following languages are supported:高亮插件支持的语言有如下

actionscript3
bash
clojure
coldfusion
cpp
csharp
css
delphi
diff
erlang
fsharp
go
groovy
html
java
javafx
javascript
latex (you can also render LaTeX)
matlab (keywords only)
objc
perl
php
powershell
python
r
ruby
scala
sql
text
vb
xml
If the language parameter is not set, it will default to “text” (no syntax highlighting).

Code in between the source code tags will automatically be encoded for display, you don’t need to worry about HTML entities or anything.

二、Crayon Syntax Highlighter

可视化操作

三、simple code block

<!-- 古登堡编辑器,wordpress 5.0后 就采用这个了 -->
<?php>
asd
</php>

wordpress-零基础搭建个人博客

一、买域名和服务器主机(或网站空间)

1、购买一台服务器主机(vps),购买网站空间也可以。(服务器主机用处更多,不仅仅可以建网站,网站空间的话只能搭建网站了)

楼主购买的是vps 主机,方便以后的个性化需求和维护。

2、想好一个网站名(域名),或者 不买域名 直接用 ip 访问 网站。

去域名 公司购买 域名:

然后设置 域名 解析  A记录。

大陆地区购买的域名可能需要先实名认证一下吧,请留意。

有些服务器厂家可能提供了,空间,只能用域名跳转,解析方式是cname

配置vps主机,搭建网站服务器环境。
楼主,用  centos7 系统镜像 部署的 服务器。部署完 后,直接 reboot 重启 服务器 就行了。

二、远程操作centos7配置网站空间

1、利用SSH远程 登入 centos7,方便后续操作。
SSH远程连接入门

2、加固 centos7 安全性:

(1)、更新centos7系统
(2)、解决系统编码问题
(3)、开启 防火墙。

# systemctl start  firewalld

(4)、修改SSH默认端口SSH只用密钥登录

3、安装VNC软件,进行远程访问
(为了提高安全性,使用SSH端口转发,登入服务器)
vnc远程连接配置与入门

4、安装 nginx+php+mysql 软件
centos7 安装nginx
centos7 安装php7
centos7 安装mysql

三、安装wordpress

1、新建一个nginx配置文件

为了方便后续操作统一,可以用vnc访问服务器,在/etc/nginx/conf.d

文件夹下面,创建一个 wp.conf

文件内容如下:

server {
    listen       80;
    server_name  example.net , www.example.net;
 
    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;
 
    root   /var/www/www.example.net;  #wordpress location
    index index.php index.html index.htm;
 
 
    location / {
 
        # try_files $uri $uri/ =404;
         try_files $uri $uri/ /index.php?q=$uri&args;
 
    }
 
    error_page  404              /404.html;
 
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
 
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}
 
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass   127.0.0.1:9000;
      # fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
 
    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
 
     location ~ ^/\.user\.ini {
        deny all;
     }
 
}

需要修改两处地方

# 第一处 server_name ,如果买了域名了,将域名 替换到下面的 地方,如果没有买 直接填入 远程主机 ip
  server_name  example.net , www.example.net;
 
# 第二处 root 网站存放目录 ,为了 方便 统一管理,我们就简单改成  root   /var/www/wp.com; 
 root   /var/www/www.example.net;  #wordpress location

配置完成后,运行

nginx -s reload

重新加载 配置文件。

2、新建一个数据库和数据库用户
(也可以用mysql 客户端 直接新建 数据库 )
In the example below, testdb is the name of the database, testuser is the user, and passwordis the user’s password.

create database testdb;
create user 'testuser'@'localhost' identified by 'password';
grant all on testdb.* to 'testuser' identified by 'password';

【为了方便后续操作中,实际将 testdb 取名为 wpdb ,testuser 取名 wpuser,password  自己设置一个 ,别忘记了,后面安装 wordpress 需要输入】

3、下载 wordpress
用 VNC 直接 使用 服务器的 浏览器,下载 wordpress。然后 解压到 /var/www/ 目录下 ,并将 解压的文件夹 重命名为 wp.com

4、更改 wordpress 文件夹权限。
可以使用 SSH 或者 vnc 调用终端

# 设置文件夹权限
chmod 755 -R /var/www/wp.com
# 设置文件夹所有者
chown -R apache:apache  /var/www/wp.com

5、浏览器输入 域名 或者 ip,就可以直接 访问了。
然后进行一些 简单设置 就可以 完成了。

后面就可以自己设置了,wordpress 就已经安装完成了。后面就是看 个人 爱好,装一些 wordpress 插件了。