首页 » 语言编程

为应用程序池 “DefaultAppPool” 提供服务的进程关闭时间超过了限制

2010-01-12添加评论

为应用程序池 “DefaultAppPool” 提供服务的进程关闭时间超过了限制
服务器经常产生“应用程序池 “DefaultAppPool” 提供服务的进程关闭时间超过了限制。进程 ID 是 “2068″。”的错误,导致iis处于假死状态,经了解是IIS应用程序池的设置问题。解决方法如下:
Internet 信息服务(IIS)管理器->应用程序池->DefaultAppPool->右击属性
一、回收
1、回收工作进程(分钟):选中,值为1740
2、回收工作进程(请求数目):不选(原先设置为35000)
3、在下列时间回收工作进程:不填
4、消耗太多内存时回收工作进程:全不选。(2、3、4项可能避免了在访问量高的时候强制回收进程可能引发的服务器响应问题,导致iis假死不响应)
二、性能
只选中空闲超时20分钟。其他都不选。WEB园最大工作进程数为1(默认)。注意web园这里一定要保持默认,如果填写其他超过1的数字就会导致一些网站程序的后台程序打不开或者刷新不停。
原来的请求队列限制为4000,现在无限制。
三、运行状况
前两项都起用,是原来的默认设置。启动时间限制90秒,关闭时间限制180秒。
启动快速失败保护的钩去掉!
为了避免真的遇到很多错误时没有提示,可以不关闭,只是把快速保护的保护范围加大些,例如失败数50次 时间段5分钟 则关闭对应的程序。
“关闭时间限制180秒”是必须的,因为进程关闭的时间,原来为90秒限制,是默认值,如果进程关闭时间超过90秒,则认为超时,从而出现:进程关闭时间超过了限制 日志,所以,适当延长这个时间,可以避免这种错误
第2种方法:
原因:独立进程的 内存堆戋消耗完了,IIS不能创建更多的进程工作空间来处理
解决方法:
1. HKEY_LOCAL_MACHINESystemCurrentControlSetServicesW3SVC
2. 在Parameters键下新建一个DWORD项,名字为:UseSharedWPDesktop 值为1 重启IIS
第3种
问题已解决,发现是数据库连接无法释放,不知道是什么原因,同样的代码在本地就是好的,在服务器端就有问题,最后在连接串里加入以下语句解决问题.
Pooling=true; MAX Pool Size=512;Min Pool Size=50;Connection Lifetime=30
第4种
新建应用程序池,不同的网站引用不同程序池。

C#中的partial class(部分类)

2009-10-26添加评论

 
C# 2.0 可以将类、结构或接口的定义拆分到两个或多个源文件中,在类声明前添加partial关键字即可。
例如:下面的PartialTest类
class PartialTest
{
string Str_FieldTest;
int Int_FieldTest;
public void DoTest()
{
Debug.Print(“Test”);
}
}
可在不同源文件中写成下面形式:
一个文件中写:
partial class PartialTest
{
string Str_FieldTest;
int Int_FieldTest;
}
另一个文件中写:
partial class PartialTest
{
public void DoTest()
{
Debug.Print(“Test”);
}
}
什么情况下使用分部类?
–处理大型项目时,使一个类分布于多个独立文件中可以让多位程序员同时对该类进行处理(相当于支持并行处理,很实用);
–使用自动生成的源时,无需重新创建源文件便可将代码添加到类中。Visual Studio 在创建Windows 窗体、Web 窗体时都使用此方法。你不用编辑Visual Studio 所创建的文件,便可创建使用这些类的代码。换句话说:系统会自动创建一个文件(一般记录的是窗体及窗体中的控件的属性),另一个或几个文件记录的是用户自己编写的代码。这两部分分开可以使结构显得非常清晰,用户只需关注自己负责的那部分就行了(需要的话,这两部分可以互相调用)。等到了编辑运行的时候,系统会自动将这两部分合成一个文件。
使用Partial需要注意以下一些情况:
1.      使用partial 关键字表明可在命名空间内定义该类、结构或接口的其他部分
2.      所有部分都必须使用partial 关键字
3.      各个部分必须具有相同的可访问性,如public、private 等
4.      如果将任意部分声明为抽象的,则整个类型都被视为抽象的
5.      如果将任意部分声明为密封的,则整个类型都被视为密封的
6.      如果任意部分声明继承基类时,则整个类型都将继承该类
7.      各个部分可以指定不同的基接口,最终类型将实现所有分部声明所列出的全部接口
8.      在某一分部定义中声明的任何类、结构或接口成员可供所有其他部分使用
9.嵌套类型可以是分部的,即使它们所嵌套于的类型本身并不是分部的也如此。如下所示:
class Container
{
partial class Nested
{
void Test1();
}
partial class Nested
{
void Test2();
}
}
使用分布类的一些限制:
1.    要作为同一类型的各个部分的所有分部类型定义都必须使用partial 进行修饰。如下所示:
public partial class A { }
public class A { } // Error, must also [...]

