个人统计

用户名: 没楼可以吗
等级: 初来乍到
威望: 0
在线时间: 4 小时
日志总数: 404
评论数量: 16
访问次数: 274947
建立时间: 2004-04-28
RSS订阅       手机访问

博主资料

留言短消息 加为好友 收藏

用户ID:  41
昵称:  没楼可以吗
来自:  山东 聊城
年龄:  保密

日历

2019 - 8
    123
45678910
11121314151617
18192021222324
25262728293031
«» 2019 - 8 «»

最近访问

日志分类

圈子信息

好友(0)

首页 前页 后页 尾页
1页,共 0 页

日志文章列表

2019年07月21日 11:46:40

linux tcpdump 抓包 tcpdump: packet printing is not supported for link type NFLOG: use -w

1. 安装tcpdump
安装命令:yum install tcpdump -y

2. tcpdump命令
NAME
      tcpdump - dump traffic on a network
SYNOPSIS
      tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
              [ -c count ]
              [ -C file_size ] [ -G rotate_seconds ] [ -F file ]
              [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
              [ --number ] [ -Q|-P in|out|inout ]
              [ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
              [ -W filecount ]
              [ -E spi@ipaddr algo:secret,...  ]
              [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
              [ --time-stamp-precision=tstamp_precision ]
              [ --immediate-mode ] [ --version ]
              [ expression ]

3. 基本应用

过滤主机IP:tcpdump -i eth0  host 104.238.132.163  说明:过滤经过网卡0,且主机IP为104.238.132.163的数据包
过滤端口:tcpdump -i eth0 det port 1234    说明:过滤经过网卡0,且端口为1234的数据包
过滤指定协议的数据包:tcpdump -i eth0 udp  说明:过滤经过网卡0的udp协议数据包
抓取本地环回数据包:tcpdump -i lo udp  说明:主要区别就是抓取的网卡,本地环回则取,lo,其它内容不变
抓取特定类型的数据包:   
抓取所有经过网卡1的SYN类型数据包 :tcpdump -i eth0 'tcp[tcpflags] = tcp-syn'
逻辑过滤语句:tcpdump -i eth1 '((tcp) and ((dst net 172.16) and (not dst host 192.168.1.200)))' 说明:抓取所有经过网卡1,目的网络是172.16,但目的主机不是192.168.1.200的TCP数据
抓包存取: tcpdump -i eth1 host 172.16.7.206 and port 80 -w /tmp/xxx.cap  说明:抓取所有经过网卡1,目的主机为
172.16.7.206的端口80的网络数据并存储

4. 遇到的问题
1. tcpdump: packet printing is not supported for link type NFLOG: use -w
    是因为默认网卡的问题,则通过ifconfig 查看一下当前的网卡信息
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.6.128  netmask 255.255.255.0  broadcast 192.168.6.255
        inet6 fe80::ef0d:79fa:8ef6:3358  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:6e:fe:db  txqueuelen 1000  (Ethernet)
        RX packets 1895  bytes 127294 (124.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3245  bytes 803811 (784.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 64  bytes 5568 (5.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 64  bytes 5568 (5.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
对应的网卡是,ens33 ,则执行,tcpdump -i ens33 即可

2. 抓包并写入文件中:tcpdump -i ens33 -c 5000 -w one.cap 此条命令的意思是,监听ens33网卡,抓5000个包停止,并将文件写入one.cap文件中

3. 停止抓包:ctrl + c  或者 找到tcpdump 的进程id pid ,然后通过 kill -9 [pid] 去关闭

类别: 无分类 |  评论(0) |  浏览(28) |  收藏
2019年07月21日 11:41:47

tcpdump: Couldn't find user 'tcpdump' CentOS 7.0

1. tcpdump 安装
tcpdump: Couldn't find user 'tcpdump';
    找不到用户,可能是安装前passwd等文件被锁定了,安装时不能创建“tcpdump” 需要在安装的时候打开这几个文件修改权限
lsattr /etc/passwd 查看是否被chattr锁定
在/etc/passwd 等几个文件都用chattr锁定了
于是:(chattr  +i :锁定文件,-i:解锁文件),导致的原因是密码文件被锁定,导致tcpdump用户无法条件,最终造成其无法找到对应的用户命令。

yum remove tcpdump
chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow
yum install  tcpdump

2. tcpdump使用
    可以用tcpdump -i 网卡 -w /filename 将抓到的数据存到文件中 然后在用 wireshark等工具分析数据包

3. 基本参数
dst 目的IP
src 源IP
port 端口
-i  any/指定网卡
-n:对地址以数字方式显式,否则显式为主机名,也就是说-n选项不做主机名解析
-nn:除了-n的作用外,还把端口显示为数值,否则显示端口服务名
-v:当分析和打印的时候,产生详细的输出。(包含协议)
-vv:产生比-v更详细的输出。
-vvv:产生比-vv更详细的输出。
-c:指定要抓取的包数量。注意,是最终要获取这么多个包。例如,指定"-c 10"将获取10个包,但可能已经处理了100个包,只不过只有10个包是满足条件的包。

类别: 无分类 |  评论(0) |  浏览(27) |  收藏
2019年07月08日 09:32:55

2019年前端必用正则(js)

来源: https://any86.github.io/any-rule/
手机号
/^1((3[\d])|(4[5,6,9])|(5[0-3,5-9])|(6[5-7])|(7[0-8])|(8[1-3,5-8])|(9[1,8,9]))\d{8}$/
大写字母
/^[A-Z]+$/
日期,如: 2000-01-01
/^\d{4}(-)\d{1,2}\1\d{1,2}$/
email地址
/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
国内座机电话,如: 0341-86091234
/\d{3}-\d{8}|\d{4}-\d{7}/
身份证号(15位、18位数字),最后一位是校验位,可能为数字或字符X
/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线组合
/^[a-zA-Z][a-zA-Z0-9_]{4,15}$/
只包含中文
/^[\u4E00-\u9FA5]/
是否小数
/^\d+\.\d+$/
是否电话格式(手机和座机)
/^((0\d{2,3}-\d{7,8})|(1[345789]\d{9}))$/
是否8位纯数字
/^[0-9]{8}$/
是否html标签
/<(.*)>.*<\/\1>|<(.*) \/>/
是否qq号格式正确
/^[1-9]*[1-9][0-9]*$/
是否由数字和字母组成
/^[A-Za-z0-9]+$/
是否小写字母组成
/^[a-z]+$/
密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
/^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/
用户名正则,4到16位(字母,数字,下划线,减号)
/^[a-zA-Z0-9_-]{4,16}$/
ipv4地址正则
/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
16进制颜色
/^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/
微信号,6至20位,以字母开头,字母,数字,减号,下划线
/^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/
中国邮政编码
/^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$/
只包含中文和数字
/^(([\u4E00-\u9FA5])|(\d))+$/
非字母
/[^A-Za-z]/

类别: 无分类 |  评论(0) |  浏览(47) |  收藏
2019年06月18日 10:57:30

安装pip 出现 resources.DistributionNotFound 'pip==7.1.0' 'distribute==0.6.0'

错误1:
pkg_resources.DistributionNotFound: The 'pip==7.1.0' distribution was not found and is required by the application

1. 安装
将 pip-9.0.1-py2.7.egg 拷贝到 /usr/local/python2.7/lib/python2.7/site-packages/

2. 修改  vi /usr/bin/pip
  pip==7.1.0 改为 pip==9.0.1


错误2:
pkg_resources.DistributionNotFound: The 'distribute==0.6.0' distribution was not found and is required by the application

# wget http://pypi.python.org/packages/source/d/distribute/distribute-0.6.10.tar.gz
# tar xf distribute-0.6.10.tar.gz
# cd distribute-0.6.10
# python2.7 setup.py install

修改 vi /usr/bin/easy_install

distribute==0.6.0, 改为 distribute==0.6.10

---------------------
作者:zheng_lan_fang 来源:CSDN 原文:https://blog.csdn.net/zheng_lan_fang/article/details/79525763

类别: 无分类 |  评论(0) |  浏览(72) |  收藏
2019年05月30日 19:38:20

VLC is not supposed to be run as root. Sorry.

Today i captured one tutorial using recordmydesktop utility on my backtrack and decided to view it but unfortunately backtrack 5 Linux didn’t include a good media player to do entertainment  when you get bored with dirty work.

Anyways, i installed vlc using following command ;
aptitude install vlc

And tried to run vlc as root i got error on my terminal ;
vlc

VLC is not supposed to be run as root. Sorry.
If you need to use real-time priorities and/or privileged TCP ports
you can use vlc-wrapper (make sure it is Set-UID root and
cannot be run by non-trusted users first).

This error says straight forward vlc can not be run as root privileged user. What to do now? Don’t be panic. Here is the hacked solution
vi /usr/bin/vlc
search for geteuid and replace it with getppid

Save file & Exit.

Now it should work, try to run it again

Note : This is a very bad practice to run certain application with administrative rights. Do it at your own risk!

From: https://www.cnblogs.com/SoulSpirit/p/3320546.html

类别: 无分类 |  评论(0) |  浏览(68) |  收藏
2019年05月30日 08:51:50

php mysql.sock PHP站点提示/var/lib/mysql/mysql.sock不存在的解决方法

服务器环境,运行着php开发的站点,速度突然很慢,连ssh连接缓慢,提示错误:
[Type] 无法连接到数据库服务器
[2002] Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (13)

类似的问题,出现了无法连接数据库的问题,服务器依然很慢。

问题分析:
  用SSH可以连接到数据库,在本地用工具也可以连接到服务器上的数据库,但是只要是PHP的网站程序都访问不了。
    估计也有很多站长同学也会经常性遇到这种问题,对于新手站长,这个问题还真让人迷糊。
    这多是由于mysql是使用rpm方式安装的,它会自动寻找 /var/lib/mysql/mysql.sock 这个文件,通过unix socket登录mysql。
    那么这个错误就是/var/lib/mysql/下没有mysql.sock 这个文件。

解决办法:
1、修改mysql.sock位置:
创建(修改)文件 /etc/my.cnf,至少增加(修改)一行

代码示例:[mysql]
[client]
socket = /tmp/mysql.sock
#在这里写上mysql.sock的正确位置,通常不是在 /tmp/ 下就是在 /var/lib/mysql/ 下

2、修改连接方式:
指定IP地址,使用tcp方式连接mysql,而不使用本地sock方式
代码示例:#mysql -h127.0.0.1 -uuser -ppassword

3、创建链接
为 mysql.sock 加个链接,比如说实际的mysql.sock在 /tmp/ 下,则键入命令:
代码示例:#ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock
    以上三种解决方法,任选其一均可解决问题,完成后重启php、nginx(或apache)即可。

类别: 无分类 |  评论(0) |  浏览(76) |  收藏
2019年05月29日 16:09:03

Nginx 报错 413 Request Entity Too Large 的解决方法

报错信息
413 Request Entity Too Large

解决方法
修改 php 的配置文件 /etc/php5/fpm/php.ini
upload_max_filesize = 20M 
post_max_size = 20M

修改 Nginx 的配置文件
server { 
    ... 
    client_max_body_size 20m; 
    ... 
}
重启 Nginx 服务和 php-fpm 服务即可。

类别: 无分类 |  评论(0) |  浏览(53) |  收藏
2019年04月23日 10:00:21

python no module named psutil 解决

参加:ServerStatus 安装 No module named psutil 解决
2017/05/29 0条评论 1,097次阅读 1人点赞

    ServerStatus 源: https://github.com/tenyue/ServerStatus 是https://github.com/BotoX/ServerStatus 项目的中文(优化)版。
作用:展示vps流量 硬盘 内存等信息 又名: 云探针

    安装时遇到问题是 vps本身python版本是2.7的 因为装55后 有3.4版本共存 导致pip安装 psutil 时 安装到3.4上了 谷歌之 下载源码安装可解决

# wget https://pypi.python.org/packages/source/p/psutil/psutil-2.1.3.tar.gz
# tar zxvf psutil-2.1.3.tar.gz
# cd psutil-2.1.3/
# python setup.py install

类别: 无分类 |  评论(0) |  浏览(101) |  收藏
2019年04月22日 13:48:46

ss5 关闭日志 SOCKS5代理服务器 ss5日志导致的问题

头段时间在加拿大的一台server上配置ss5, 自己要用嘛, 都知道现在封了N多网站~~

后来出现了服务器的上的mysql挂掉, 我重启动了几次都失败, 看了下mysql的err log, 发现类似一下的错误:

/usr/sbin/mysqld: Error writing file

Turning logging off for the whole duration of the MySQL server process. To turn it on again: fix the cause, shutdown the MySQL server and restart it.


我看了下日志文件, 属性什么都正常, 这时候想起N久以前犯的愚蠢的错误, df了下, 果然,var分区满了, 被ss5的log塞满啦~~~虽然只有几G, 当时分区的时候管理员把var分的太小

我修改了一下/etc/init.d/ss5

start)
# Start daemon.
echo -n “Starting ss5… ”
if [ $OS = “Linux” ]; then
daemon /usr/sbin/ss5 -m -t $SS5_OPTS
touch /var/lock/subsys/ss5
if [ $OS = “SunOS” ]; then
/usr/sbin/ss5 -m -t
touch /var/lock/subsys/ss5
else
/usr/local/sbin/ss5 -m -t
fi
echo “done”
fi
;;

其实就是增加了-m, 这个参数就是不记录ss5的日志, 这日志可读性不大, 就不留了

类别: 无分类 |  评论(0) |  浏览(142) |  收藏
2019年04月22日 11:38:23

Linux nohup 命令详解

nohup命令及其输出文件

  今天在linux上部署wdt程序,在SSH客户端执行./start-dishi.sh,启动成功,在关闭SSH客户端后,运行的程序也同时终止了,怎样才能保证在推出SSH客户端后程序能一直执行呢?通过网上查找资料,发现需要使用nohup命令。

完美解决方案:nohup ./start-dishi.sh >output 2>&1 &
现对上面的命令进行下解释

用途:不挂断地运行命令。
语法:nohup Command [ Arg ... ] [ & ]
描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。

操作系统中有三个常用的流:
  0:标准输入流 stdin
  1:标准输出流 stdout
  2:标准错误流 stderr
  一般当我们用 > console.txt,实际是 1>console.txt的省略用法;< console.txt ,实际是 0 < console.txt的省略用法。


下面步入正题:
>nohup ./start-dishi.sh >output 2>&1 &
解释:
1. 带&的命令行,即使terminal(终端)关闭,或者电脑死机程序依然运行(前提是你把程序递交到服务器上);
2. 2>&1的意思
  这个意思是把标准错误(2)重定向到标准输出中(1),而标准输出又导入文件output里面,所以结果是标准错误和标准输出都导入文件output里面了。 至于为什么需要将标准错误重定向到标准输出的原因,那就归结为标准错误没有缓冲区,而stdout有。这就会导致 >output 2>output 文件output被两次打开,而stdout和stderr将会竞争覆盖,这肯定不是我门想要的.
  这就是为什么有人会写成: nohup ./command.sh >output 2>output出错的原因了
=================================
最后谈一下/dev/null文件的作用,这是一个无底洞,任何东西都可以定向到这里,但是却无法打开。 所以一般很大的stdou和stderr当你不关心的时候可以利用stdout和stderr定向到这里>./command.sh >/dev/null 2>&1

类别: 无分类 |  评论(0) |  浏览(88) |  收藏
2019年04月03日 17:21:06

CentOS 7.1系统自动重启的Bug定位过程

【问题】

有同事反应最近有多台MongoDB的服务器CentOS 7.1系统会自动重启,分析了下问题原因。



【排查过程】

1、 检查系统日志/var/log/message,并没有记录异常信息,journalctl相关日志只记录发生过重启

2、 系统默认配置了kdump,使用crash工具分析/var/crash下的转储文件vmcore,命令如下:

crash /usr/lib/debug/lib/modules/3.10.0-327.36.3.el7.x86_64/vmlinux /tmp/vmcore

3、 可以看到kernel crash时的Call Trace,关键信息标注为黄色字体

crash> bt

PID: 9979  TASK: ffff8804b4020b80  CPU: 2  COMMAND: "crond"

#0 [ffff8804b42db778] machine_kexec at ffffffff81051e9b

#1 [ffff8804b42db7d8] crash_kexec at ffffffff810f27e2

#2 [ffff8804b42db8a8] oops_end at ffffffff8163f448

#3 [ffff8804b42db8d0] no_context at ffffffff8162f561

#4 [ffff8804b42db920] __bad_area_nosemaphore at ffffffff8162f5f7

#5 [ffff8804b42db968] bad_area at ffffffff8162f91b

#6 [ffff8804b42db990] __do_page_fault at ffffffff81642235

#7 [ffff8804b42db9f0] trace_do_page_fault at ffffffff81642403

#8 [ffff8804b42dba28] do_async_page_fault at ffffffff81641ae9

#9 [ffff8804b42dba40] async_page_fault at ffffffff8163e678

    [exception RIP: netlink_compare+11]

    RIP: ffffffff815560bb  RSP: ffff8804b42dbaf8  RFLAGS: 00010246

    RAX: 0000000000000000  RBX: 000000049f250000  RCX: 00000000c3637c42

    RDX: 00000000000026fb  RSI: ffff8804b42dbb48  RDI: 000000049f24fb78

    RBP: ffff8804b42dbb30  R8: ffff8804b42dbb44  R9: 0000000000002170

    R10: 0000000000000000  R11: ffff8804b42db966  R12: ffff88061dcd2678

    R13: ffff8804b42dbb48  R14: ffffffff815560b0  R15: ffff88061b639000

    ORIG_RAX: ffffffffffffffff  CS: 0010  SS: 0018

#10 [ffff8804b42dbb00] rhashtable_lookup_compare at ffffffff813080d0

#11 [ffff8804b42dbb38] netlink_lookup at ffffffff815569ee

#12 [ffff8804b42dbb68] netlink_getsockbyportid at ffffffff81557d8f

#13 [ffff8804b42dbb80] netlink_alloc_skb at ffffffff81557dff

#14 [ffff8804b42dbbb8] netlink_ack at ffffffff8155a8a9

#15 [ffff8804b42dbbf0] audit_receive at ffffffff811067e7

#16 [ffff8804b42dbc18] netlink_unicast at ffffffff8155a02d

#17 [ffff8804b42dbc60] netlink_sendmsg at ffffffff8155a420

#18 [ffff8804b42dbcf8] sock_sendmsg at ffffffff815112d0

#19 [ffff8804b42dbe58] SYSC_sendto at ffffffff81511841

#20 [ffff8804b42dbf70] sys_sendto at ffffffff815122ce

#21 [ffff8804b42dbf80] system_call_fastpath at ffffffff81646b49

    RIP: 00007f4ac19d5353  RSP: 00007ffe233b1fb8  RFLAGS: 00010202

    RAX: 000000000000002c  RBX: ffffffff81646b49  RCX: 0000000000000000

    RDX: 000000000000009c  RSI: 00007ffe233b1ff0  RDI: 0000000000000003

    RBP: 00007ffe233b1ff0  R8: 00007ffe233b1fe0  R9: 000000000000000c

    R10: 0000000000000000  R11: 0000000000000246  R12: ffffffff815122ce

    R13: ffff8804b42dbf78  R14: 000000000000044d  R15: 0000000000000001

ORIG_RAX: 000000000000002c  CS: 0033  SS: 002b

4、在网上搜索,定位到这是kernel Linux 3.10.0-327.36.3.el7.x86_64的bug,详细描述可以参见下面,该bug在 7.3 kernel (3.10.0-514.el7)后修复

https://bugs.centos.org/view.php?id=12012

5、 但考虑到升级系统成本较高,后面尝试定位触发条件,可以看到触发这个bug是crond命令

PID: 9979  TASK: ffff8804b4020b80  CPU: 2  COMMAND: "crond"

6、 借助systemtap工具,在发生crash的kernel函数上加探针,kernel.function("rhashtable_lookup_compare")

抓取到crond等系统命令确实会调用上面的函数



7、考虑到Mongo最近新上了一套系统监控的脚本是通过crontab调度的,而上监控之前服务器重启的情况很少,猜测可能是crontab调度系统监控采集触发了kernel bug

后面计划将采集脚本改为服务的方式观察是否可以规避触发bug



【结论】

由于已发现当前CentOS 7.1存在自动重启的bug,建议后面新上的linux服务器都采用CentOS7.4的系统

Description:  CentOS Linux release 7.1.1503 (Core)

Release:  7.1.1503

Linux 3.10.0-327.36.3.el7.x86_64

类别: 无分类 |  评论(0) |  浏览(133) |  收藏
2019年03月11日 08:57:50

Nginx配置文件(nginx.conf)配置详解,对学习Nginx很有帮助

最近正在学习Nginx,看了一些比较有用处的文章在这里与大家共分享,同时也当做是笔记的收藏,这是我学习的一种方法,每天都要学会阅读一篇文章,利用空余的时间来提升一下自己,至少能了解一下技能知识。


Nginx 总的 配置文件 位置 /usr/local/nginx/conf/nginx.conf
nginx 正则匹配
一.正则表达式匹配,其中:
o    ~ 为区分大小写匹配
o    ~* 为不区分大小写匹配
o    !~和!~*分别为区分大小写不匹配及不区分大小写不匹配

二.文件及目录匹配,其中:
o    -f和!-f用来判断是否存在文件
o    -d和!-d用来判断是否存在目录
o    -e和!-e用来判断是否存在文件或目录
o    -x和!-x用来判断文件是否可执行

三.rewrite指令的最后一项参数为flag标记,flag标记有:
o    last 相当于apache里面的[L]标记,表示rewrite。
o    break本条规则匹配完成后,终止匹配,不再匹配后面的规则。
o    redirect 返回302临时重定向,浏览器地址会显示跳转后的URL地址。
o    permanent 返回301永久重定向,浏览器地址会显示跳转后的URL地址。

使用last和break实现URI重写,浏览器地址栏不变。
使用alias指令必须用last标记;
使用proxy_pass指令时,需要使用break标记。
Last标记在本条rewrite规则执行完毕后,会对其所在server{......}标签重新发起请求
break标记则在本条规则匹配完成后,终止匹配。
四.NginxRewrite 规则相关指令
1.break指令
使用环境:server,location,if;
该指令的作用是完成当前的规则集,不再处理rewrite指令。

2.if指令
使用环境:server,location
该指令用于检查一个条件是否符合,如果条件符合,则执行大括号内的语句。If指令不支持嵌套,不支持多个条件&&和||处理。

3.return指令
语法:return code ;
使用环境:server,location,if;
该指令用于结束规则的执行并返回状态码给客户端。
示例:如果访问的URL以".sh"或".bash"结尾,则返回403状态码
location ~ .*\.(sh|bash)?$
{
return 403;
}

4.rewrite 指令
语法:rewriteregex replacement flag
使用环境:server,location,if
该指令根据表达式来重定向URI,或者修改字符串。指令根据配置文件中的顺序来执行。注意重写表达式只对相对路径有效。如果你想配对主机名,你应该使用if语句
示例如下:
if ( $host ~* www\.(.*) )
{
set  $host_without_www $1;
rewrite  ^(.*)$  http://$host_without_www$1 permanent;
} 

5.Set指令
语法:setvariable value ; 默认值:none; 使用环境:server,location,if;
该指令用于定义一个变量,并给变量赋值。变量的值可以为文本、变量以及文本变量的联合。
示例:set $varname "hello world";

6.Uninitialized_variable_warn指令
语法:uninitialized_variable_warnon|off
使用环境:http,server,location,if
该指令用于开启和关闭未初始化变量的警告信息,默认值为开启。

五.Nginx的Rewrite规则编写实例
1.当访问的文件和目录不存在时,重定向到某个php文件
if ( !-e $request_filename )
{
  rewrite ^/(.*)$ index.php last;
}

2.目录对换 /123456/xxxx ====> /xxxx?id=123456
rewrite ^/(\d+)/(.+)/ /$2?id=$1 last;

3.如果客户端使用的是IE浏览器,则重定向到/ie目录下
if( $http_user_agent ~ MSIE)
{
rewrite ^(.*)$ /ie/$1 break;
}

4.禁止访问多个目录
location ~ ^/(cron|templates)/
{
deny all;
break;
}

5.禁止访问以/data开头的文件
location ~ ^/data
{
deny all;
}

6.禁止访问以.sh,.flv,.mp3为文件后缀名的文件
location ~ .*\.(sh|flv|mp3)$
{
return 403;
}

7.设置某些类型文件的浏览器缓存时间
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}

location ~ .*\.(js|css)$
{
expires 1h;
}
8.给favicon.ico和robots.txt设置过期时间;
这里为favicon.ico为99天,robots.txt为7天并不记录404错误日志
location ~(favicon.ico)
{
log_not_found off;
expires 99d;
break;
}

location ~(robots.txt)
{
log_not_found off;
expires 7d;
break;
}

9.设定某个文件的过期时间;这里为600秒,并不记录访问日志
location ^~ /html/scripts/loadhead_1.js
{
    access_log off;
    root /opt/lampp/htdocs/web;
    expires 600;
    break;
}

10.文件反盗链并设置过期时间
这里的return412 为自定义的http状态码,默认为403,方便找出正确的盗链的请求
“rewrite ^/ http://img.linuxidc.net/leech.gif;” 显示一张防盗链图片
“access_log off;” 不记录访问日志,减轻压力
“expires 3d”  所有文件3天的浏览器缓存
location ~*^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$
{
    valid_referers none blocked *.linuxidc.com*.linuxidc.net localhost 208.97.167.194;
    if ($invalid_referer)
    {
        rewrite ^/ http://img.linuxidc.net/leech.gif;
        return 412;
        break;
    }
    access_log off;
    root /opt/lampp/htdocs/web;
    expires 3d;
    break;
}

11.只允许固定ip访问网站,并加上密码
   root /opt/htdocs/www;
  allow 208.97.167.194;
  allow 222.33.1.2;
  allow 231.152.49.4;
  deny all;
  auth_basic “C1G_ADMIN”;
  auth_basic_user_file htpasswd;


12将多级目录下的文件转成一个文件,增强seo效果
/job-123-456-789.html 指向/job/123/456/789.html
rewrite ^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html last;

13.文件和目录不存在的时候重定向:
if (!-e $request_filename)
  {
   proxy_pass http://127.0.0.1;
  }

14.将根目录下某个文件夹指向2级目录
如/shanghaijob/ 指向 /area/shanghai/
如果你将last改成permanent,那么浏览器地址栏显是/location/shanghai/
rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;

上面例子有个问题是访问/shanghai时将不会匹配
rewrite ^/([0-9a-z]+)job$ /area/$1/ last;
rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;

这样/shanghai 也可以访问了,但页面中的相对链接无法使用,
如./list_1.html真实地址是/area/shanghia/list_1.html会变成/list_1.html,导至无法访问。
那我加上自动跳转也是不行咯
(-d $request_filename)它有个条件是必需为真实目录,而我的rewrite不是的,所以没有效果
if (-d $request_filename)
{
   rewrite ^/(.*)([^/])$ http://$host/$1$2/permanent;
}

知道原因后就好办了,让我手动跳转吧
rewrite ^/([0-9a-z]+)job$ /$1job/permanent;
rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
  
15.域名跳转
server
  {
    listen 80;
     server_name jump.linuxidc.com;
    index index.html index.htm index.php;
    root /opt/lampp/htdocs/www;
    rewrite ^/ http://www.linuxidc.com/;
    access_log off;
  }
  
16.多域名转向
server_name www.linuxidc.com www.linuxidc.net;
  index index.html index.htm index.php;
  root /opt/lampp/htdocs;
  if ($host ~ "linuxidc\.net") {
    rewrite ^(.*) http://www.linuxidc.com$1permanent;
  }
 
六.nginx全局变量
arg_PARAMETER #这个变量包含GET请求中,如果有变量PARAMETER时的值。
args #这个变量等于请求行中(GET请求)的参数,如:foo=123&bar=blahblah;
binary_remote_addr #二进制的客户地址。
body_bytes_sent #响应时送出的body字节数数量。即使连接中断,这个数据也是精确的。
content_length #请求头中的Content-length字段。
content_type #请求头中的Content-Type字段。
cookie_COOKIE #cookie COOKIE变量的值
document_root #当前请求在root指令中指定的值。
document_uri #与uri相同。
host #请求主机头字段,否则为服务器名称。
hostname #Set to themachine’s hostname as returned by gethostname
http_HEADER
is_args #如果有args参数,这个变量等于”?”,否则等于”",空值。
http_user_agent #客户端agent信息
http_cookie #客户端cookie信息
limit_rate #这个变量可以限制连接速率。
query_string #与args相同。
request_body_file #客户端请求主体信息的临时文件名。
request_method #客户端请求的动作,通常为GET或POST。
remote_addr #客户端的IP地址。
remote_port #客户端的端口。
remote_user #已经经过Auth Basic Module验证的用户名。
request_completion #如果请求结束,设置为OK. 当请求未结束或如果该请求不是请求链串的最后一个时,为空(Empty)。
request_method #GET或POST
request_filename #当前请求的文件路径,由root或alias指令与URI请求生成。
request_uri #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。不能修改。
scheme #HTTP方法(如http,https)。
server_protocol #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
server_addr #服务器地址,在完成一次系统调用后可以确定这个值。
server_name #服务器名称。
server_port #请求到达服务器的端口号。

七.Apache和Nginx规则的对应关系
Apache的RewriteCond对应Nginx的if
Apache的RewriteRule对应Nginx的rewrite
Apache的[R]对应Nginx的redirect
Apache的[P]对应Nginx的last
Apache的[R,L]对应Nginx的redirect
Apache的[P,L]对应Nginx的last
Apache的[PT,L]对应Nginx的last

例如:允许指定的域名访问本站,其他的域名一律转向www.linuxidc.net
Apache:

RewriteCond %{HTTP_HOST} !^(.*?)\.aaa\.com$[NC]
RewriteCond %{HTTP_HOST} !^localhost$
RewriteCond %{HTTP_HOST}!^192\.168\.0\.(.*?)$
RewriteRule ^/(.*)$ http://www.linuxidc.net[R,L]

Nginx:
if( $host ~* ^(.*)\.aaa\.com$ )
{
  set $allowHost '1';
}

if( $host ~* ^localhost )
{
  set $allowHost '1';
}

if( $host ~* ^192\.168\.1\.(.*?)$ )
{
  set $allowHost '1';
}

if( $allowHost !~ '1' )
{
  rewrite ^/(.*)$ http://www.linuxidc.netredirect ;
}

nginx conf 配置文件
nginx进程数,建议设置为等于CPU总核心数.

worker_processes 8;



全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]

error_log /var/log/nginx/error.log info;



进程文件

pid /var/run/nginx.pid;



一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。

worker_rlimit_nofile 65535;



工作模式与连接数上限

events

{

  #参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。

  use epoll;

  #单个进程最大连接数(最大连接数=连接数*进程数)

  worker_connections 65535;

}



设定http服务器

http

{



include mime.types; #文件扩展名与文件类型映射表

default_type application/octet-stream; #默认文件类型

#charset utf-8; #默认编码

server_names_hash_bucket_size 128; #服务器名字的hash表大小

client_header_buffer_size 32k; #上传文件大小限制

large_client_header_buffers 4 64k; #设定请求缓

client_max_body_size 8m; #设定请求缓

sendfile on; #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。

autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。

tcp_nopush on; #防止网络阻塞

tcp_nodelay on; #防止网络阻塞

keepalive_timeout 120; #长连接超时时间,单位是秒



#FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。

fastcgi_connect_timeout 300;

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

fastcgi_buffer_size 64k;

fastcgi_buffers 4 64k;

fastcgi_busy_buffers_size 128k;

fastcgi_temp_file_write_size 128k;



#gzip模块设置

gzip on; #开启gzip压缩输出

gzip_min_length 1k; #最小压缩文件大小

gzip_buffers 4 16k; #压缩缓冲区

gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)

gzip_comp_level 2; #压缩等级

gzip_types text/plain application/x-javascript text/css application/xml;

#压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。

gzip_vary on;

#limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用



upstream blog.ha97.com {

#upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。

server 192.168.80.121:80 weight=3;

server 192.168.80.122:80 weight=2;

server 192.168.80.123:80 weight=3;



}



虚拟主机的配置

server

{



listen 80;    #监听端口



    server_name aa.cn www.aa.cn ; #server_name end  #域名可以有多个,用空格隔开



index index.html index.htm index.php;  # 设置访问主页



    set $subdomain '';  # 绑定目录为二级域名 bbb.aa.com  根目录 /bbb  文件夹

    if ( $host ~* "(?:(\w+\.){0,})(\b(?!www\b)\w+)\.\b(?!(com|org|gov|net|cn)\b)\w+\.[a-zA-Z]+" ) { set $subdomain "/$2"; }



root /home/wwwroot/aa.cn/web$subdomain;# 访问域名跟目录 



include rewrite/dedecms.conf; #rewrite end  #载入其他配置文件





location ~ .*.(php|php5)?$

{

  fastcgi_pass 127.0.0.1:9000;

  fastcgi_index index.php;

  include fastcgi.conf;

}

#图片缓存时间设置

location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$

{

  expires 10d;

}

#JS和CSS缓存时间设置

location ~ .*.(js|css)?$

{

  expires 1h;

}



}



日志格式设定



log_format access '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" $http_x_forwarded_for';

#定义本虚拟主机的访问日志

access_log /var/log/nginx/ha97access.log access;



#对 "/" 启用反向代理

location / {



proxy_pass http://127.0.0.1:88;

proxy_redirect off;

proxy_set_header X-Real-IP $remote_addr;

#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

#以下是一些反向代理的配置,可选。

proxy_set_header Host $host;

client_max_body_size 10m; #允许客户端请求的最大单文件字节数

client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,

proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)

proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)

proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)

proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小

proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置

proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)

proxy_temp_file_write_size 64k;

#设定缓存文件夹大小,大于这个值,将从upstream服务器传



}

