常用PHP运行环境一键安装包

<p>PHP的程序很火,像博客:Wordpress、论坛:Discuz!、SNS:UCenter Home、CMS:DedeCMS等等都是比较流行的PHP程序,大家都在使用PHP类的程序,但对于很多初学者来说,直接上传到虚拟空间上一个一个调试 是很麻烦的事,那么在本地(我的电脑)中搭建一个PHP运行环境调试、测试程序是最快捷的方法。下面卢松松就介绍一些在本机快速搭建PHP运行环境的方 法,让不了解PHP的朋友能快速搭建一个属于自己的PHP运行环境。</p><p>本地的PHP平台分为两种,一种是LAMP,即为Linux+Apache+MySql+PHP;另一种是WAMP,它是 Windows+Apache+MySql+PHP,而前者一般优秀于后者。考虑到大家使用的都是windows平台,所以这里重点介绍在win平台搭建 php运行环境。这些组件都是傻瓜式安装,你一直点下一步即可安装成功。</p><div style="page-break-after: always;"><span style="display: none;"><!--more-->& nbsp ;</span></div><p>PHP一键安装包介绍</p><p>一:ComsenzEXP</p><p align="center"></p><p>ComsenzEXP是康盛创想开发的一套社区产品整合体验安装包,ComsenzEXP包括:Discuz!(论坛)、 SupeSite(CMS)、UCenter(用户中心)、UCenter Home(SNS社区)。卢松松本人经常使用ComsenzEXP一键安装,同样也可以调试其他PHP程序,如:dedecms、phpwind。只要把 程序放在wwwroot目录,数据库放在MySQL的data目录即可。</p><p>二:DedeAMPZ-PHP环境整合套件</p><p align="center"></p><p>DedeAMPZ 是直接整合PHP + Apache + MySql 的服务器环境管理软件,操作十分傻瓜化,适合初中级水平的站长使用。该套装默认搭载dedecms。安装使用十分简单,并支持在php4与php5中切 换。同样也可以调试其他PHP程序,只要放在wwwroot目录中即可。</p><p>三: Xampp</p><p align="center"></p><p>XAMPP是一款比较强大的本地测试平台,虽说面板是英文的,但清楚易懂。注册为系统服务有个好处就是开机能够自动运行,但是会消耗一定的系统资源,怎么取舍用户自己来定。安装成功,服务也启动成功后,就可以把浏览器打开输入http://localhost/,试试是否成功。在XAMPP的网页选项里,有中文支持,好像好多人都在用Xampp。</p><p>相关阅读:4步用XAMPP快速搭建LAMP环境</p><p>四:WampServer</p><p align="center"></p><p>官方网站没有中文,但是程序支持中文。它能切换在线和离线状态,选项中的文语言项中也有简体中文可选,很不错。</p><p>相关阅读:快速搭建php运行环境之WampServer</p><p>五:PHPStudy</p><p align="center"></p><p>PHPStudy不一样,它含有IIS+PHP和Apache+PHP,软件推荐设置是后者。在任务托盘里也有图标,可以打开面板来看服务运行状 态,也很简洁。一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境.该程序不仅包括PHP调试环境,还包括了开发工具、开发手册等.总之学 习PHP只需一个包.对学习PHP的新手来说, WINDOWS下环境配置是一件很困难的事;对老手来说也是一件烦琐的事.因此无论你是新手还是老手,该程序包都是一个不错的选择.</p><p>相关阅读:快速搭建php运行环境之PHPStudy</p><p>六:AppServ</p><p align="center"></p><p align="left">
较为轻量的WAMP,程序安装过程中它提示你可以改变默认的80端口为服务端口,软件没有控制面板,但一切操作都在开始菜单中加入了快捷方式。</p><p align="left">相关阅读快速搭建php运行环境之APMServ</p><p>手动安装PHP运行环境方法</p><p>一般来说PHP运行环境需要安装以下几个组件:1:Apache(阿帕奇)Web服务器软件;2:MySQL(小型关系型数据库管理系统);3:PHP(php语言的编译环境);4:phpmyadmin(管理MYSQL的);5:Zend(提高PHP执行速度)。</p><p>安装PHP常见问题</p><p>如果某些这样的PHP相关的服务无法启动,请注意一下你的机器中的80端口是否被占用,检查80端口是否被占用的方法:打开CMD(开始-运行-输入CMD后回车),输入netstat -ano就可以很清楚的看到本地80口占用程序的PID。</p>

阅读剩余部分 -

windows7下nginx+php+mysql开发环境搭建

