分类目录归档:LAMP路上

工作中遇到的一些问题和得到的一些经验关于 Linux、Apache、Mysql、PHP 都在这里了

NetBeans风格化

经常在QQ群看到别人的截图,代码背景是黑色的,有种不明觉厉的感觉。问了一下是用的什么IDE,回答用的是 VI。
这几天发现NetBeans也可以风格化,做成像VI的样子。可能很多人都早就知道这东西了,不过我的确这几天才发现,虽然可能晚了点但还是分享一下,如图:
Uploaded-Monokai

继续阅读

MySQL的保留关键字,使用时尽量避免

mysql保留字

今天用phpmyadmin时,注意到一个提示:
列名 ‘update’ 是一个MySQL 保留关键字。

突然意识到还是应该尽量避免这些保留关键字,也百度了一下。找到了这些关键字,列出来下
使用mysql时一定要注意,不要使用它的保留字作为表名或者列名,否则会出现莫名其妙的错误。

从网上找了一个mysql的保留字列表,仅供参考。
ADD ALL ALTER
ANALYZE AND AS
ASC ASENSITIVE BEFORE
BETWEEN BIGINT BINARY
BLOB BOTH BY
CALL CASCADE CASE
CHANGE CHAR CHARACTER
CHECK COLLATE COLUMN
CONDITION CONNECTION CONSTRAINT
CONTINUE CONVERT CREATE
CROSS CURRENT_DATE CURRENT_TIME
CURRENT_TIMESTAMP CURRENT_USER CURSOR
DATABASE DATABASES DAY_HOUR
DAY_MICROSECOND DAY_MINUTE DAY_SECOND
DEC DECIMAL DECLARE
DEFAULT DELAYED DELETE
DESC DESCRIBE DETERMINISTIC
DISTINCT DISTINCTROW DIV
DOUBLE DROP DUAL
EACH ELSE ELSEIF
ENCLOSED ESCAPED EXISTS
EXIT EXPLAIN FALSE
FETCH FLOAT FLOAT4
FLOAT8 FOR FORCE
FOREIGN FROM FULLTEXT
GOTO GRANT GROUP
HAVING HIGH_PRIORITY HOUR_MICROSECOND
HOUR_MINUTE HOUR_SECOND IF
IGNORE IN INDEX
INFILE INNER INOUT
INSENSITIVE INSERT INT
INT1 INT2 INT3
INT4 INT8 INTEGER
INTERVAL INTO IS
ITERATE JOIN KEY
KEYS KILL LABEL
LEADING LEAVE LEFT
LIKE LIMIT LINEAR
LINES LOAD LOCALTIME
LOCALTIMESTAMP LOCK LONG
LONGBLOB LONGTEXT LOOP
LOW_PRIORITY MATCH MEDIUMBLOB
MEDIUMINT MEDIUMTEXT MIDDLEINT
MINUTE_MICROSECOND MINUTE_SECOND MOD
MODIFIES NATURAL NOT
NO_WRITE_TO_BINLOG NULL NUMERIC
ON OPTIMIZE OPTION
OPTIONALLY OR ORDER
OUT OUTER OUTFILE
PRECISION PRIMARY PROCEDURE
PURGE RAID0 RANGE
READ READS REAL
REFERENCES REGEXP RELEASE
RENAME REPEAT REPLACE
REQUIRE RESTRICT RETURN
REVOKE RIGHT RLIKE
SCHEMA SCHEMAS SECOND_MICROSECOND
SELECT SENSITIVE SEPARATOR
SET SHOW SMALLINT
SPATIAL SPECIFIC SQL
SQLEXCEPTION SQLSTATE SQLWARNING
SQL_BIG_RESULT SQL_CALC_FOUND_ROWS SQL_SMALL_RESULT
SSL STARTING STRAIGHT_JOIN
TABLE TERMINATED THEN
TINYBLOB TINYINT TINYTEXT
TO TRAILING TRIGGER
TRUE UNDO UNION
UNIQUE UNLOCK UNSIGNED
UPDATE USAGE USE
USING UTC_DATE UTC_TIME
UTC_TIMESTAMP VALUES VARBINARY
VARCHAR VARCHARACTER VARYING
WHEN WHERE WHILE
WITH WRITE X509
XOR YEAR_MONTH ZEROFILL

注:MySQL允许部分关键字用做未引起来的识别符,因为许多人以前曾使用过它们。如:ACTION、BIT、DATE、ENUM、NO、TEXT、TIME、TIMESTAMP

Linux下进程前后台的切换(fg、bg、jobs)

假设你发现前台运行的一个程序需要很长的时间,但是需要干其他的事情,你就可以用 Ctrl-Z ,终止这个程序,然后可以看到系统提示:
[1]+ Stopped /root/bin/rsync.sh
如果没有此提示,则用 jobs 命令查看任务:
#jobs
[1]+ suspended /root/bin/rsync.sh &
然后我们可以把程序调度到后台执行:(bg 后面的数字为作业号)
#bg 1
[1]+ /root/bin/rsync.sh &
用 jobs 命令查看正在运行的任务:
#jobs
[1]+ Running /root/bin/rsync.sh &
如果想把它调回到前台运行,可以用
#fg 1
/root/bin/rsync.sh
这样,你在控制台上就只能等待这个任务完成了。 继续阅读

PHP防注入小论,目前觉得htmlspecialchars挺好

好久没写博客了,也证明好久都没写代码了。
最近不忙,写代码时可停下来试试每个函数的不同和特性。 之前写PHP对于防注入一直不太注意,这次专门对 htmlspecialchars 、htmlentities、addslashes 几个函数使用了一下。。。