设定查看Nginx状态的地址



location /NginxStatus {



stub_status on;

access_log on;

auth_basic "NginxStatus";

auth_basic_user_file conf/htpasswd;

#htpasswd文件的内容可以用apache提供的htpasswd工具来产生。



}



#本地动静分离反向代理配置

#所有jsp的页面均交由tomcat或resin处理

location ~ .(jsp|jspx|do)?$ {



proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_pass http://127.0.0.1:8080;



}

#所有静态文件由nginx直接读取不经过tomcat或resin

location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$

{   expires 15d;   }

location ~ .*.(js|css)?$

{   expires 1h;   }



}

nginx 在thinkphp 的url 重写
在/usr/local/nginx/conf/vhost/你的域名配置文件 中添加

location / {

  if (!-e $request_filename) {

  rewrite ^/(.*)/(.*)/(.*)/*$ /index.php?m=$1&c=$2&a=$3 last;  # thinkphp 的配置文件中 'URL_MODEL' => 1  PATHINFO模式



  #或者  rewrite  ^(.*)$  /index.php?s=$1  last;     # thinkphp 的配置文件中 'URL_MODEL' =>3  兼容模式



  #或者  rewrite  /(.*)$  /index.php/$1  last;          # thinkphp 的配置文件中 'URL_MODEL' => 2  REWRITE模式



  break;

  }

}

路径 pathinfo 模式[ thinkphp ] 添加
location ~ \.php(.*)$ {

  fastcgi_pass 127.0.0.1:9000;

  fastcgi_index index.php;

  fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;

  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

  fastcgi_param PATH_INFO $fastcgi_path_info;

  fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;

  include fastcgi_params;

}

重写 url +省略index.php
location / {
  try_files $uri /index.php?$uri;
}
nginx -s reload 或者 /usr/local/nginx/sbin/nginx -s reload 重新加载Nginx配置文件
文章中的tp是 thinkphp 3.2.3  ,5.0 的未测试

类别: 无分类 |  评论(0) |  浏览(112) |  收藏
2019年02月22日 11:14:45

groupadd xxx cannot open /etc/group useradd :cannot open /etc/passwd

groupadd xxx时报错:
groupadd : cannot open /etc/group


解决方法:
root:chattr -i /etc/gshadow
root:chattr -i /etc/group


useradd xxx时报错:
useradd :cannot open /etc/passwd


解决方法:
root:chattr -i /etc/shadow
root: chattr -i /etc/passwd

类别: 无分类 |  评论(0) |  浏览(80) |  收藏
2019年01月30日 21:23:37

此Flash Player与您的地区不相容 Chrome 谷歌浏览器播放Flash视频提示

我的解决方法,参考了这个贴吧的内容:http://tieba.baidu.com/p/5738205192

具体步骤:
打开Chrome 谷歌浏览器,输入about:plugins (chrome://plugins/) 选择显示详细信息,可以看到现在的Adobe Flash Player的文件位置,我的是这样的:
C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\PepperFlash\...
于是我打开文件夹:C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\
关闭Chrome 谷歌浏览器;
在PepperFlash文件夹上点右键,点“属性”,点“安全”选项卡,点“编辑(E)...”,打开后,将所有的 “组或用户名” 选中后,权限设置区域,拒绝这一列,全部打勾,点确定,一般会出来一个提示,选能够继续设置的按钮。
启动Chrome 谷歌浏览器,这时,那个PepperFlash目录的dll无法加载了,浏览器会启用自带的或其他可用的Flash Player 版本
我的是禁用后就使用了另外一个可用的Flash Player 版本,是C:\WINDOWS\SysWOW64\Macromed\Flash\pepflashplayer32_32_0_0_114.dll

再使用,Adobe Flash Player已经正常了

类别: 无分类 |  评论(0) |  浏览(107) |  收藏
2019年01月13日 17:32:30

Ecshop如何解决Deprecated: preg_replace()报错

https://www.cnblogs.com/jesu/p/5253615.html

安装Ecshop后,运行出现各种问题,其中 Deprecated: preg_replace() 之类的报错最多,下面贴出解决方案:



错误原因:

  preg_replace() 函数中用到的修饰符 /e 在 PHP5.5.x 中已经被弃用了。

  如果你的PHP版本恰好是PHP5.5.X,那你的ECSHOP肯定就会报类似下面这样的错误:

  Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in......



解决办法:

  1. Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in \includes\cls_template.php on line 300   

    原有内容:

      return preg_replace("/{([^\}\{]*)}/e", "\$this->select('\\1');", $source);

    修改后内容:

      return preg_replace_callback("/{([^\}\{]*)}/", function($r) { return $this->select($r[1]); }, $source);



  2. Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in \includes\cls_template.php on line 491

    原有内容:

      $out = "<?php " . '$k = ' . preg_replace("/(\'\\$[^,] )/e" , "stripslashes(trim('\\1','\''));", var_export($t, true)) . ";";

    修改后内容:

      $out = "<?php " . '$k = ' . preg_replace_callback("/(\'\\$[^,] )/" , function($match){return stripslashes(trim($match[1],'\''));}, var_export($t, true)) . ";"



  3. Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in \includes\cls_template.php on line 550

    原有内容:

      $val = preg_replace("/\[([^\[\]]*)\]/eis", "'.'.str_replace('$','\$','\\1')", $val);

    修改后内容:

      $val = preg_replace_callback('/\[([^\[\]]*)\]/is',function ($matches) {return '.'.str_replace('$','\$',$matches[1]);},$val);



  4. Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in \includes\cls_template.php on line 1074

    原有内容:

      $source = preg_replace($pattern, $replacement, $source);

    修改后内容:

      $source = preg_replace_callback($pattern, function ($matches) { return '{include file='.strtolower($matches[1]). '}';},$source);



  5. Strict Standards: Only variables should be passed by reference in ...\upload\includes\lib_main.php on line 1329

    原有内容:

      $ext = end(explode('.', $tmp));

    修改后内容:

      $extsub = explode('.', $tmp);

      $tmp = end($extsub);

      $tmp = basename($tmp,".$ext");



最后,将错误修改后,上传到服务器.然后进入后台,清空缓存,刷新页面即可。

类别: 无分类 |  评论(0) |  浏览(115) |  收藏
2019年01月13日 16:06:06

php新版本号废弃 preg_replace /e 修饰符,建议改用preg_replace_callback

近期serverphp版本号升级到了 5.6  发现出了非常多警告 

preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead
一開始没注意。后来发现 非常多这种警告,于是网上查了下 发现 php5.5版本号以上 就废弃了  preg_replace  函数中 /e 这个修饰符  /e 这个修饰符的意思 就是让 正则替换的 时候 替换规则 支持 php 代码 

那么 应该怎么办呢

事实上 仅仅要 把 preg_replace 里面 有 /e 修饰符的代码 改动成  preg_replace _callback  然后又一次写下就好了

样例 

最简单的 写法
reg_replace("/([A-Z])/e", "'_' . strtolower('\\1')", $str)
改动成


preg_replace("/([A-Z])/",'gwyy', $str);
function gwyy($match) {
    return  '_'.strtolower($match[1]);
}

第二个參数是个 函数名  然后在外部写一个函数  可是 我们每次定义一个函数 感觉非常麻烦  所以我们能够用匿名函数

比方说
preg_replace("/([A-Z])/e", "'_' . strtolower('\\1')", $str)
改动成


preg_replace_callback('/([A-Z])/',
                      function ($matches) {
                        return '_' . strtolower($matches[0]);
                      },
                      $str)就可以

这里特别警告 改动后 /([A-Z])/e  最后一个  e  一定要去掉 不然就出错了

假设在类里面 还能这么写


class a {

    private $joinStr = "__AAAAA__";

    public function __construct() {
        $this->joinStr = preg_replace_callback("/__([A-Z_-]+)__/sU",array($this,'gwyy'),$this->joinStr);
        echo  $this->joinStr;
    }

    public    function  gwyy($match) {
        print_r($match);
        return 'aaa';
    }

}
$a = new a();
第二个參数不是一个函数 而变成了一个数组 表示 调用 $this 类 里面的 gwyy 方法 运行  gwyy会自己主动接受到 一个 $match 參数表 

以下再看一个略微复杂点的样例

$patterns      = '/'.$begin.$parseTag.$n1.'\/(\s*?)'.$end.'/eis';
$replacement    = "\$this->parseXmlTag('$tagLib','$tag','$1','')";
$content        = preg_replace($patterns, $replacement,$content);
这个替换 使用了 类里面的自己定义方法 假设 你再 用匿名函数直接套的话 会提示 错误 由于 匿名函数上下文里面 并没有 该方法和 该变量  所以 要用 use() 来引入  同一时候 注意 一定要 把  正则里面 e  去掉


$that = $this;
$patterns      = '/'.$begin.$parseTag.$n1.'\/(\s*?)'.$end.'/is';
$content=preg_replace_callback($patterns, function($matches) use($tagLib,$tag,$that){
    return $that->parseXmlTag($tagLib,$tag,$matches[1],'');
},$content);

这里 用 $that  取代 $this;  好了 今天先记录到这里吧 。

类别: 无分类 |  评论(0) |  浏览(110) |  收藏
2019年01月02日 15:05:22

__PHP_Incomplete_Class Fatal error execute a method or access a property of an incomplete object

报错信息大体如下:解决方法附后

Warning:  Creating default object from empty value in includes.php</b> on line 408

Notice:  Undefined property: stdClass::$db in libraries.php on line 32

Notice:  mvc::check(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "doing" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition  mvc.php on line 107

__PHP_Incomplete_Class Object
(
    [__PHP_Incomplete_Class_Name] => doing
    [id] => 1
    [gid] => 1
)

Fatal error:  Models::get(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "doing" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition  in models.php on line 195

解决:

报错的原因是 session_start(); 初始化Session时,类的声明定义还没有加载出来。

如果你把对象存储到session里面,那么在读取session的地方,也必须有此对象对应的类声明才正确。

否则,从session里面分析出一个对象,却没有与之对应的类,则会提示:

__PHP_Incomplete_Class_Name02

解决方法:把类的定义写到调用session的位置之前。即将session_start(); 后移到类声明的下面

类别: 无分类 |  评论(0) |  浏览(122) |  收藏
2018年12月25日 11:27:29

如何有效的清理yum缓存 yum清理cache

两条命令
yum clean all

以及
rm -rf /var/cache/yum/*

类别: 无分类 |  评论(0) |  浏览(116) |  收藏
2018年12月25日 11:12:25

linux 写入磁盘 linux强制将数据写入磁盘,sync 防止丢失内存的数据

linux强制将数据写入磁盘,防止丢失内存的数据

sync命令文件系统管理 sync命令用于强制被改变的内容立刻写入磁盘,更新超块信息。 在Linux/Unix系统中,在文件或数据处理过程中一般先放到内存缓冲区中,等到适当的时候再写入磁盘,

以提高系统的运行效率。sync命令则可用来强制将内存缓冲区中的数据立即写入磁盘中。用户通常不需执行sync命令,系统会自动执行update或bdflush操作,将缓冲区的数据写 入磁盘。只有

在update或bdflush无法执行或用户需要非正常关机时,才需手动执行sync命令。

语法:sync

buffer与cache buffer:为了解决写磁盘的效率 cache:为了解决读磁盘的效率 linux系统为了提高读写磁盘的效率,会先将数据放在一块buffer中。在写磁盘时并不是立即将数据写到磁盘中,而

是先写入这块buffer中了。此时如果重启系统,就可能造成数据丢失。 sync命令用来flush文件系统buffer,这样数据才会真正的写到磁盘中,并且buffer才能够释放出来,flush就是用来清空buffer。

sync命令会强制将数据写入磁盘中,并释放该数据对应的buffer,所以常常会在写磁盘后输入sync命令来将数据真正的写入磁盘。 如果不去手动的输入sync命令来真正的去写磁盘,linux系统也会

周期性的去sync数据。

类别: 无分类 |  评论(0) |  浏览(109) |  收藏
2018年12月25日 11:09:04

linux du 与 df 空间大小不一样 诡异的Linux磁盘空间被占用问题,根目录满了,df和du占用不一样

新公司的测试机磁盘空间空余很小,日志很多,也很大,做个日志压缩脚本,在夜里4:30自动运行,第二天后发现磁盘空间又满了,只好删除没用的日志,清空空间,可诡异的是怎么删除没用的文件,空间还是占用很大。如图



用du 根目录下,发现这些文件加一块也达不到占用的空间大小。如图



我也有遇见过此类问题,一般都是重启完事,因为磁盘坏道损坏有可能导致此问题。

或 DF -i 查看inode使用率,inode不够用也会导致此问题。可看了inode也够用。

如图





这次我度娘了一下,”磁盘空间没释放“,按一篇文章干,解决了此问题。

记录如下:

昨天协助同事搞定了一起磁盘空间被”无形”占用的疑难杂症,简要记录以备忘.

  1、用df 检查发现/根目录可用空间为0

  [root@/]#df -h

  2、用du检查发现各目录占用的空间都很少,有约3G的空间莫名其妙地丢了.

  [root@/]# du -m –max-depth=1 |sort -gr

  3、用lsof检查后才发现原因是,有文件被删除,而进程还活着,因而造成还占用空间的现象

  [root@/]# lsof |grep delete

  根据lsof列出的进程号,kill这些进程后,空间就释放出来了.

本文出自 “想飞却飞不高的猪” 博客,请务必保留此出处http://2483526.blog.51cto.com/2473526/798379



linux里的文件被删除后,空间没有被释放是因为在Linux系统中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink).然而如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。

态为deleted为标记被删除,其实该文件并没有从磁盘中删除,类似windows下的回收站状态。

据称当有其他进程打开某文件时文件被删除,就会将该文件标记为deleted,并删除其目录节点。使用du查看时,因为没有该删除状态文件的节点信息,所以就不做统计,从而导致与df的结果不一致。

若要将deleted状态文件删除,则根据pid直接kill调相应进程即可。

找回被删除文件:

使用lsof处理文件恢复、句柄以及空间释放问题 - yexiaoxiaobai - SegmentFault
https://segmentfault.com/a/1190000000461077

类别: 无分类 |  评论(0) |  浏览(104) |  收藏
« 1 2345» Pages: ( 1/21 total )