<h2>导言:</h2><div>近来,nginx以其高性能吸引大批web开发者,各大门户网站大多都采用nginx作为web服务器,关于nginx的介绍,网上已有大量文 章,笔者就不在此赘述,关于linux上nginx的搭建网上也有大量文章,但在windows上却为数不多,今天就为大家简单介绍windows7环境 下nginx+php+mysql组合的搭建,希望对各位有所帮助。所有软件包均是最新稳定版。</div><div>php5.4.8</div><div>nginx1.2.5</div><div>mysql5.5.28<div style="page-break-after: always;"><span style="display: none;"><!--more-->& nbsp ;</span></div><p> </p></div><h2>1.下载相关安装包</h2><p>下载nginx :Stable version   nginx/Windows-1.2.5</p><p>http://nginx.org/en/download.html  也可点此处直接下载http://nginx.org/download/nginx-1.2.5.zip</p><p> </p><p>下载php: VC9 x86 Non Thread Safe (2012-Oct-17 22:45:27)这里我们选择非线程安全版</p><p>http://windows.php.net/download/#php-5.4  也可点此处直接下载http://windows.php.net/downloads/releases/php-5.4.8-nts-Win32-VC9-x86.zip</p><p> </p><p>下载RunHiddenConsole</p><p>http://redmine.lighttpd.net/attachments/660/RunHiddenConsole.zip</p><p> </p><p>下载MySQL  MySQL Installer 5.5.28</p><p>http://www.mysql.com/downloads/installer/  也可点此处直接下载http://cdn.mysql.com/Downloads/MySQLInstaller/mysql-installer-community-5.5.28.3.msi</p><p> </p><h2>2.安装</h2><h3>安装nginx</h3><p>在D盘下建立名为server的目录 D:server</p><p>解压nginx-1.2.5.zip至D:servernginx-1.2.5</p><p>找到下面的nginx.exe,在命令行下运行nginx.exe (注意目录中不能出现中文字符)</p><p>启动nginx</p><div><div><div>[plain]view plaincopy</div></div></div><p> </p><div><ol> <li>D:servernginx-1.2.5>nginx  </li></ol></div><p> </p><p>打开任务管理器,切换到进程选项卡,出现如下进程,证明nginx已经启动。</p><p></p><p>在浏览中键入:http://127.0.0.1,看到下图所示证明nginx正常工作。</p><p></p><p>配置网站根目录</p><p>在D:server下建立www目录</p><p>在www目录下新建一个index.html文件,文件内容如下:</p><div><div><div>[html]view plaincopy</div></div><ol> <li><html>  </li> <li><head>  </li> <li></head>  </li> <li><body>  </li> <li>test is ok !  </li> <li></body>  </li></ol></div><p> </p><div><ol> <li></html>  </li></ol></div><p> </p><p> </p><p>修改D:servernginx-1.2.5confnginx.conf </p><p>location / {
            #root   html;
   root D:/server/www; #注意路径分隔符为斜杠
            index  index.html index.htm;</p><p>}</p><p>重新加载nginx 配置</p><div><div><div>[html]view plaincopy</div></div></div><p> </p><div><ol> <li>D:servernginx-1.2.5>nginx -s reload  </li></ol></div><p> </p><p>在浏览中键入:http://127.0.0.1<;/p><p>看到 test is ok !说明工作正常</p><p> </p><p>停止nginx:</p><div><div><div>[plain]view plaincopy</div></div></div><p> </p><div><ol> <li>D:servernginx-1.2.5>nginx -s stop  </li></ol></div><p> </p><p> </p><p>显示nginx 帮助</p><div><div><div>[plain]view plaincopy</div></div></div><p> </p><div><ol> <li>D:servernginx-1.2.5>nginx -h  </li></ol></div><p> </p><p> </p><h3>安装php</h3><div>解压php-5.4.8-nts-Win32-VC9-x86.zip 到D:serverphp</div><div>解压RunHiddenConsole.zip ,复制RunHiddenConsole.exe到D:serverphp</div><div>重命名php目录下的php.ini-development 为php.ini</div><div> </div><div>启动php-cgi</div><div><div><div><div>[plain]view plaincopy</div></div></div><div><ol> <li>D:serverphp>RunHiddenConsole.exe  php-cgi.exe -b 127.0.0.1:9000 -c D:serverphpphp.ini  </li></ol></div>使用命令</div><div><div><div><div>[plain]view plaincopy</div></div></div><div><ol> <li>D:serverphp>netstat -a  </li></ol></div></div><div>出现</div><div>TCP    127.0.0.1:9000         HongJunWen-PC:0        LISTENING</div><div>说明php-cgi启动成功。</div><div> </div><h3>使nginx能将php请求交给php处理</h3><div>修改nginx配置文件</div><div>location ~ .php$ {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #root &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; D:/server/www;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fastcgi_pass &nbsp; 127.0.0.1:9000;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fastcgi_index &nbsp;index.php;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fastcgi_param &nbsp;SCRIPT_FILENAME &nbsp;D:/server/www$fastcgi_script_name;
            include        fastcgi_params;
}</div><div>重新加载配置文件</div><div> </div><div>在www目录下新建index.php,文件内容如下</div><div><div><div><div>[php]view plaincopy</div></div><ol> <li><?php  </li></ol></div><div><ol> <li>echo phpinfo();  </li></ol></div>在浏览器中打开http://127.0.0.1/index.php<;/div><div>出现php环境信息页面说明配置成功。</div><div> </div><h3>安装MySQL5.5</h3><p>(注意:需要安装.net framework 4.0.30319,已经安装有的,跳过此步)  下载地址:http://download.microsoft.com/download/9/5/A/95A9616B-7A37-4AF6-BC36-D6EA96C8DAAE/dotNetFx40_Full_x86_x64.exe ;</p><div>打开mysql-installer-community-5.5.28.3</div><div>安装路径选择D:serverMySQL</div><div>数据文件路径D:serverMySQLdata</div><div>其他默认即可</div><div> </div><div>启动mysql</div><div><div><div><div>[plain]view plaincopy</div></div></div></div><p> </p><div><div><ol> <li>D:serverMySQLMySQL Server 5.5bin>mysqld  </li></ol></div></div><p> </p><div>用netstat -a 命令查看,出现如下信息,说明mysql启动成功。</div><div> TCP    0.0.0.0:3306           HongJunWen-PC:0        LISTENING</div><div> </div><h3>PHP支持Mysql</h3><div>打开php.ini</div><div>找到以下两行:<div><div><div>[plain]view plaincopy</div></div><ol> <li>;extension_dir = "ext"  </li> <li>………………  </li> <li>;extension=php_mysql.dll  </li></ol></div>分别将这两行前面的分号去掉,重启php-cgi。使修改后的配置生效。</div><div> </div><div>在www目录下新建mysql_test.php,内容如下:</div><div><div><div><div>[php]view plaincopy</div></div><ol> <li><?php  </li> <li>$con&nbsp;=&nbsp;mysql_connect(&quot;localhost&quot;,&quot;root&quot;,&quot;&quot;);&nbsp;&nbsp;</li> <li>if&nbsp;(!$con){  </li> <li>  die('Could not connect: ' . mysql_error());  </li> <li>} else {  </li> <li>  echo 'Database connected successfully';  </li> <li>}  </li></ol></div>$con<div>打开http://127.0.0.1/mysql_test.php<;/div><div>显示如下:</div><div>Database connected successfully</div>说明php已经支持mysql<h3>一键启动所有服务</h3> 在windows下习惯了wamp的朋友,可能会很不习惯这种一个程序一个程序单个启动的方式,这对我们这种懒人来说,不是个好方法。下面我们写两个脚本</div><div>这两个脚本分别完成所有服务的启动与关闭。</div><div>首先将RunHiddenConsole.exe复制到D:servernginx-1.2.5下</div><div> </div><div>在D:server下新建一个名为start_all_services.bat的批处理文件,此文件内容如下:</div><div><div><div><div>[php]view plaincopy</div></div><ol> <li>@echo off  </li> <li>echo starting php-cgi...  </li> <li>D:serverphpRunHiddenConsole.exe  php-cgi.exe -b 127.0.0.1:9000 -c D:serverphpphp.ini  </li> <li>echo starting nginx...  </li> <li>cd nginx-1.2.5  </li> <li>RunHiddenConsole.exe D:servernginx-1.2.5nginx  </li> <li>echo starting mysql...  </li> <li>"D:serverMySQLMySQL Server 5.5binmysqld"  </li></ol></div><div><ol> <li>exit  </li></ol></div>(注意:第8行需要加双引号,对于路径中包含空格的情况,需要用双引号引起来。否则会出错。)
 </div><div>在D:server下新建一个名为stop_all_services.bat的批处理文件,此文件内容如下:</div><div><div><div><div>[plain]view plaincopy</div></div><ol> <li>@echo off  </li> <li>echo stopping nginx...  </li> <li>taskkill /F /IM nginx.exe > nul  </li> <li>echo stopping php-cgi...  </li> <li>taskkill /F /IM php-cgi.exe > nul  </li> <li>echo stopping mysql...  </li> <li>taskkill /F /IM mysqld.exe > nul  </li></ol></div></div><div>需要启动只需双击start_all_services.bat</div><div>需要关闭只需双击stop_all_services.bat</div><div>怎么样,是不是很简单。</div><div> </div><div>至此windows7下nginx+php+mysql的搭建已经完成,现在尽情投入到php的的开发中吧。</div>

