windows下配置nginx+php

1、首先需要准备的应用程序包。

  nginx:nginx/Windows-1.0.4

  php:php-5.2.16-nts-Win32-VC6-x86.zip (nginx下php是以FastCGI的方式运行,所以我们下载非线程安全也就是nts的php包)

  (还会用到)RunHiddenConsole:RunHiddenConsole.zip

2、安装与配置。

 1)php的安装与配置。

  直接解压下载好的php包,到D盘wnmp目录(D:\wnmp),这里把解压出来的文件夹重命名成php5。进入文件夹修改php.ini-recommended文件为php.ini,并用Editplus或者Notepad++打开来。找到

extension_dir = "./ext"

更改为

extension_dir = "D:/wnmp/php5/ext"

往下看,再找到

;extension=php_mysql.dll
;extension=php_mysqli.dll

前面指定了php的ext路径后,只要把需要的扩展包前面所对应的“;”去掉,就可以了。这里打开php_mysql.dll和php_mysqli.dll,让php支持mysql。当然不要忘掉很重要的一步就是,把php5目录下的libmysql.dll文件复制到C:\Windows目录下,也可以在系统变量里面指定路径,当然这里我选择了更为方便的方法^_^。

Read More

欧几里德算法


今天在群里看到有朋友提出一道面试题,是如何求得2个数的最大公约数。在《Javascrit权威指南》一书曾今中有提到相关的例子,其原理是使用欧几里得算法求得。

在数学中,欧几里得算法,又称辗转相除法,是求两个正整数的最大公约数的算法。辗转相除法首次出现于欧几里得的《几何原本》中,而在中国则可以追溯至东汉出现的《九章算术》。其定理为:

gcd(a,b) = gcd(b,a%b)

即设两数为a、b,其中a>b,a%b为a除以b以后的余数且a%b不为0,用gcd(a,b)表示a和b的最大公约数。也就是说,两个数的最大公约数=(较小的数)和(较大的数除以较小的数的余数)的最大公约数。

基于上述等式,我们先来求 a=481 和 b=221 的最大公约数,解剖欧几里德算法计算过程:

假设f为a和b的最大公约数
a除以b的余数 等于 481%221 等于 39

根据公式,那么f也等于221和39的公约数,我们继续求模
221除以39的余数 等于 221%39 等于 26

根据公式,f也等于39和26的公约数 ,我们继续求模
39除以26的余数数 等于 39%26 等于 13

根据公式,f 也等于26和13公约数,我们继续求模
26除以13的余数数 等于 39%26 等于 0

到这一步,26可以13被整除,说明他们的最大公约数也就是13,即f=13。

通过这个等式,我们可以一步一步地缩小与原始数公约数相同的的一对数字,最后直到找到较大数能被较小数整除为止,那么较小数就是他们的最大公约数。

Read More

ECMAScript 5中新增的数组方法

ECMAScript 5中定义了9个新的数组方法,用于遍历、映射、过滤、检测、简化和搜索数组。

在开始介绍之前,很有必要对这几个新增的数组方法做一个概述。首先,大多数方法的第一个参数接收一个函数,并且对数组的每个元素(或者一些元素)调用一次该函数。如果是稀疏数组,对不存在的元素不调用传递的函数。在大多数情况下,调用提供的函数使用3个参数:数组元素、数组元素的索引值和数组本身。通常,知需要第一个参数,可忽略后面2个参数。大多数ECMAScript 5数组方法的第一个参数是一个函数,第二个参数是可选的。如果有第二个参数,则第一个参数(被调用的函数)会被看做是第二个参数的方法。也就是说,第一个参数(被调用的函数)的this关键字指向的是第二个参数。被调用的函数的返回值非常重要,但是不同的方法处理返回值的方式也不一样。ECMAScript 5中的数组方法都不会修改原始数组本身,但是,方法所传递的调用函数是可以改变原始数组本身的。

Read More

Aptana Studio 3常用配置:汉化,zen-coding,SVN,jquery提示。

最近老是换机器,每次安装Aptana时候都要网上找插件地址或者安装方法,于是记录一下,以便以后偷懒。

1、汉化
打开http://www.eclipse.org/babel/downloads.php,复制Babel Language Pack Update Site for Helios下面的地址,如下图中的http://download.eclipse.org/technology/babel/update-site/R0.10.0/helios。

然后Help > Install New Software,粘贴,一路Next。

Read More

封装一个animat动画方法

jquery中的animat方法相信大家都经常用到,它的主要功能是以渐变的方式来改变属性值可以为数字的元素属性,通过设置时间来控制动画的速度。下面分享一个自己写的动画方法,起功能也类似于jquery中的animat,欢迎大家指点:

Read More

一组数字,从1到n,从中减少了3个数,顺序打乱,放在n-3的数组里,找出丢失数字。

曾经看到有这样一个JS题:
有一组数字,从1到n,从中减少了3个数,顺序也被打乱,放在一个n-3的数组里
请找出丢失的数字,最好能有程序,最好算法比较快
假设n=10000

下面我也来贴一个算法。

function getArray (){ //创建随机丢失3个数字的数组,并打乱顺序。
    var arr =[]
    for(var i=1;i<=10000;i++){
        arr.push(i);
    }
    var a = arr.splice(Math.floor(Math.random()*arr.length),1);
    var b = arr.splice(Math.floor(Math.random()*arr.length),1);
    var c = arr.splice(Math.floor(Math.random()*arr.length),1);
    arr.sort(function(){
        return 0.5 - Math.random();
    });
    console.log('丢失数字为: ' + a + ',' + b + ',' + c + '\n数组元素个数: ' + arr.length);
    return arr;
}
function getMissMunber(arr){ //寻找丢失的数字。
    var mis = [],
        obj = {},
        len = 10000;
    for(var i=0; i<arr.length; i++){
        obj[arr[i]] = true;
    }
    for(var i=1; i<=len; i++){
        if(!obj[i]){
            mis.push(i);
        }
    }
    return mis;
}
var arr = getArray ();
var mis = getMissMunber(arr);
console.log('计算结果: ' + mis);

函数内部对象属性以及相关属性详解:arguments.callee、this、caller

在javascript函数内部,有两个特殊的对象:arguments和this。其中,arguments是一个类数组对象,它包含了传入函数中的所有参数。虽然arguments对象主要用于保存函数参数,但它还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数。请看下面这个非常经典的阶乘函数。

function factorail(n){
    if(n<=1){
        return 1;
    }else{
        return n*factorail(n-1);
    }
}

Read More

JS解小学奥数题:abcde*a=eeeeee

就是abcde是个五位数,乘以a就等于eeeeee这个六位数,用JS求出a,b,c,d,e所代表的那个数字。
来个暴力解法法:

for(var a=1;a<=9;a++){
    for(var b=0;b<=9;b++){
        for(var c=0;c<=9;c++){
            for(var d=0;d<=9;d++){
                for(var e=0;e<=9;e++){
                    var x = a*10000 + b*1000 + c*100 + d*10 + e;
                    var y = a;
                    var z = e*111111;
                    if(x*y==z){
                        console.log(x);
                        console.log(y);
                        console.log(z);
                    }
                }
            }
        }
    }
}