htmlspecialchars 将特殊字符转成 HTML 格式,具体的说,函数会转化以下字符:
& (和号) 成为 &
” (双引号) 成为 "
‘ (单引号) 成为 '
< (小于) 成为 &lt;
> (大于) 成为 &gt;

对应的反编码函数为 htmlspecialchars_decode

htmlentities,将所有的字元都转成 HTML 字串
对应的反编码函数 html_entity_decode

注意 :htmlspecialchars最多只能处理4个html标记,htmlentities是转化全部字符,包括中文。

addslashes是使用反斜线引用字符串,该函数一般都是数据库查询之前就需要处理的必要步骤,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(’)、双引号(”)、反斜线(\)与 NULL(NULL 字符)
对应的反编码函数为stripslashes是还原addslashes引用的字符串。

所以这里一般文本输入输出的话使用 htmlspecialchars和htmlspecialchars_decode,有些文本里面有中文的话,又不支持html的话使用 htmlspecialchars 比较实用。
字段查询可能还是使用 addslashes

ThinkPHP3.1修改X-Powered-By信息

最近发现 ThinkPHP 框架里面把头文件信息里面的 X-Powered-By 改了,这样很明显让人知道是使用的ThinkPHP框架,有个危险的地方就是 万一 ThinkPHP曝出漏洞的话,这是个很明显的目标。所以找了一下修改 X-Powered-By的方法。其实也很简单。。

找到这个文件
ThinkPHP/Lib/Core/View.class.php

里面搜索 ‘header’,能看到有一个是 header(‘X-Powered-By:ThinkPHP’) 只要把这句注释掉,或者修改成其他的就行。

提高开发效率的vim常用命令

基本命令

:e filename Open filename for edition
:w Save file
:q Exit Vim
:q! Quit without saving
😡 Write file (if changes has been made) and exit
:sav filename Saves file as filename
. Repeats the last change made in normal mode
5. Repeats 5 times the last change made in normal mode

继续阅读

debian下sudo的配置和使用

最近想使用PHP输入 命令行,控制服务器。立马就想到了使用 sudo来配置权限。
debian默认情况下已经装了sudo,如果要编辑sudo权限需要用root来操作,或者 输入命令
#sudo visudo

这里 假设要用PHP脚本控制服务器关机和重启,apache,php都是使用apt包安装的。这种情况下 php执行命令的用户默认会是 www-data ,所以编辑权限可以直接在最后一行添加

www-data ALL=NOPASSWD:/sbin/shutdown,/sbin/reboot (如果多个命令用逗号隔开)
(www-data)第一个是允许使用用户,如果前面加 % 则是允许的用户组。
(ALL) 允许登录的所有主机,包括本地和远程
(NOPASSWD) 这里是不用输入密码
(/sbin/shutdown,/sbin/reboot) 这里就是允许的命令了,如果是所有命令的话 直接 ALL 就行了

visudo跟vi又不太一样,退出的话 可以使用 Ctrl+x ,然后会提示 是否保存 输入 y,然后回车。。。

就可以使用 PHP执行这些命令了。。。

<?php
    system("/usr/bin/sudo reboot");  //重启
?>

rsync常见错误及解决办法

问题一:
@ERROR: chroot failed
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器端的目录不存在或无权限。创建目录并修正权限可解决问题。

问题二:
@ERROR: auth failed on module tee
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器端该模块(tee)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败。提供正确的用户名密码解决此问题。

问题三:
@ERROR: Unknown module ‘tee_nonexists’
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题。

问题四:
password file must not be other-accessible
continuing without password file
Password:
原因:
这是因为rsyncd.pwd rsyncd.secrets的权限不对,应该设置为600。如:chmod 600 rsyncd.pwd

问题五:
rsync: failed to connect to 218.107.243.2: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(104) [receiver=2.6.9]
原因:
对方没开机、防火墙阻挡、通过的网络上有防火墙阻挡,都有可能。关闭防火墙,其实就是把tcp udp的873端口打开。

问题六:
rsync error: error starting client-server protocol (code 5) at main.c(1524) [Receiver=3.0.7]
原因:
/etc/rsyncd.conf配置文件内容有错误。请正确核对配置文件。

问题七:
rsync: chown “” failed: Invalid argument (22)
原因:
权限无法复制。去掉同步权限的参数即可。(这种情况多见于Linux向Windows的时候)
问题八:
@ERROR: daemon security issue — contact admin
rsync error: error starting client-server protocol (code 5) at main.c(1530) [sender=3.0.6]
原因:
同步的目录里面有软连接文件,需要服务器端的/etc/rsyncd.conf打开use chroot = yes。掠过软连接文件。

rsync同步备份使用方法

最近在玩树莓派,想直接在树莓派上备份东西。基本上rsync同步备份已经搞定,接下来还有 树莓派外接硬盘(估计整个有源的usb hub就行),网站实时备份。
首先在本地机器上配置 rsync服务器端,linux大多数都已经默认装了rsync。

centos和redhat这样安装
yum install rsync

ubuntu和debian这样安装
sudo apt-get install rsync 继续阅读

PHP设置脚本最大执行时间的几种方法

一、在php.ini里面设置

max_execution_time = 45; 

二、通过PHP的ini_set 函数设置

ini_set("max_execution_time", "45");

三、通过set_time_limit 函数设置

set_time_limit(45); 

以上几个数字设置为0 则无限制,默认一般是30秒。偶尔有特殊情况,可以在脚本里面使用函数修改