阅读剩余部分 -

回到顶部按钮

<p>asp.net 实现回到顶部的按钮效果</p><pre>void MainPage_Loaded(object sender, RoutedEventArgs e) { #region 回到顶部按钮 // Visual States are always on the first child of the control template FrameworkElement element = VisualTreeHelper.GetChild(viewer_hot, 0) as FrameworkElement; if (element != null) { VisualStateGroup group = FindVisualState(element, "ScrollStates"); if (group != null) { //group.CurrentStateChanging += (s, args) => pivot.Title = args.NewState.Name; group.CurrentStateChanging += (s, args) => { if (args.NewState.Name == "Scrolling") { imgTopBack.Visibility = System.Windows.Visibility.Collapsed; } elseif (viewer_hot.VerticalOffset > 1) { imgTopBack.Visibility = System.Windows.Visibility.Visible; } }; } } #endregion }</pre><div style="page-break-after: always;"><span style="display: none;"><!--more-->& nbsp ;</span></div><div> <pre> VisualStateGroup FindVisualState(FrameworkElement element, string name) { if (element == null) returnnull; IList groups = VisualStateManager.GetVisualStateGroups(element); foreach (VisualStateGroup group in groups) if (group.Name == name) return group; returnnull; }</pre><div> </div></div><div><pre>privatevoid imgTopBack_Tap(object sender, System.Windows.Input.GestureEventArgs e) { viewer_hot.ScrollToVerticalOffset(0.0); imgTopBack.Visibility = Visibility.Collapsed; e.Handled = true; }</pre><div> </div></div><p>xaml 中:</p><div><pre> <Image Height="56" Width="56" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="12,0,0,80" Name="imgTopBack" Source="/images/topBack.png" Stretch="Fill" Visibility="Collapsed" Tap="imgTopBack_Tap" /></pre></div>

阅读剩余部分 -

数据挖掘概述

科技名词定义

中文名称:数据挖掘
英文名称:data mining

定义:
一种透过数理模式来分析企业内储存的大量资料,以找出不同的客户或市场划分,分析出消费者喜好和行为的方法。
应用学科:通信科技(一级学科);服务与应用(二级学科)




阅读剩余部分 -

支付宝接口方案

<p>支付宝的接口调用很不方便,刚做好一个封装,实现了虚拟交易和实物交易。
解决方案中有三个项目以及NDoc生成的文档,简单的序列图:CommonAliPay,封装的支付宝接口。
 TestAli,asp.net的测试项目
TestCommonAliPay,Nunit的测试项目。
源代码下载地址:http://files.cnblogs.com/bluewater/CommonAliPay.rar</p><div style="page-break-after: always;"><span style="display: none;"><!--more-->& nbsp ;</span></div><p>
调用方法:
1、引入CommonAliPay.dll
2、实现支付宝服务接口的方法调用方式:</p><div> AliPay ap = new AliPay();
        string key = "";//填写自己的key
        string partner = "";//填写自己的Partner
        StandardGoods bp = new StandardGoods("trade_create_by_buyer", partner, key, "MD5", "卡2", Guid.NewGuid().ToString(), 2.551m, 1, "hao_ding2000@yahoo.com.cn", "hao_ding2000@yahoo.com.cn"
            , "EMS", 25.00m, "BUYER_PAY","1");
           bp.Notify_Url = "http://203.86.79.185/ali/notify.aspx";;
        ap.CreateStandardTrade("https://www.alipay.com/cooperate/gateway.do";, bp, this);</div><p>上面是通用的调用方式。
下面是只支持虚拟货物的方式:</p><div> string key = "";//填写自己的key
        string partner = "";//填写自己的Partner
        AliPay ap = new AliPay();
        DigitalGoods bp = new DigitalGoods("create_digital_goods_trade_p", partner, key, "MD5", "卡2", Guid.NewGuid().ToString(), 2.551m, 1, "hao_ding2000@yahoo.com.cn", "hao_ding2000@yahoo.com.cn");
        bp.Notify_Url = "http://203.86.79.185/ali/notify.aspx";;
        ap.CreateDigitalTrade("https://www.alipay.com/cooperate/gateway.do";, bp, this);</div><p>3、实现支付宝通知接口方法的调用(支持虚拟和实物):</p><p> </p><div>protected void Page_Load(object sender, EventArgs e)
    <span id="Codehighlighter1_57_576_Open_Text">{
       
        string key = "";//填写自己的key
        string partner = "";//填写自己的Partner
         AliPay ap = new AliPay();
         string notifyid = Request.Form["notify_id"];
         Verify v = new Verify("notify_verify", partner, notifyid);
        ap.WaitSellerSendGoods+=new AliPay.ProcessNotifyEventHandler(ap_WaitSellerSendGoods);
        ap.WaitBuyerPay += new AliPay.ProcessNotifyEventHandler(ap_WaitBuyerPay);
        ap.ProcessNotify(this, "https://www.alipay.com/cooperate/gateway.do";,key,v, "utf-8");
    }</span>

    void ap_WaitBuyerPay(object sender, NotifyEventArgs e)
    <span id="Codehighlighter1_642_721_Open_Text">{
        // //加入自己的处理逻辑
        Log4net.log.Error("wait buyer pay fire");
    }</span>

   
    private void ap_WaitSellerSendGoods(object sender, NotifyEventArgs e)
    <span id="Codehighlighter1_806_887_Open_Text">{
        //加入自己的处理逻辑
        Log4net.log.Error("WaitSellerSendGoods fire");
    }</span></div><p>支付宝的交易状态都被定义成了类似名称的事件。
部分源代码解析:
1、解析Forms集合到NotifyEventArgs类,因为后面此类的数据要用来做MD5Sign,所以所有值类型,不能存在初始值,如:int的0等。因此用Nullable范型。</p><p> </p><p> </p><div>   private NotifyEventArgs ParseNotify(NameValueCollection nv, object obj)
        <span id="Codehighlighter1_83_1464_Open_Text">{
            PropertyInfo[] propertyInfos = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);

            foreach (PropertyInfo pi in propertyInfos)
            <span id="Codehighlighter1_270_1412_Open_Text">{
                string v = nv.Get(pi.Name.ToLower());
                if (v != null)
                <span id="Codehighlighter1_373_1397_Open_Text">{
                    if (pi.PropertyType == typeof(string))
                    <span id="Codehighlighter1_454_529_Open_Text">{

                        pi.SetValue(obj, v, null);

                    }</span>
                    else if (pi.PropertyType == typeof(int?))
                    <span id="Codehighlighter1_613_697_Open_Text">{
                        pi.SetValue(obj, int.Parse(v), null);
                    }</span>
                    else if (pi.PropertyType == typeof(decimal?))
                    <span id="Codehighlighter1_785_874_Open_Text">{

                        pi.SetValue(obj, decimal.Parse(v), null);
                    }</span>
                    else if (pi.PropertyType == typeof(DateTime?))
                    <span id="Codehighlighter1_963_1053_Open_Text">{

                        pi.SetValue(obj, DateTime.Parse(v), null);
                    }</span>
                    else if (pi.PropertyType == typeof(bool))
                    <span id="Codehighlighter1_1137_1223_Open_Text">{

                        pi.SetValue(obj, bool.Parse(v), null);
                    }</span>
                    else
                    <span id="Codehighlighter1_1270_1379_Open_Text">{
                        //转型失败会抛出异常
                        pi.SetValue(obj, v, null);
                    }</span>
                }</span>

            }</span>
            return (NotifyEventArgs)obj;

        }</span></div><p>
