bccomp

bccomp — 比较两个任意精度的数字

如果两个数相等返回0, 左边的数left_operand比较右边的数right_operand大返回1, 否则返回-1.

echo bccomp(‘1’, ‘2’) . “\n”; // -1
echo bccomp(‘1.00001’, ‘1’, 3); // 0
echo bccomp(‘1.00001’, ‘1’, 5); // 1

bcadd

bcadd — 2个任意精度数字的加法计算

$a = ‘1.234’;
$b = ‘5’;

echo bcadd($a, $b); // 6
echo bcadd($a, $b, 4); // 6.2340

file_exists

file_exists — 检查文件或目录是否存在
如果由 filename 指定的文件或目录存在则返回 TRUE,否则返回 FALSE。

$filename = ‘/path/to/foo.txt’;

if (file_exists($filename)) {
echo “The file $filename exists”;
} else {
echo “The file $filename does not exist”;
}

file_put_contents

file_put_contents — 将一个字符串写入文件
file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] ) : int
和依次调用 fopen(),fwrite() 以及 fclose() 功能一样。

$file = ‘people.txt’;
// Open the file to get existing content
$current = file_get_contents($file);
// Append a new person to the file
$current .= “John Smith\n”;
// Write the contents back to the file
file_put_contents($file, $current);

js中获取窗口高度的方法

取窗口滚动条滚动高度

function getScrollTop()
{
var scrollTop=0;
if(document.documentElement&&document.documentElement.scrollTop)
{
scrollTop=document.documentElement.scrollTop;
}
else if(document.body)
{
scrollTop=document.body.scrollTop;
}
return scrollTop;
}
取窗口可视范围的高度

function getClientHeight()
{
var clientHeight=0;
if(document.body.clientHeight&&document.documentElement.clientHeight)
{
var clientHeight = (document.body.clientHeightdocument.documentElement.clientHeight)?document.body.clientHeight:document.documentElement.clientHeight;
}
return clientHeight;
}
取文档内容实际高度

function getScrollHeight()
{
return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight);
}
////////////////////////////////////////////////////
在IE中:
document.body.clientWidth ==> BODY对象宽度
document.body.clientHeight ==> BODY对象高度
document.documentElement.clientWidth ==> 可见区域宽度
document.documentElement.clientHeight ==> 可见区域高度
document.documentElement.scrollTop =>窗口滚动条滚动高度
在FireFox中:
document.body.clientWidth ==> BODY对象宽度
document.body.clientHeight ==> BODY对象高度
document.documentElement.clientWidth ==> 可见区域宽度
document.documentElement.clientHeight ==> 可见区域高度
document.documentElement.scrollTop =>窗口滚动条滚动高度

在chrome中:
document.body.clientWidth ==> BODY对象宽度
document.body.clientHeight ==> BODY对象高度
document.documentElement.clientWidth ==> 可见区域宽度
document.documentElement.clientHeight ==> 可见区域高度
document.body.scrollTop =>窗口滚动条滚动高度