.NET设计模式_工厂模式

2009-10-22添加评论

工厂模式定义:提供创建对象的接口.
  为何使用?
  工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。
  为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。
  我们以类Sample为例, 如果我们要创建Sample的实例对象:
  Sample sample=new Sample();
  可是,实际情况是,通常我们都要在创建sample实例时做点初始化的工作,比如赋值 查询数据库等。
  首先,我们想到的是,可以使用Sample的构造函数,这样生成实例就写成:
  Sample sample=new Sample(参数);
  但是,如果创建sample实例时所做的初始化工作不是象赋值这样简单的事,可能是很长一段代码,如果也写入构造函数中,那你的代码很难看了(就需要Refactor重整)。
  为什么说代码很难看,初学者可能没有这种感觉,我们分析如下,初始化工作如果是很长一段代码,说明要做的工作很多,将很多工作装入一个方法中,相当于将很多鸡蛋放在一个篮子里,是很危险的,这也是有背于Java面向对象的原则,面向对象的封装(Encapsulation)和分派(Delegation)告诉我们,尽量将长的代码分派“切割”成每段,将每段再“封装”起来(减少段和段之间偶合联系性),这样,就会将风险分散,以后如果需要修改,只要更改每段,不会再发生牵一动百的事情。
  在本例中,首先,我们需要将创建实例的工作与使用实例的工作分开, 也就是说,让创建实例所需要的大量初始化工作从Sample的构造函数中分离出去。
  这时我们就需要Factory工厂模式来生成对象了,不能再用上面简单new Sample(参数)。还有,如果Sample有个继承如MySample, 按照面向接口编程,我们需要将Sample抽象成一个接口.现在Sample是接口,有两个子类MySample 和HisSample .我们要实例化他们时,如下:
  Sample mysample=new MySample();
  Sample hissample=new HisSample();
  随着项目的深入,Sample可能还会”生出很多儿子出来”, 那么我们要对这些儿子一个个实例化,更糟糕的是,可能还要对以前的代码进行修改:加入后来生出儿子的实例.这在传统程序中是无法避免的.
  但如果你一开始就有意识使用了工厂模式,这些麻烦就没有了.
  工厂方法
  你会建立一个专门生产Sample实例的工厂:
  public class Factory{
  public static Sample creator(int which){
  //getClass 产生Sample 一般可使用动态类装载装入类。
  if (which==1)
  return new SampleA();
  else if (which==2)
  return new SampleB();
  }
  }
  那么在你的程序中,如果要实例化Sample时.就使用
  Sample sampleA=Factory.creator(1);
  这样,在整个就不涉及到Sample的具体子类,达到封装效果,也就减少错误修改的机会,这个原理可以用很通俗的话来比喻:就是具体事情做得越多,越容易范错误.这每个做过具体工作的人都深有体会,相反,官做得越高,说出的话越抽象越笼统,范错误可能性就越少.好象我们从编程序中也能悟出人生道理?呵呵.
  使用工厂方法 要注意几个角色,首先你要定义产品接口,如上面的Sample,产品接口下有Sample接口的实现类,如SampleA,其次要有一个factory类,用来生成产品Sample,如下图,最右边是生产的对象Sample:
  进一步稍微复杂一点,就是在工厂类上进行拓展,工厂类也有继承它的实现类concreteFactory了。
  抽象工厂
  工厂模式中有: 工厂方法(Factory Method) 抽象工厂(Abstract Factory).
  这两个模式区别在于需要创建对象的复杂程度上。如果我们创建对象的方法变得复杂了,如上面工厂方法中是创建一个对象Sample,如果我们还有新的产品接口Sample2.
  这里假设:Sample有两个concrete类SampleA和SamleB,而Sample2也有两个concrete类Sample2A和SampleB2
  那么,我们就将上例中Factory变成抽象类,将共同部分封装在抽象类中,不同部分使用子类实现,下面就是将上例中的Factory拓展成抽象工厂:
  public abstract class Factory{
  public abstract Sample creator();
  public abstract Sample2 creator(String name);
  }
  public class SimpleFactory extends [...]