2、从类型中获取排序后的参数</p><p> </p><p> </p><div> <span id="Codehighlighter1_1_129_Open_Text">/// <summary>
        /// 获取排序后的参数
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns></span>
        private SortedList<string,string> GetParam(object obj)
        <span id="Codehighlighter1_201_954_Open_Text">{
            
            PropertyInfo[] propertyInfos = obj.GetType().GetProperties(BindingFlags.Public|BindingFlags.Instance);          
            SortedList<string, string> sortedList = new SortedList<string, string>(StringComparer.CurrentCultureIgnoreCase);
            foreach (PropertyInfo pi in propertyInfos)
            <span id="Codehighlighter1_533_892_Open_Text">{

                if (pi.GetValue(obj, null) != null)
                <span id="Codehighlighter1_604_878_Open_Text">{
                    if (pi.Name == "Sign" || pi.Name == "Sign_Type")
                    <span id="Codehighlighter1_695_751_Open_Text">{
                        continue;
                    }</span>
                    sortedList.Add(pi.Name.ToLower(), pi.GetValue(obj, null).ToString());
                  
                }</span>
            }</span>
            return sortedList;
                    
        }</span></div><p>3、从SortedList中产生参数</p><p> </p><p> </p><div> private string GetUrlParam(SortedList<string, string> sortedList,bool isEncode)
        <span id="Codehighlighter1_89_954_Open_Text">{
            StringBuilder param = new StringBuilder();
            StringBuilder encodeParam = new StringBuilder();
            if (isEncode == false)
            <span id="Codehighlighter1_254_552_Open_Text">{

                foreach (KeyValuePair<string, string> kvp in sortedList)
                <span id="Codehighlighter1_346_484_Open_Text">{
                    string t = string.Format("{0}={1}", kvp.Key, kvp.Value);
                    param.Append(t + "&");
                }</span>
                return param.ToString().TrimEnd('&');
            }</span>
            else
            <span id="Codehighlighter1_583_942_Open_Text">{
                foreach (KeyValuePair<string, string> kvp in sortedList)
                <span id="Codehighlighter1_674_868_Open_Text">{
                     string et = string.Format("{0}={1}", HttpUtility.UrlEncode(kvp.Key), HttpUtility.UrlEncode(kvp.Value));
                     encodeParam.Append(et + "&");
                }</span>
                return encodeParam.ToString().TrimEnd('&');
            }</span>
 
        }</span></div><p>下载地址:http://files.cnblogs.com/bluewater/CommonAliPay.rar