在Opera中:
document.body.clientWidth ==> 可见区域宽度
document.body.clientHeight ==> 可见区域高度
document.documentElement.clientWidth ==> 页面对象宽度(即BODY对象宽度加上Margin宽)
document.documentElement.clientHeight ==> 页面对象高度(即BODY对象高度加上Margin高

滚动到顶部 window.scrollTo(0,0)
滚动到尾部 window.scrollTo(0,document.body.clientHeight)

js计算滚动条高度及窗口高度
//页面位置及窗口大小
function GetPageSize() {
var scrW, scrH;
if(window.innerHeight
&& window.scrollMaxY)
{ // Mozilla
scrW =
window.innerWidth + window.scrollMaxX;
scrH = window.innerHeight +
window.scrollMaxY;
}
else if(document.body.scrollHeight >
document.body.offsetHeight)
{ // all but IE Mac
scrW =
document.body.scrollWidth;
scrH = document.body.scrollHeight;
} else
if(document.body)
{ // IE Mac
scrW = document.body.offsetWidth;

scrH = document.body.offsetHeight;
}
var winW, winH;

if(window.innerHeight)
{ // all except IE
winW =
window.innerWidth;
winH = window.innerHeight;
} else if
(document.documentElement &&
document.documentElement.clientHeight)
{ // IE 6 Strict Mode
winW =
document.documentElement.clientWidth;
winH =
document.documentElement.clientHeight;
} else if (document.body) { //
other
winW = document.body.clientWidth;
winH =
document.body.clientHeight;
} // for small pages with total size less
then the viewport
var pageW = (scrW document.body.offsetHeight) { // all but Explorer Mac
xScroll = document.body.scrollWidth;
yScroll = document.body.scrollHeight;
} else { // Explorer Mac…would also work in Explorer 6 Strict, Mozilla and Safari
xScroll = document.body.offsetWidth;
yScroll = document.body.offsetHeight;
}
}
var windowWidth, windowHeight;
if (self.innerHeight) { // all except Explorer
if (document.documentElement.clientWidth) {
windowWidth = document.documentElement.clientWidth;
} else {
windowWidth = self.innerWidth;
}
windowHeight = self.innerHeight;
} else {
if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
windowWidth = document.documentElement.clientWidth;
windowHeight = document.documentElement.clientHeight;
} else {
if (document.body) { // other Explorers
windowWidth = document.body.clientWidth;
windowHeight = document.body.clientHeight;
}
}
}
// for small pages with total height less then height of the viewport
if (yScroll < windowHeight) {
pageHeight = windowHeight;
} else {
pageHeight = yScroll;
}
// for small pages with total width less then width of the viewport
if (xScroll < windowWidth) {
pageWidth = xScroll;
} else {
pageWidth = windowWidth;
}
arrayPageSize = new Array(pageWidth, pageHeight, windowWidth, windowHeight);
return arrayPageSize;
}
“`
// 滚动条
document.body.scrollTop;
$(document).scrollTop();

addEventListener() 方法,事件监听

addEventListener() 方法,事件监听

你可以使用 removeEventListener() 方法来移除事件的监听。

语法
element.addEventListener(event, function, useCapture);
第一个参数是事件的类型 (如 “click” 或 “mousedown”).

第二个参数是事件触发后调用的函数。

第三个参数是个布尔值用于描述事件是冒泡还是捕获。该参数是可选的。

注意:不要使用 “on” 前缀。 例如,使用 “click” ,而不是使用 “onclick”。

你可以使用函数名,来引用外部函数:

element.addEventListener(“click”, function(){ alert(“Hello World!”); });
element.addEventListener(“click”, myFunction);

function myFunction() {
alert (“Hello World!”);
}
向 Window 对象添加事件句柄
window.addEventListener(“resize”, function(){
document.getElementById(“demo”).innerHTML = sometext;
});
传递参数
当传递参数值时,使用”匿名函数”调用带参数的函数:

复制代码
var p1 = 5;
var p2 = 7;
document.getElementById(“myBtn”).addEventListener(“click”, function() {
myFunction(p1, p2);
});
function myFunction(a, b) {
var result = a * b;
document.getElementById(“demo”).innerHTML = result;
}
复制代码
事件冒泡或事件捕获?
事件传递有两种方式:冒泡与捕获。

事件传递定义了元素事件触发的顺序。 如果你将

元素插入到

元素中,用户点击

元素, 哪个元素的 “click” 事件先被触发呢?

在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即:

元素的点击事件先触发,然后会触发

元素的点击事件。

在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即:

元素的点击事件先触发 ,然后再触发

元素的点击事件。

addEventListener() 方法可以指定 “useCapture” 参数来设置传递类型:

addEventListener(event, function, useCapture);
默认值为 false, 即冒泡传递,当值为 true 时, 事件使用捕获传递。

document.getElementById(“myDiv”).addEventListener(“click”, myFunction, true);

removeEventListener() 方法
removeEventListener() 方法移除由 addEventListener() 方法添加的事件句柄:

element.removeEventListener(“mousemove”, myFunction);
浏览器兼容处理
复制代码
var x = document.getElementById(“myBtn”);
if (x.addEventListener) { // 所有主流浏览器,除了 IE 8 及更早版本
x.addEventListener(“click”, myFunction);
} else if (x.attachEvent) { // IE 8 及更早版本
x.attachEvent(“onclick”, myFunction);
}
复制代码
IE 8 及更早 IE 版本,Opera 7.0及其更早版本不支持 addEventListener() 和 removeEventListener() 方法。但是,对于这类浏览器版本可以使用 detachEvent() 方法来移除事件句柄:

element.attachEvent(event, function);
element.detachEvent(event, function);

总结工作中常用到的linux命令大全

常用解压命令
tar.bz2 命令: tar -jxvf *.tar.bz2

tar.z 命令: tar -zxvf *.tar.z

tar.gz 命令: tar -Zxvf *.tar.gz

PS:关于这些参数你可以用man 帮助,注意区分大小写.

大多以tar.gz 和tar.bz2打包软件,大多是通过 ./configure ;make ;make install 来安装的;有的软件是直接make;make install

常用压缩命令
压缩:tar -j c v -f filename.tar.bz2 要被压缩的档案或目录名称
查询:tar -j t v -f filename.tar.bz2
解压缩:tar -j x v -f filename.tar.bz2 -C 欲解压缩的目录

常用开关机命令
关机命令:
shutdown 在root权限才可以
init 0

重启命令:
init 1
reboot

目录命令
切换目录:cd 想切换的目录
常看当前目录:pwd
查看该目录下的文件:ls
[root@tsai bin]# ls –color 以彩色显示档案资料
[root@tsai bin]# ls -l 详细列出档案系统结构
[root@tsai bin]# ls -a 显示隐藏档(以”.”开头的档案)
[root@tsai bin]# ls -al 同时显示隐藏档与详细资料
[root@tsai bin]# ls -al|more 将档案内容以一页一页显示

创建新目录:mkdir 新目录名称
删除目录:rmdir 目录名称
如果目录有东西,使用 rm -rf 文件目录

文件命令:
覆盖原文件的复制:cp -rf 源文件 目标文件
覆盖原文件的移动:mv -i 源文件 目标文件
查看文件内容:cat
比较两个文件不同:diff

查找文件命令:
查找ls命令目录:whereis ls
查找带test的文件:find | grep ‘test’

网络命令:
查看80端口占用情况:netstat -anp | grep 80

下载命令:wget http://example.com/packages/
批量下载的情形:wget -i filename.txt
把链接地址存在filename.txt里面

查看ip等信息:ifconfig

rmp类的软件使用;
安装:rpm -i your-package.rpm

查询安装的pcre的包: rpm -qa | grep pcre

删除pcre的包:rpm -e –nodeps pcre-6.6-2.el5_1.7

升级:rpm -Uvh xxxxx.rpm <==将xxxxx.rpm升级

Linux防火墙的关闭和开启
1) 重启后生效
开启: chkconfig iptables on
关闭: chkconfig iptables off
2) 即时生效,重启后失效
开启: service iptables start
关闭: service iptables stop

查杀命令

查杀命令:查找相关进程:ps aux | grep program_filter_word
查杀命令:killall -9 nginx //杀掉nginx进程
查看网站的服务器情况:curl –head www.sohu.com

其他命令:
yum安装软件:yum install autoconf

添加apache开机自启:

echo “/usr/local/apache/bin/apachectl start” >> /etc/rc.local

Nginx配置文件详细说明教程

user www-data; #运行用户

worker_processes 1; #启动进程,通常设置成和cpu的数量相等

error_log /var/log/nginx/error.log; #全局错误日志及PID文件
pid /var/run/nginx.pid;

events {
use epoll; #工作模式及连接数上限

#epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能

worker_connections 1024;

#单个后台worker process进程的最大并发链接数
# multi_accept on;
}

#设定http服务器,利用它的反向代理功能提供负载均衡支持

http {

include /etc/nginx/mime.types; #设定mime类型,类型由mime.type文件定义
default_type application/octet-stream;

log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘

‘$status $body_bytes_sent “$http_referer” ‘

‘”$http_user_agent” “$http_x_forwarded_for”‘;

access_log logs/access.log main; #设定日志格式

sendfile on; #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
#tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 65; #连接超时时间
tcp_nodelay on;

gzip on; #开启gzip压缩
gzip_disable “MSIE [1-6]\.(?!.*SV1)”;

client_header_buffer_size 1k; #设定请求缓冲
large_client_header_buffers 44k;

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

#设定负载均衡的服务器列表
upstream mysvr {

server 192.168.8.1:3128 weight=5; #本机上的Squid开启3128端口
server 192.168.8.2:80 weight=1;
server 192.168.8.3:80 weight=6; #weigth参数表示权值,权值越高被分配到的几率越大
}

server {

listen 80; #侦听80端口
server_name www.xx.com; #定义使用www.xx.com访问

access_log logs/www.xx.com.access.log main;

#设定本虚拟主机的访问日志
#默认请求
location / { #location允许对不同的URL使用不同的配置,即可以使用字符串也可以使用与正则表达式。
root /root; #定义服务器的默认网站根目录位置
index index.php index.html index.htm; #定义首页索引文件的名称

fastcgi_pass www.xx.com;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}

error_page 500 502 503 504 /50x.html; # 如果出现指定的http错误状态码,则返回给客户端指定的url地址。
location = /50x.html {
root /root;
}

———————————–

生产环境中一例(29.70-video部分):(aaron 2011-08-11)

error_page 404 = @fetch; #如果响应错误代码的页面是php等FastCGI程序,则最好在error_page中加上等号,如本例示

location @fetch { #location项允许对不同的路径进行不同的配置。@为一命名标记,不会处理正常请求,只会处理内部重定向。

internal; #设定某个location路径只能在内部使用,不能用于外部。

proxy_store on; #存储从后端服务器传过来的文件。

proxy_next_upstream error timeout http_500 http_503 http_404;

#在哪种情况下将请求转发到负载均衡代理服务器池中的下一台服务器。

proxy_store_access user:rw group:rw all:r;

#指定用于创建文件和目录的权限。

proxy_temp_path /tmp; #指定用于缓冲较大代理请求的本地路径。

proxy_set_header Host root.video.att.xinpindao.com;

#在转发给反向代理服务器(后端)的信息中重新定义或者设置header行。(即更改转发给反向代理服务器的信息)

proxy_set_header referer http://video.att.xinpindao.com;

proxy_pass http://video.backend; #设置被代理服务器的端口或套接字,以及URL。

#default root same as server root

#root /data/attachment/video;

}

——————————————

#静态文件,nginx自己处理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
root /var/www/virtual/htdocs;
expires 30d; #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。
}
#PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
location ~ \.php$ {
root /root;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/www/www$fastcgi_script_name;
include fastcgi_params;
}
#设定查看Nginx状态的地址
location /NginxStatus {
stub_status on;
access_log on;
auth_basic “NginxStatus”;
auth_basic_user_file conf/htpasswd;
}
#禁止访问 .htxxx 文件
location ~ /\.ht {
deny all;
}

}
}

以上是一些基本的配置,使用Nginx最大的好处就是负载均衡

如果要使用负载均衡的话,可以修改配置http节点如下:

#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {

include /etc/nginx/mime.types; #设定mime类型,类型由mime.type文件定义
default_type application/octet-stream;

access_log /var/log/nginx/access.log; #设定日志格式

#省略上文有的一些配置节点

#。。。。。。。。。。

#设定负载均衡的服务器列表
upstream mysvr { #upstream指令用于设置一组可以在proxy_pass指令中使用的代理服务器,默认的代理方式为轮询。

server 192.168.8.1x:3128 weight=5;#本机上的Squid开启3128端口
server 192.168.8.2x:80 weight=1; #server指令用于指定后端服务器的名称和参数。
server 192.168.8.3x:80 weight=6; #weigth参数表示权值,权值越高被分配到的几率越大
}

upstream mysvr2 {
server 192.168.8.x:80 weight=1;

server 192.168.8.x:80 weight=6; #weigth参数表示权值,权值越高被分配到的几率越大
}

#第一个虚拟服务器
server { #在server{…}虚拟主机内可通过proxy_pass指令设置关于反向代理的upstream服务器集群。

listen 80; #侦听192.168.8.x的80端口
server_name 192.168.8.x;

location ~ .*\.aspx$ { #对aspx后缀的进行负载均衡请求

root /root; #定义服务器的默认网站根目录位置
index index.php index.html index.htm; #定义首页索引文件的名称

proxy_pass http://mysvr ; #请求转向mysvr 定义的服务器列表

#以下是一些反向代理的配置可删除.

proxy_redirect off;

#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
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服务器传

}

}
}