jwj 发布的文章

在使用input propertychange事件时,遇到一个问题。我输入一个字时,会重复执行五六次事件,事件里又包含了网络请求,体验非常差。经过搜索,找到了解决办法,详情如下。

代码

// 监听textarea的输入
$(document).on('input propertychange', 'textarea', function () {
    var detailsElement = $(this),
        details = $(this).val();
    // 确保是propertychange事件,并且是改变了内容
    if (window.event && event.type == 'propertychange' && event.propertyName != 'value')
        return;

    // 清除旧的定时器
    window.clearTimeout($(this).data('timeout'));
    // 设置新的定时器
    $(this).data('timeout', setTimeout(function () {
        // 这里放置要执行的代码
        console.log('值改变了~输入值:' + details);
    }, 5000)); // 延时值:5000 = 5秒
});

原理

1.监听textarea多行文本输入框的inputpropertychange事件
2.事件触发后,判断是否是propertychange事件,并且是改变内容的propertychange事件
3.清除旧的定时器,然后设置新的定时器。这样在一定时间内,回调函数不会重复执行,只会执行一次。

最近做一个项目,需要用到Gmail邮箱发送邮件,但发现发送不出去。
排查问题时,需要用到dig命令,但使用时,却提醒我dig命令不存在~
那就安装吧,习惯性的运行yum install dig,却提示我没这个包?
微信截图_20181017092818.png

经过查找资料,原来dig命令属于bind-utils工具包,安装这个包之后就可以使用dig命令了。

yum install bind-utils

最近有个做招聘网站的客户提出了个修改要求,要求报名列表上的某个元素可点击,点击后可以录取这个人。
这不是日了个狗了嘛,现在的列表项的每项是用a标签包着的,并且是多处调用这里,所以不能将a标签改成其它。
不过也得满足不是。
经过一番查找,找到一个方法:阻止冒泡事件

代码如下:

<div class="list">
    <a href="" class="list-item">
        麻花藤<br/>
        2018-10-15 18:52:33<br/>
        <!-- 给span元素加上pass类,点击这丫的录取此人 -->
        <span class="pass">点击录取</span>
    </a>
    <a href="" class="list-item">
        马云<br/>
        2018-10-15 18:52:33<br/>
        <span class="pass">点击录取</span>
    </a>
    <a href="" class="list-item">
        王健林<br/>
        2018-10-15 18:52:33<br/>
        <span class="pass">点击录取</span>
    </a>
</div>
<script>
// 这里用了JQuery,很多人说过时了,但我还是挺喜欢用的,方便!
$(document).on('click', '.pass', function (e) {
    // 这里执行你要执行的动作,例如请求同意录取接口
    // .....

    // 阻止冒泡事件
    e.stopPropagation();
    // 取消默认动作
    return false;
});
</script>

作为一个习惯追新的人,最近把nginx升级到了1.15.2,修改站点配置并重新加载配置文件时,发现报警告。
虽然不影响正常,也不是处女座,但还是看不顺眼,经过一番百度 Google,终于找到原因和解决方法!

报错内容

nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in /usr/local/nginx/conf/vhost/test.ll00.cn:24

原因

新版本不推荐使用ssl指令,所以会发出一段警告。使用listen 443 ssl;代替

解决方法

在配置文件里,找到ssl on;,将其注释掉

# ssl on;

然后修改监听端口处的配置后面加上ssl

listen 443 ssl;

相关Nginx更新日志:

Changes with nginx 1.15.0                                        05 Jun 2018

    *) Change: the "ssl" directive is deprecated; the "ssl" parameter of the
       "listen" directive should be used instead.

    *) Change: now nginx detects missing SSL certificates during
       configuration testing when using the "ssl" parameter of the "listen"
       directive.

    *) Feature: now the stream module can handle multiple incoming UDP
       datagrams from a client within a single session.

    *) Bugfix: it was possible to specify an incorrect response code in the
       "proxy_cache_valid" directive.

    *) Bugfix: nginx could not be built by gcc 8.1.

    *) Bugfix: logging to syslog stopped on local IP address changes.

    *) Bugfix: nginx could not be built by clang with CUDA SDK installed;
       the bug had appeared in 1.13.8.

    *) Bugfix: "getsockopt(TCP_FASTOPEN) ... failed" messages might appear
       in logs during binary upgrade when using unix domain listen sockets
       on FreeBSD.

    *) Bugfix: nginx could not be built on Fedora 28 Linux.

    *) Bugfix: request processing rate might exceed configured rate when
       using the "limit_req" directive.

    *) Bugfix: in handling of client addresses when using unix domain listen
       sockets to work with datagrams on Linux.

    *) Bugfix: in memory allocation error handling.

如果没配置URL重写规则的情况下,每次访问都要加上index.php,看起来是没这么美观和方便的。
例如:http://test.ll00.cn/index.php/index/test/hello
本文主要记录Apache、Nginx和IIS配置。

Apache配置

站点配置:

<VirtualHost *:80>
    # 将PHP可以访问的文件限制到指定的目录树(http://php.net/manual/zh/ini.core.php#ini.open-basedir)
    # 配置这个主要是有些环境默认把open_basedir设置为DocumentRoot,导致thinkphp无法正常使用
    # 不是所有环境都这样,所有看情况配置
    php_admin_value open_basedir "/home/wwwroot/www.ll00.cn:/tmp/:/var/tmp/:/proc/"
    DocumentRoot "/home/wwwroot/www.ll00.cn/public"
    ServerName www.ll00.cn
    <Directory "/home/wwwroot/www.ll00.cn">
        SetOutputFilter DEFLATE
        Options FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
        DirectoryIndex index.html index.php
    </Directory>
</VirtualHost>

.htaccess配置:

需要Apache加载mod_rewrite.so模块,并且将AllowOverride配置项设置为All,例如AllowOverride All
框架安装后,默认提供一个.htaccess文件,里面就写好了重写规则,一般都是安装即用。
可以说,Apache是对thinkphp框架支持最好的了!

<IfModule mod_rewrite.c>
    Options +FollowSymlinks -Multiviews
    RewriteEngine on

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>

Nginx

站点配置

server
{
    listen 80;
    server_name www.ll00.cn;
    index index.php index.html index.htm default.php default.htm default.html;
    # 站点目录
    root /www/wwwroot/www.ll00.cn/public;
    
    # URL重写规则
    location / {
        if (!-e $request_filename){
            rewrite  ^(.*)$  /index.php?s=$1  last;   break;
        }
    }
}

IIS

IIS这个了解不大多,只是简单的尝试了下,后面坑太多,放弃了。

web.Config文件配置:

在IIS的高版本下面可以配置下面的URL重写规则,如果不行,再试试其它方式。
主要是rewrite节点的配置,如果配置文件已有其它配置,将rewrite节点的配置放在system.webServer内的最后面即可。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="OrgPage" stopProcessing="true">
                    <match url="^(.*)$" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{HTTP_HOST}" pattern="^(.*)$" />
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

https://www.iis.net/downloads/microsoft/url-rewrite