因为时间很紧,有些地方还不完善,大家提出意见,有时间我会修改的 
可以看:http://www.cnblogs.com/bluewater/archive/2007/07/17/821540.html,新版本</p>

阅读剩余部分 -

PHP开发提高效率技巧

<p>0、用单引号代替双引号来包含字符串,这样做会更快一些。因为 PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中 说echo是语言结构,不是真正的函数,故把函数加上了双引号)。</p><div style="page-break-after: always;"><span style="display: none;"><!--more-->& nbsp ;</span></div><p>1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。

2、$row[&rsquo;id&rsquo;] 的速度是$row[id]的7倍。

3、echo 比 print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2。

4、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。

5、注销那些不用的变量尤其是大数组,以便释放内存。

6、尽量避免使用__get,__set,__autoload。

7、require_once()代价昂贵。

8、include文件时尽量使用绝对路径,因为它避免了PHP去include_path里查找文件的速度,解析操作系统路径所需的时间会更少。

9、如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[&lsquo;REQUEST_TIME&rsquo;]要好于time()。<br /><br />10、函数代替正则表达式完成相同功能。<br /><br />11、str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。<br /><br />12、如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。<br /><br />13、使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。<br /><br />14、用@屏蔽错误消息的做法非常低效,极其低效。<br /><br />15、打开apache的mod_deflate模块,可以提高网页的浏览速度。<br /><br />16、数据库连接当使用完毕时应关掉,不要用长连接。<br /><br />17、错误消息代价昂贵。<br /><br />18、在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。<br /><br />19、递增一个全局变量要比递增一个局部变量慢2倍。<br /><br />20、递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。