PHP模板引擎SMARTY常用帮助文档

2009-09-26添加评论

总结一下Smarty的常用东东,以下在一般开发过程中经常用到:
Smarty目录:
/libs Smarty的功能类目录
/tempalates 模板文件目录
/templates_c 模板缓存文件目录
/configs 配置文件目录
/cache 缓存文件目录
载入Smarty功能类:
require(‘路径/Smarty.class.php’);
$smarty = new Smarty;
自定义Smarty工作目录:
$smarty->template_dir = ‘路径/templates/’;
$smarty->compile_dir = ‘路径/templates_c/’;
$smarty->config_dir = ‘路径/configs/’;
$smarty->cache_dir = ‘路径/cache/’;
常用语法:
$smarty->assign(‘模板中的变量名’, 值); //给模板中的变量赋值(可以是数组或对象)
$smarty->display(‘模板文件名’); //输出模板
常用标签语法:
所有的smarty模板标签都被加上了定界符, 默认情况下是 { 和 }
注释:{* 注释内容 *}
函数:{函数名称[ 参数名1=值1[ 参数名2=值2]]}
变量: {$变量名}
数组: {$数组名.元素名} 或 {$数组名.[元素索引]}
对象:{$对象名->属性名}
从配置文件引用的变量:
配置文件名为: *.conf
在模板中引入:{config_load file=”配置文件名.conf”}
在模板中的变理标签:{#变量名#}
变量调节器:
{$变量名|调节器名} //用于变量
{“字符串”|调节器名} //用于字符串
{函数名|调节器名 函数的参数名=值} //用于函数
{$变量名|调节器名1[|调节器名2|...]} //使用多个调节器
‘{‘字符: {ldelim}
‘}’字符: {rdelim}
原文输出:{literal}{/literal} 里面的文本内容将不会被模板引擎解析,原样输出
在模板中直接写PHP语句: {php}php语句;{/php}
条件:
为了简单,条件表达式与PHP中相同即可.
{if 条件表达式1}
内容1
[{elseif 条件表达式2}
内容2
{else}
内容3]
{/if}
循环:
{foreach from=$数组名 item=当前处理元素的变量名称[ key=当前处理元素的键名][ name=用于嵌套中的名称必须唯一]}
循环体…
{$当前处理元素的变量名称} {* //遍历数组时元素的引用 *}
{/foreach}
缓存:
$smarty = new Smarty;
$smarty->caching [...]

Smarty模板日期格式化输出(date format)

2009-09-26添加评论

本文主要介绍如何在Smarty模板中对PHP的日期变量进行格式化输出。

格式化的变量从函数strftime()获得的时间和日期。也可以是Unix或者mysql等的时间戳记(parsable by strtotime)都可以传递到smarty。
设计者可以使用date_format完全控制日期格式。
如果传给date_format的数据是空的,将使用第二个参数作为时间格式。 
Smarty 模板日期格式化说明
%a – abbreviated weekday name according to the current locale
(根据当地格式输出“星期”缩写格式)
%A – full weekday name according to the current locale
(根据当地格式输出“星期”全称格式)
%b – abbreviated month name according to the current locale
(根据当地格式输出“月”缩写格式)
%B – full month name according to the current locale
(根据当地格式输出“月”全称格式) 
Smarty 格式化日期示例1:
{$smarty.now|date_format}
{$smarty.now|date_format:”%A, %B %e, %Y”}
{$smarty.now|date_format:”%H:%M:%S”}
{$yesterday|date_format}
{$yesterday|date_format:”%A, %B %e, %Y”}
{$yesterday|date_format:”%H:%M:%S”}
输出结果:
Aug 19, 2004
Thursday, August 19, 2004
16:33:00
Aug 19, 2004
Thursday, August 19, 2004
16:33:00
Smarty [...]

防止网站上传木马程序代码

2009-09-16添加评论

网站存在上传漏洞;虽然,上传文件需要管理员身份验证,也对上传文件进行了文件格式的认证,但管理员身份验证采用了cookies,而cookies是可以被伪造的,而且如果上传了图片后,不对该文件的内容采取任何判断的话,那么图片木马也很有可能被上传。
解决措施:1 删除上传文件功能(不太实际);2 修改上传用户验证为session验证;3 对上传后的文件内容进行验证,如果是图片木马,则删除;可以参考以下的验证代码:
程序代码”===============判断上传文件是否含非法字符串start================
set MyFile = server.CreateObject(“Scripting.FileSystemObject”)
set MyText = MyFile.OpenTextFile(Server.mappath(filePath), 1) ‘读取文本文件
sTextAll = lcase(MyText.ReadAll)
MyText.close
set MyFile = nothing
sStr=”<%|.getfolder|.createfolder|.deletefolder|.createdirectory|.deletedirectory|.saveas|wscript.shell|script.encode|server.|.createobject|execute|activexobject|language=”
sNoString = split(sStr,”|”)
for i=0 to ubound(sNoString)
if instr(sTextAll,sNoString(i)) then
set filedel = server.CreateObject(“Scripting.FileSystemObject”)
filedel.deletefile Server.mappath(filePath)
set filedel = nothing
Response.Write(“<script>alert(‘您上传的文件有问题,上传失败!’);history.back();</script>”)
Response.End
end if
next
”=================判断上传文件是否含非法字符串end===================
本文转摘自『蓝派网』http://www.lan27.com/Article/200901/9543.htm
网站存在上传漏洞;虽然,上传文件需要管理员身份验证,也对上传文件进行了文件格式的认证,但管理员身份验证采用了cookies,而cookies是可以被伪造的,而且如果上传了图片后,不对该文件的内容采取任何判断的话,那么图片木马也很有可能被上传。
解决措施:1 删除上传文件功能(不太实际);2 修改上传用户验证为session验证;3 对上传后的文件内容进行验证,如果是图片木马,则删除;可以参考以下的验证代码:
程序代码:
<%
”===============判断上传文件是否含非法字符串start================
Function upfileFilter(filePath)
Dim MyFile,MyText,sTextAll,sNoString,sStr,filedel
set MyFile = server.CreateObject(“Scripting.FileSystemObject”)
set MyText = MyFile.OpenTextFile(Server.mappath(filePath), 1) ‘读取文本文件
sTextAll = lcase(MyText.ReadAll)
MyText.close
set MyFile = nothing
sStr=”<%|.getfolder|.createfolder|.deletefolder|.createdirectory|.deletedirectory|.saveas|wscript.shell|script.encode|server.|.createobject|execute|activexobject|language=”
sNoString = split(sStr,”|”)
for i=0 to ubound(sNoString)
if [...]

2009年9月语言排行榜:PHP超越C++排第三

2009-09-09添加评论

TIOBE世界编程语言排行榜展现了编程语言的流行趋势。每个月,都有最新的数据被更新。这份排行榜的数据取样来源于互联网上富有经验的程序员、商 业应用、著名的搜索引擎(诸如谷歌、 MSN 、雅虎)的关键字排名、 Alexa 上的排名等。请注意这个排行榜只是反映了某个编程语言的热门程度 , 这并不代表它是一个最好的编程语言或是可以写出某些令人称赞的好程序。 TIOBE公布了最新的语言排行榜.PHP果然不失所望.超过了C++.排在了前三的位置.

(Java和C稳居榜首,Java依然是最热门的编程)

位居前十位的编程语言曲线变化图
以下是20-50名的编程语言排名!

PHP加密方法-用Zend Encoder加密PHP文件和PHP 优化配置(PHP文件加密)

2009-08-31添加评论

在发布一个你写好的PHP程序时,你是不是担心自已辛苦写出来的成果会被别人占为已有呢?其实我们可以用Zend Encoder为我们的PHP文件加上一层保护壳。
软件版本:2.0.1
软件大小:10.2M
适用平台:Win9X/2000/XP
官方网址:http://www.zend.com/store/products/zend-encoder.php
软件的使用方法非常简单,首先选择“File”-“New Project”新建一个项目,然后在该项目下添加你要加密的文件或文件夹。在右边的“Target Directory”选项里输入保存加密PHP文件的路径。然后点“Encode”按钮就可以对当前项目中的PHP文件进行加密了。你还可以将当前项目保存起来,以便你的PHP文件更新后重新加密。PHP文件加密后,文件大小也变得小多了,以前一个30K的文件加密后只有14K。
技巧:在“Tools”-“Settings”对话框的“Extensions to Encoder”文本框中你可以对要加密的文件扩展名进行指定(多个扩展名用空格分隔),使Zend Encoder只对这些文件进行加密。
加密后的PHP文件需要服务器上有Zend Optimizer才能正常显示,而一般在“Zend Encoder”压缩包的“optimizer_packages”目录中都能够找到该文件,如果没有的话可以到www.zend.com免费下载。安装完成后重新启动WEB服务器就可以正常浏览加密的PHP文件了。而一般的PHP空间都是应该支持Zend Optimizer的。
PHP 优化配置之一
让论坛速度更快 PHP加速设置 PHP加速:Zend Optimizer优化PHP程序
Zend Optimizer V2.5.7 For Windows
软件语言:英文
运行环境:Win9x/NT/2000/XP
Zend Optimizer V2.5.7 For Windows软件介绍:
Zend Optimizer用优化代码的方法来提高PHP 4.0应用程序的执行速度。实现的原理是对那些在被最终执行之前由运行编译器(Run-Time Compiler)产生的代码进行优化。一般情况下,执行使用Zend Optimizer的PHP程序比不使用的要快40%到100%。这意味着网站的访问者可以更快的浏览网页,从而完成更多的事务,创造更好的客户满意度。更快的反应同时也意味着可以节省硬件投资,并增强网站所提供的服务。所以,使用Zend Optimizer,就等于提高了电子商务的盈利能力。Zend Optimizer能给PHP用户带来很多益处,特别是那些运营网站的人。快速运行PHP程序可以显著降低服务器的CPU负载,并可以减少一半的反应时间,也就是从访问者点击链接到服务器开始读取页面之间的时间。
安装Zend Optimizer优化PHP程序
Zend Optimizer是由PHP核心引擎“Zend” http://www.zend.com 创建者Zend技术公司所开的免费PHP优化软件。据Zend公司透露使用这个软件某些情况下至少可以提高性能30%以上!现在我们来看看如何配置这套软件。
Zend Optimizer的安装很简单
1、运行安装文件,首先提示你选择安装目录,选择一个你喜欢的目录,单击“Next”。
2、安装向导会要求你选择当前使用的WEB服务器(Apache、IIS或其它),选择好服务器后单击“Next”
3、安装向导提示您确认php.ini的位置(默认是C:\WINDOWS\)单击“Next”,提示“备份php.ini到C:\WINDOWS\php.ini-Optimizer-bak,当卸载该软件时可以恢复到原始的php.ini)单击“Next”。
4、安装向导提示“为了继续安装程序需要重新启动IIS服务)单击“是”,安装程序开始重新启动IIS服务,然后安装程序会提示“IIS服务顺利重新启动了”单击“确定”,再单击“finish”完成安装。
5、安装完毕后程序会自动根据你的选择来修改php.ini帮助你启动这个引擎。下面我们来介绍Zend Optimizer的配置选项,帮助你最大化自定义合理的配置。
[Zend]
zend_optimizer.optimization_level=15   //我的配置文件中zend_optimizer.optimization_level = 1023
zend_extension_ts=”C:\Inetpub\Zend\lib\ZendExtensionManager.dll”     //这个与你的安装路径有关
zend_extension_manager.optimizer_ts=”C:\Inetpub\Zend\lib\Optimizer-2.5.5″
现在我们来介绍上边这些配置文件中相关内容的含义:
zend_optimizer.optimization_level 《== 优化程度,这里定义启动多少个优化过程。
zend_optimizer.encoder_loader 《== 是否允许处理由Zend Encoder加密的PHP文件,默认允许。
zend_extension_ts 《== 优化器所在目录。
zend_extension_manager.optimizer_ts 《== 优化器管理所在目录。
优化过程 zend_optimizer.optimization_level 详细解释
这里最为重点的部分,仔细看!Zend Opt总共有10个优化过程,从理论上说开的越多性能越好。当然,理论和实际永远都存在着差距。优化过程开启的越多对性能消耗也相对也越大,Zend Opt的10个优化过程并不相同也就是说效果不是平均的。Zend公司定义的最高值(High模式)为15,这里15指的是开启1-4号优化过程。当然,很多朋友并不满足于此,毕竟最高也只开启4个优化过程连总数的一半都没有。各个优化过程的对应的数字代码(值)如下:
不使用 0 <= 如果这样不如不装,还能节约点内存说!
优化过程1(PASS1) [...]

在Apache中设置默认文档…

2009-08-30添加评论

在Apache中怎么设置默认文档?
在httpd.conf在“DirectoryIndex”这一句后设置。
例:DirectoryIndex default.html index.html.index.php

php 递归动态生成多级目录

2009-08-29添加评论

今天学习了一个动态生成多级目录在函数,来分享一下
function createFolder($path)
{
     if(!file_exists($path))
     {
         createFolder(dirname($path));
        mkdir($path,0777);
     }
}
createFolder(“aa/bb/cc/dd/ee”);

当前第 1 / 14 页 : 1234»最后 »