21、递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。

22、仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。

23、方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。

24、派生类中的方法运行起来要快于在基类中定义的同样的方法。

25、调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。

26、Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。

27、除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。

28、尽量做缓存,可使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。

29、当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回在 zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步 骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset() 技巧加速执行你的代码。

(举例如下)
if (strlen($foo) &lt; 5) { echo &ldquo;Foo is too short&rdquo;$$ }
(与下面的技巧做比较)
if (!isset($foo{5})) { echo &ldquo;Foo is too short&rdquo;$$ }

调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。

34、当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或Java代码并 指望它们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变量,这个 临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种,正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意,因 为并不是所有的指令优化器都会做同样的优化处理,并且存在大量没有装配指令优化器的互联网服务提供商(ISPs)和服务器。

35、并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。

36、并非要用类实现所有的数据结构,数组也很有用。

37、不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?

38、当你需要时,你总能把代码分解成方法。

39、尽量采用大量的PHP内置函数。

40、如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们。

41、评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。

42、mod_zip可作为Apache模块,用来即时压缩你的数据,并可让数据传输量降低80%。

43、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用 file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题;

44、尽量的少进行文件操作,虽然PHP的文件操作效率也不低的;

45、优化Select SQL语句,在可能的情况下尽量少的进行Insert、Update操作(在update上,我被恶批过);

46、尽可能的使用PHP内部函数(但是我却为了找个PHP里面不存在的函数,浪费了本可以写出一个自定义函数的时间,经验问题啊!);

47、循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?);

48、多维数组尽量不要循环嵌套赋值;

49、在可以用PHP内部字符串操作函数的情况下,不要用正则表达式;

50、foreach效率更高,尽量用foreach代替while和for循环;

51、用单引号替代双引号引用字符串;

52、“用i+=1代替i=i+1。符合c/c++的习惯,效率还高”;

53、对global变量,应该用完就unset()掉;</p>

阅读剩余部分 -

MVC部署(IIS6.0)

<p>MVC部署到IIS7.0是非常方便的事情,但是mvc部署到IIS6.0中,一些细节却不得不注意下。前一阵子,在IIS6.0 下部署ASP.NET MVC网站,走了一些弯路,也摸索出一些细节方面的体会, 跟大家分享下。
 
我所使用的环境环境:
l         操作系统 Windows Server 2003
l         Microsoft .net FrameWork 3.5 SP1
l         Microsoft MVC 1.0
l         IIS 6.0</p><div style="page-break-after: always;"><span style="display: none;"><!--more-->& nbsp ;</span></div><p>
 
下面介绍下mvc部署到IIS6.0的安装步骤:
mvc部署1.      首先安装 Microsoft .net FrameWork 3.5 SP1安装包,需要在线下载一些内容,如果下载的是完整安装包,其中还是要有10M左右的需要在线下载的内容。
mvc部署2.      安装Microsoft MVC 1.0
mvc部署3.      安装IIS 6.0
mvc部署4.      IIS 的配置
n         ASP.NET 标签使用 ASP.NET v2.0.50727
n         建立一个应用程序池 MvcPool ,使用默认值。
n         文档 :默认文件 使用Default.aspx
n         添加MVC的解析:主目录标签,点击【配置】,【映射】,【添加】, .mvc ,关联文件为C:WINDOWSMicrosoft.NETFrameworkv2.0.50727aspnet_isapi.dll,确认文件是否存在 取消勾选,点击确定。
n         插入通配符应用程序映射,点击 【插入】,选择C:WINDOWSMicrosoft.NETFrameworkv2.0.50727aspnet_isapi.dll,确认文件是否存在 取消勾选,点击确定。
n         在不重启电脑的情况下Web服务扩展:
首先查看是否存在名称为 ASP.NET v2.0.50727,允许的服务扩展,如果不存在,那么,新建一个web服务扩展,关联文件为C:WINDOWSMicrosoft.NETFrameworkv2.0.50727aspnet_isapi.dll, 并设置为【允许】。
n         设置【主目录】,按照需要设置脚本资源访问、读取、写入、记录访问、索引资源 勾选项目。
n         选择其他网站没有使用的端口
n         设置网站的应用程序池为先前建立的 MvcPool
n         安装WCF服务宿主到服务器的服务列表中,启动该 服务,并设置为【自动启动】。
n         启动MvcPool应用程序池
n           启动网站.
n           IIS6.0日志的默认设置为C:WINDOWSsystem32LogFiles,但是最好不要设置到C盘,日志久了,或者访问量高了,慢慢的就会把C盘写满,导致网站无法保存新的内容。因此可以将其转移到其他盘,然后再定期清理。推荐建立一个操作系统的定时计划任务,写一个脚本,来定时执行清理。
mvc部署到IIS6.0 中有一定的困难,希望上文对您有所帮助.
 </p>

阅读剩余部分 -

常见病毒、木马进程速查表

<p>exe → BF Evolution           Mbbmanager.exe → 聪明基因 
_.exe → Tryit               Mdm.exe → Doly 1.6-1.7 
Aboutagirl.exe → 初恋情人       Microsoft.exe → 传奇密码使者 
Absr.exe → Backdoor.Autoupder   Mmc.exe → 尼姆达病毒 
Aplica32.exe → 将死者病毒       Mprdll.exe → Bla 
Avconsol.exe → 将死者病毒       Msabel32.exe → Cain and Abel   
Avp.exe → 将死者病毒         Msblast.exe → 冲击波病毒 
Avp32.exe → 将死者病毒       Mschv.exe → Control 
Avpcc.exe → 将死者病毒       Msgsrv36.exe → Coma </p><div style="page-break-after: always;"><span style="display: none;"><!--more-->& nbsp ;</span></div><p>
Avpm.exe → 将死者病毒         Msgsvc.exe → 火凤凰 
Avserve.exe → 震荡波病毒       Msgsvr16.exe → Acid Shiver 
Bbeagle.exe → 恶鹰蠕虫病毒       Msie5.exe → Canasson 
Brainspy.exe → BrainSpy vBeta     Msstart.exe → Backdoor.livup 
Cfiadmin.exe → 将死者病毒       Mstesk.exe → Doly 1.1-1.5 
Cfiaudit.exe → 将死者病毒       Netip.exe → Spirit 2000 Beta 
Cfinet32.exe → 将死者病毒       Netspy.exe → 网络精灵 
Checkdll.exe → 网络公牛         Notpa.exe → Backdoor 
Cmctl32.exe → Back Construction   Odbc.exe → Telecommando 
Command.exe → AOL Trojan       Pcfwallicon.exe → 将死者病毒 
Diagcfg.exe → 广外女生       Pcx.exe → Xplorer 
Dkbdll.exe → Der Spaeher       Pw32.exe → 将死者病毒 
Dllclient.exe → Bobo           Recycle - Bin.exe → stHeap 
Dvldr32.exe → 口令病毒       Regscan.exe → 波特后门变种 
Esafe.exe → 将死者病毒       Tftp.exe → 尼姆达病毒 
Expiorer.exe → Acid Battery       Thing.exe → Thing 
Feweb.exe → 将死者病毒       User.exe → Schwindler 
Flcss.exe → Funlove病毒       Vp32.exe → 将死者病毒 
Frw.exe → 将死者病毒         Vpcc.exe → 将死者病毒 
Icload95.exe → 将死者病毒       Vpm.exe → 将死者病毒 
Icloadnt.exe → 将死者病毒       Vsecomr.exe → 将死者病毒 
Icmon.exe → 将死者病毒       Server.exe → Revenger, WinCrash, YAT 
Icsupp95.exe → 将死者病毒       Service.exe → Trinoo 
Iexplore.exe → 恶邮差病毒       Setup.exe → 密码病毒或Xanadu 
Rpcsrv.exe → 恶邮差病毒       Sockets.exe → Vampire 
Rundll.exe → SCKISS爱情森林       Something.exe → BladeRunner 
Rundll32.exe→ 狩猎者病毒       Spfw.exe → 瑞波变种PX     
Runouce.exe → 中国黑客病毒       Svchost.exe (线程105) → 蓝色代码 
Scanrew.exe → 传奇终结者       Sysedit32.exe → SCKISS爱情森林 
Scvhost.exe → 安哥病毒         Syplor.exe → wCrat 
Server 1. 2.exe → Spirit 2000 1.2fixed   Sy
plr.exe → 冰河 
Intel.exe → 传奇叛逆           Syshelp.exe → 恶邮差病毒 
Internet.exe → 传奇幽灵         Sysprot.exe → Satans Back Door 
Internet.exe → 网络神偷         Sysrunt.exe → Ripper 
Kernel16.exe → Transmission Scount   System.exe → s
tHeap 
Kernel32.exe → 坏透了或冰河       System32.exe → DeepThroat 1.0 
Kiss.exe → 传奇天使           Systray.exe → DeepThroat 2.0-3.1 
Krn132.exe → 求职信病毒         Syswindow.exe → Trojan Cow 
Libupdate.exe → BioNet         Task_Bar.exe → WebEx 
Load.exe → 尼姆达病毒           Taskbar → 密码病毒 Frethem 
Lockdown2000.exe → 将死者病毒     Taskmon.exe → 诺维格蠕虫病毒 
Taskmon32 → 传奇黑眼睛         Tds2-98.exe → 将死者病毒 
Tds2-Nt.exe → 将死者病毒         Temp $01.exe → Snid 
Tempinetb00st.exe → The Unexplained   Tempserver.exe → Delta Source 
Vshwin32.exe → 将死者病毒       Vsstart.exe → 将死者病毒 
Vw32.exe → 将死者病毒           Windown.exe → Spirit 2000 1.2 
Windows.exe → 黑洞2000       Winfunctions.exe → Dark Shadow 
Wingate.exe → 恶邮差病毒       Wink????.exe → 求职信病毒 
Winl0g0n.exe → 笑哈哈病毒       Winmgm32.exe → 巨无霸病毒 
Winmsg32.exe → Xtcp           Winprot.exe → Chupachbra 
Winprotecte.exe → Stealth       Winrpc.exe → 恶邮差病毒 
Winrpcsrv.exe → 恶邮差病毒       Winserv.exe → Softwarst 
Wubsys.exe → 传奇猎手         Winupdate.exe → Sckiss爱情森林 
Winver.exe → Sckiss爱情森林       Winvnc.exe → 恶邮差病毒 
Winzip.exe → ShadowPhyre       Wqk.exe → 求职信病毒 
Wscan.exe → AttackFTP         Xx.Tmp.exe → 尼姆达病毒 
Zcn32.exe → Ambush           Zonealarm.exe → 将死者病毒</p>

阅读剩余部分 -

随机文章

最近回复

分类

其它

友情连接

推广链接