.net--interview3

任何一个使用.NET的人

  描述线程与进程的区别?

答:线程是进程的一部分,进程是程序的一部分。

  什么是Windows服务,它的生命周期与标准的EXE程序有什么不同

答:Windows Service 是主要用于服务器环境而长期运行的应用程序, 这类程序不需要有用户界面或者任何模拟输出。 任何的用户消息通常都是记录在Windows 事件日志里。Windows Service可以在操作系统启动的时候开始,一直在后台运行,当有需要时也可以手动启动,我们可以通过管理工具里面的服务进行统一管理。当系统启动完毕后,Windows服务并不需要通过登陆页面后才能启动,而我们启动一般的exe文件却要先登陆Windows后才能启动它

  EXE和DLL之间的区别是什么?

答:现在的Windows中,exe 和 dll 都是基于PE格式,exe 是通常的可执行文件,包含数据和代码,而 dll 是动态链接文件,也有可能是纯资源文件,只包含数据,不含程序代码。ddl 的目的之一就是提供能被许多不同的应用程序所使用的函数和资源。dll 中的函数和资源为软件开发提供了复用。它们是在运行时由磁盘物理映像载入被调用者的内存空间或共享内存空间执行。

  什么是强类型,什么是弱类型?哪种更好些?为什么?

答案:弱类型语言允许将一块内存看做多种类型。比如直接将整型变量与字符变量相加。C and C++ 是静态语言,也是弱类型语言;Perl and PHP 是动态语言,但也是弱类型语言。

强类型语言在没有强制类型转化前,不允许两种不同类型的变量相互操作。Java、C# 和 Python 等都是强类型语言。

使用哪种语言还是要按需而定。编写简单小应用,使用弱类型语言可节省很多代码量,有更高的开发效率。而对于构建大型项目,使用强类型语言可能会比使用弱类型更加规范可靠。

  PID是什么?在做系统的故障排除时如何使用它?

答案:PID = Process Identifier, 是一个全局唯一的用来标识进程的整数。在多任务系统中,可用来诊断系统中发生错误的进程。

  单个TCP/IP端口上能够侦听多少个进程?

答:可能只有一个。如果你需要创建另一个TCP/IP监听,你必须建立另一个不同的端口

  什么是GAC?它解决了什么问题?

答案:作用是可以存放一些有很多程序都要用 到的公共Assembly,例如System.Data、System.Windows.Forms等等。这样,很多程序就可以从GAC里面取得 Assembly,而不需要再把所有要用到的Assembly都拷贝到应用程序的执行目录下面

  中级.NET开发人员

  阐述面向接口、面向对象、面向方面编程的区别

  什么是Interface?它与Class有什么区别?

答:接口(Interface)是用来定义行为规范的,不会有具体实现,而抽象类除定义行为规范外,可以有部分实现,但一个类能实现多个接口,但只能继承一个父类

  什么是反射?

答:反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等。有了反射,即可对每一个类型了如指掌。如果获得了构造函数的信息,即可直接创建对象,即使这个对象的类型在编译时还不知道。

  DateTime是否可以为null?

答:不能,因为其为Struct类型,而结构属于值类型,值类型不能为null,只有引用类型才能被赋值null

   Finalize()和Dispose()之间的区别?

  using() 语法有用吗?什么是IDisposable?它是如何实现确定性终结的。

  tasklist /m "mscor*" 这句命令是干嘛的?

  in-proc和out-of-proc的区别

  .NET里的哪一项技术能够实现out-of-proc通讯?

  当你在ASP.NET中运行一个组件时,它在Windows XP, Windows 2000, Windows 2003上分别跑在哪个进程里面?

  高级开发人员/架构师

  DateTime.Parse(myString); 这行代码有什么问题?

  PDB是什么东西? 在调试中它应该放在哪里?

  什么叫圈复杂度(cyclomatic complexity)?为什么它很重要?

  写一个标准的lock(),在访问变量的前后创建临界区,要有"双重检查",

  什么叫FullTrust?放入GAC的assembly是否是FullTrust的?

  代码加上需要安全权限的特性有什么好处?

  gacutil /l | find /i "Corillian" 这句命令的作用是什么?

  sn -t foo.dll 这句命令是干嘛的?

  DCOM需要防火墙打开哪些端口?端口135是干嘛用的?

  对比OOP和SOA,它们的目的分别是什么?

  XmlSerializer是如何工作的?使用这个类的进程需要什么ACL权限?

  为什么不提倡catch(Exception)?

  Debug.Write和Trace.Write有什么不同?何时应该使用哪一个?

  Debug Build和Release Build的区别,是否会有明显的速度变化?请说明理由。

  JIT是以assembly为单位发生还是以方法为单位发生?这对于工作区有何影响?

  对比抽象基类和接口的使用

  a.Equals(b)和a == b一样吗?

  在对象比较中,对象一致和对象相等分别是指什么?

  在.NET中如何实现深拷贝(deep copy)?

  请解释一下IClonable

  什么叫装箱?

  string是值类型还是引用类型?

  XmlSerializer使用的针对属性的模式有什么好处?解决了什么问题?

  为什么不应该在.NET中使用out参数?它究竟好不好?

  特性能够放到某个方法的参数上?如果可以,这有什么用?   

 什么时候使用override?什么时候使用new? 什么叫shadowing?

  解释virtual、sealed、override和abstract的区别

  Foo.Bar, Version=2.0.205.0, Culture=neutral, PublicKeyToken=593777ae2d274679d 解释这个字符串每个部分的重要性和作用

  解释public、protected、private和internal的区别

  使用Primary Interop Assembly (PIA)有什么好处?

  NUnit是通过什么机制获知需要测试哪些方法的?

  catch(Exception e){throw e;}和catch(Exception e)的区别

  typeof(foo)和myFoo.GetType()的区别?

  public class c{ public c(string a) : this() ; public c() } 解释第一个构造函数中发生了什么? 这个构造函数有什么用?

  this是干嘛用的?能够用在static方法中?

  ASP.NET (UI)开发人员

  阐述一个基于浏览器的Form POST如何变成一个服务器端的事件,如Button1_OnClick。

  什么是PostBack?

  什么是ViewState? 它是否被编码过? 是否被加密过?谁会使用ViewState?

  元素是干嘛用的?它用于哪两项ASP.NET技术?

  说出ASP.NET 1.1中的3种Session State提供程序以及它们的优缺点?

  什么叫Web Gardening? 在设计中如何使用它?

  假设有一个ASP.NET应用程序,那么单独一个进程中允许多少应用程序对象?那两个进程呢?启用了Web Gardening的2个进程呢?这对设计有何影响?

  ASP.NET会重用多个请求之间的线程吗?是否每个HttpRequest都有自己的线程?你是否应该用ASP.NET的Thread Local存储?

  [ThreadStatic]属性在ASP.NET中有用吗?它有没有副作用?是好是坏?

  如何使用HttpHandler简化现有的为.aspx页面提供验证图片的设计

  HttpModule订阅的是什么类型的事件? 这对于实现有何影响?如果不打算重新编译ASP.NE应用程序,应该怎么做?

  说出表示任意一个终端(URL)的方式,以及ASP.NET中把请求路由到那个终点的方式

  解释cookie的工作原理。给出一个滥用Cookie的例子。

  解释HttpRequest.ValidateInput()的重要性?

  哪些数据是通过HTTP Header传递的?

  对比HTTP动词GET和POST? 什么是HEAD?

  说出至少6个HTTP状态码以及它们的含义

  if-not-modified-since的工作原理是什么? 用ASP.NET如何实现它?

  解释 <@OutputCache%>和如何使用VaryByParam、VaryByHeader.

  VaryByCustom是如何工作的?

  如何通过q=? (除了q=5)来实现ASP.NET HTML输出缓冲和缓冲过期(比如http://localhost/page.aspx?q=5)?

  XML开发人员

  XML命名空间的作用?

  何时适合使用DOM?何时不适合?有没有尺度限制?

  什么是WS-I基本配置?它重要在哪里?

  写一个小XML文档,其中使用的是默认的命名空间,以及一个合法的(前缀)命名空间,其中要有分别属性这两个命名空间的元素

  元素和特性的基本区别在哪里?

  格式完好的XML和有效的XML有什么区别?

  .NET中如何验证XML?

  myXmlDocument.SelectNodes("//mynode"); 为什么这句代码不好?什么时候它是好的?

  拉式解析(XmlReader)与事件读取器(Sax)的区别

  XPathDocument和XmlDocument的区别? 在何种情况下应该用哪一个?

  “XML片断”与“XML文档”有什么区别

  什么叫格式规范的XML?

  XML InfoSet规范与Xml DOM有什么不同? InfoSet是要解决什么问题?

  比较DTD和XSD,它们的相似点与区别分别是什么?哪个更好些?为什么?

  System.Xml支持DTD吗?如果支持,如何使用?

  XML Schema能够表示为对象图?对象图能够表示为XML Schema?

posted @ 2012-05-23 19:55 青蛙學堂 阅读(190) | 评论 (0)编辑 收藏

.net--interview2

     摘要: 1. 简述 private、 protected、 public、 internal 修饰符的访问权限。 答 . private :   私有成员, 在类的内部才可以访问。      protected : 保护成员,该类内部...  阅读全文

posted @ 2012-05-22 14:51 青蛙學堂 阅读(213) | 评论 (0)编辑 收藏

ASP.NET--ASP

ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:
1、代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
2、代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
3、弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。 
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。

那么,ASP.Net有哪些改进呢?
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++ , VB , JS等等,当然,最合适的编程语言还是MS为.Net Frmaework专门推出的C(读c sharp),它可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 
ASP(Active Server Pages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写,使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。此外,它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
之后,微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。
ASP与ASP.NET的区别:
1.开发语言不同
ASP仅局限于使用non-type脚本语言来开发,用户给WEB页中添加ASP代码的方法与客户端脚本中添加代码的方法相同,导致代码杂乱。
ASP.NET允许用户选择并使用功能完善的strongly-type编程语言,也允许使用潜加巨大的.NET Framework。
2.运行机制不同
ASP是解释运行的编程框架,所以执行效率加较低。
ASP.NET是编译性的编程框架,运行是服务器上的编译好的公共语言运行时库代码,可以利用早期绑定,实施编译来提高效率。
3.开发方式
ASP把界面设计和程序设计混在一起,维护和重用困难。
ASP.NET把界面设计和程序设计以不同的文件分离开,复用性和维护性得到了提高。

posted @ 2012-05-22 10:47 青蛙學堂 阅读(152) | 评论 (0)编辑 收藏

Active Server Pages 错误 'ASP 0131' 不允许的父路径问题

 

.Active Server Pages 错误 'ASP 0131' 不允许的父路径问题

 

Active Server Pages 错误 'ASP 0131' 不允许的父路径问题
Active, Pages, Server, 路径, ASP
在windows server 2003中默认的是关闭父路径的。

在本地中出现例如以下的错误:
Active Server Pages 错误 'ASP 0131'

不允许的父路径


xxxx 行  xxx


包含文件 '../xxx.asp' 不能用 '..' 表示父目录。

解决方法:IIS-网站-主目录-配置-选项-启用父路径

posted @ 2012-05-21 16:22 青蛙學堂 阅读(1108) | 评论 (0)编辑 收藏

三方通话

1,模拟话机

首先接通一方外线,然后按R键保留一方呼叫,可再呼叫另一方,接通后按R*3就可通话了.

2,数字话机

首先接通一方外线,然后按左右箭头选择好象是"HOLD CALL"打勾,然后按左右箭头选择好象是'CALL ANATHER PARTER",然后按左右箭头选择好象是一句建立三方通话的英文就OK了

posted @ 2012-05-18 15:32 青蛙學堂 阅读(108) | 评论 (0)编辑 收藏

php-函數大全

Abs: 取得绝对值。

Acos: 取得反余弦值。

ada_afetch: 取得资料库的传回列。

ada_autocommit: 开关自动更动功能。

ada_close: 关闭 Adabas D 连结。

ada_commit: 更动 Adabas D 资料库。

ada_connect: 连结至 Adabas D 资料库。

ada_exec: 执行 SQL 指令。

ada_fetchrow: 取得传回一列。

ada_fieldname: 取得栏位名称。

ada_fieldtype: 取得栏位资料形态。

ada_freeresult: 释出传回资料的记忆体。

ada_numfields: 取得栏位数目。

ada_numrows: 取得传回列数目。

ada_result: 取得传回资料。

ada_resultall: 传回 javascript表格资料。

ada_rollback: 撤消当前交易。

AddSlashes: 字串加入斜线。

apache_lookup_uri: 获得所有的 URI 相关资讯。

apache_note: 获得及设定阿帕契伺服器的请求纪录。

array: 建立一个新的阵列。

array_walk: 让使用者自订函数能处理阵列中的每一个元素。

arsort: 将阵列的值由大到小排序。

Asin: 取得反正弦值。

asort: 将阵列的值由小到大排序。

aspell_check: 检查一个单字。

aspell_check-raw: 检查一个单字,即使拼错也不改变或修正。

aspell_new: 载入一个新的字典。

aspell_suggest: 检查一个单字,并提供拼字建议。

Atan: 取得反正切值。

Atan2: 计算二数的反正切值。

base64_decode: BASE64 编码字串解码。

base64_encode: 将字串以 BASE64 编码。

basename: 传回不含路径的档案字串。

base_convert: 转换数字的进位方式。

bcadd: 将二个高精确度数字相加。

bccomp: 比较二个高精确度数字。

bcdiv: 将二个高精确度数字相除。

bcmod: 取得高精确度数字的余数。

bcmul: 将二个高精确度数字相乘。

bcpow: 求一高精确度数字次方值。

bcscale: 设定程式中所有 BC 函式库的内定小数点位数。

bcsqrt: 求一高精确度数字的平方根。

bcsub: 将二个高精确度数字相减。

bin2hex: 二进位转成十六进位。

BinDec: 二进位转成十进位。

Ceil: 计算大于指定数的最小整数

chdir: 改变目录。

checkdate: 验证日期的正确性。

checkdnsrr: 检查指定网址的 DNS 记录。

chgrp: 改变档案所属的群组。

chmod: 改变档案的属性。

Chop: 去除连续空白。

chown: 改变档案的拥有者。

Chr: 传回序数值的字元。

chunk_split: 将字串分成小段。

clearstatcache: 清除档案状态快取。

closedir: 关闭目录 handle

closelog: 关闭系统纪录。

connection_aborted: 若连结中断则传回 true

connection_status: 取得连线状态。

connection_timeout: 若超过 PHP 程式执行时间则传回 true

convert_cyr_string: 转换古斯拉夫字串成其它字串。

copy: 复制档案。

Cos: 余弦计算。

count: 计算变数或阵列中的元素个数。

crypt: 将字串用 DES 编码加密。

current: 传回阵列中目前的元素。

date: 将伺服器的时间格式化。

dbase_add_record: 加入资料到 dBase 资料表。

dbase_close: 关闭 dBase 资料表。

dbase_create: 建立 dBase 资料表。

dbase_delete_record: 删除 dBase 资料表的资料。

dbase_get_record: 取得 dBase 资料表的资料。

dbase_numfields: 取得 dBase 资料表的栏位数。

dbase_numrecords: 取得 dBase 资料表的列数。

dbase_open: 开启 dBase 资料表。

dbase_pack: 清理 dBase 资料表。

dba_close: 关闭资料库。

dba_delete: 删除指定资料。

dba_exists: 检查键是否存在。

dba_fetch: 取回指定资料。

dba_firstkey: 取回首笔键值。

dba_insert: 加入资料。

dba_nextkey: 取回下笔键值。

dba_open: 开启资料库连结。

dba_optimize: 最佳化资料库。

dba_popen: 开启并保持资料库连结。

dba_replace: 更动或加入资料。

dba_sync: 资料库同步化。

dblist: 取得 DBM 的资讯。

dbmclose: 关闭 DBM 资料库。

dbmdelete: 删除指定资料。

dbmexists: 检查键是否存在。

dbmfetch: 取回指定资料。

dbmfirstkey: 取回首笔键名。

dbminsert: 加入资料。

dbmnextkey: 取回下笔键值。

dbmopen: 开启 DBM 资料库连结。

dbmreplace: 更动或加入资料。

debugger_off: 关闭内建的 PHP 除错器。

debugger_on: 使用内建的 PHP 除错器。

DecBin: 十进位转二进位。

DecHex: 十进位转十六进位。

DecOct: 十进位转八进位。

delete: 无用的项目。

die: 输出讯息并中断 PHP 程式。

dir: 目录类别物件。

dirname: 取得路径中的目录名。

diskfreespace: 取得目录所在的剩余可用空间。

dl: 载入 PHP 扩充模组。

doubleval: 变数转成倍浮点数型态。

each: 传回阵列中下一个元素的索引及值。

easter_date: 计算复活节日期。

easter_days: 计算复活节与三月廿一日之间日期数。

echo: 输出字串。

empty: 判断变数是否已设定。

end: 将阵列的内部指标指到最后的元素。

ereg: 字串比对剖析。

eregi: 字串比对剖析,与大小写无关。

eregi_replace: 字串比对剖析并取代,与大小写无关。

ereg_replace: 字串比对剖析并取代。

error_log: 送出一个错误讯息。

error_reporting: 设定错误讯息回报的等级。

escapeshellcmd: 除去字串中的特殊符号。

eval: 将值代入字串之中。

exec: 执行外部程式。

exit: 结束 PHP 程式。

Exp: 自然对数 e 的次方值。

explode: 切开字串。

extract: 汇入阵列到符号表。

fclose: 关闭已开启的档案。

FDF_close: 关闭 FDF 文件。

FDF_create: 建立新的 FDF 文件。

FDF_get_file: 取得 /F 键的值。

FDF_get_status: 取得 /STATUS 键的值。

FDF_get_value: 取得栏位的值。

FDF_next_field_name: 下一栏位的名称。

FDF_open: 打开 FDF 文件。

FDF_save: FDF 文件存档。

FDF_set_ap: 设定显示栏位。

FDF_set_file: 设定 /F 键。

FDF_set_status: 设定 /STATUS 键。

FDF_set_value: 设定栏位的值。

feof: 测试档案指标是否指到档尾。

fgetc: 取得档案指标所指的字元。

fgetcsv: 取得档案指标所指行,并剖析 CSV 栏位。

fgets: 取得档案指标所指的行。

fgetss: 取得档案指标所指的行,并去掉 HTML 语言标记。

file: 将档案全部读入阵列变数中。

fileatime: 取得档案最后的存取时间。

filectime: 取得档案最后的改变时间。

filegroup: 取得档案所属的群组。

fileinode: 取得档案的 inode 值。

filemtime: 取得档案最后的修改时间。

fileowner: 取得档案的拥有者。

fileperms: 取得档案的权限设定。

filepro: 读取 FilePro Map 档。

filepro_fieldcount: 取得栏位数目。

filepro_fieldname: 取得栏位名称。

filepro_fieldtype: 取得栏位型态。

filepro_fieldwidth: 取得栏位宽度。

filepro_retrieve: 取得指定储存格资料。

filepro_rowcount: 取得列数目。

filesize: 获得档案的大小。

filetype: 获得档案的型态。

file_exists: 检查档案是否存在。

flock: 锁住档案。

Floor: 计算小于指定数的最大整数。

flush: 清出输出缓冲区。

fopen: 开启档案或者 URL

fpassthru: 输出所有剩余资料。

fputs: 写到档案指标。

fread: 位元组的方式读取档案。

FrenchToJD: 将法国共和历法转换成为凯撒日计数。

fseek: 移动档案指标。

fsockopen: 打开网路的 Socket 连结。

ftell: 取得档案读写指标位置。

ftp_cdup: 回上层目录。

ftp_chdir: 改变路径。

ftp_connect: 开启 FTP 连结。

ftp_delete: 将档案删除。

ftp_fget: 下载档案,并存在已开的档中。

ftp_fput: 上传已开启档案。

ftp_get: 下载档案。

ftp_login: 登入 FTP 伺服器。

ftp_mdtm: 获得指定档案的最后修改时间。

ftp_mkdir: 建新目录。

ftp_nlist: 列出指定目录中所有档案。

ftp_pasv: 切换主被动传输模式。

ftp_put: 上传档案。

ftp_pwd: 取得目前所在路径。

ftp_quit: 关闭 FTP 连线。

ftp_rawlist: 详细列出指定目录中所有档案。

ftp_rename: 将档案改名。

ftp_rmdir: 删除目录。

ftp_size: 获得指定档案的大小。

ftp_systype: 显示伺服器系统。

function_exists: 查核函式是否已定义。

fwrite: 二进位位元方式写入档案。

getallheaders: 获得所有 HTTP 变数值。

getdate: 获得时间及日期资讯。

getenv: 取得系统的环境变数

gethostbyaddr: 传回机器名称。

gethostbyname: 传回 IP 网址。

gethostbynamel: 传回机器名称的所有 IP

GetImageSize: 取得图片的长宽。

getlastmod: 传回该网页的最后修改时间。

getmxrr: 取得指定网址 DNS 记录之 MX 栏位。

getmyinode: 传回该网页的 inode 值。

getmypid: 传回 PHP 的行程代号。

getmyuid: 传回 PHP 的使用者代码。

getrandmax: 乱数的最大值。

getrusage: 传回系统资源使用率。

gettimeofday: 取得目前时间。

gettype: 取得变数的型态。

get_cfg_var: 取得 PHP 的设定选项值。

get_current_user: 取得 PHP 行程的拥有者名称。

get_magic_quotes_gpc: 取得 PHP 环境变数 magic_quotes_gpc 的值。

get_magic_quotes_runtime: 取得 PHP 环境变数 magic_quotes_runtime 的值。

get_meta_tags: 抽出档案所有 meta 标记的资料。

gmdate: 取得目前与 GMT 差后的时间。

gmmktime: 取得 UNIX 时间戳记的格林威治时间。

GregorianToJD: 将格里高里历法转换成为凯撒日计数。

gzclose: 关闭压缩档。

gzeof: 判断是否在压缩档尾。

gzfile: 读压缩档到阵列中。

gzgetc: 读压缩档中的字元。

gzgets: 读压缩档中的字串。

gzgetss: 读压缩档中的字串,并去掉 HTML 指令。

gzopen: 开启压缩档。

gzpassthru: 解压缩指标后全部资料。

gzputs: 资料写入压缩档。

gzread: 压缩档读出指定长度字串。

gzrewind: 重设压缩档指标。

gzseek: 设压缩档指标至指定处。

gztell: 取得压缩档指标处。

gzwrite: 资料写入压

posted @ 2012-05-17 08:14 青蛙學堂 阅读(252) | 评论 (0)编辑 收藏

PHP中文乱码的常见解决方法总结

 
关键词:PHP

  PHP中文乱码是PHP开发中的常见问题之一。PHP中文乱码有时发生在网页本身,有些产生在于MySQL交互的过程中,有时与操作系统有关。下面进行一番总结。

  一.首先是PHP网页的编码

  1. php文件本身的编码与网页的编码应匹配

  a. 如果欲使用gb2312编码,那么php要输出头:header(“Content-Type: text/html; charset=gb2312"),静态页面添加,所有文件的编码格式为ANSI,可用记事本打开,另存为选择编码为ANSI,覆盖源文件。

  b. 如果欲使用utf-8编码,那么php要输出头 :header(“Content-Type: text/html; charset=utf-8"),静态页面添加,所有文件的编码格式为utf-8。保存为utf-8可能会有点麻烦,一般utf-8文件开头会有BOM,如果使用 session就会出问题,可用editplus来保存,在editplus中,工具->参数选择->文件->UTF-8签名,选择总是删除,再保存就可以去掉BOM信息了。

  2. php本身不是Unicode的,所有substr之类的函数得改成mb_substr(需要装mbstring扩展);或者用iconv转码。

  二.PHP与Mysql的数据交互

  PHP与数据库的编码应一致

  1. 修改mysql配置文件my.ini或my.cnf,mysql最好用utf8编码

  [mysql]

  default-character-set=utf8

  [mysqld]

  default-character-set=utf8

  default-storage-engine=MyISAM

  在[mysqld]下加入:

  default-collation=utf8_bin

  init_connect='SET NAMES utf8'

  2. 在需要做数据库操作的php程序前加mysql_query("set names '编码'");,编码和php编码一致,如果php编码是gb2312那mysql编码就是gb2312,如果是utf-8那mysql编码就是 utf8,这样插入或检索数据时就不会出现乱码了

  三.PHP与操作系统相关

  Windows和Linux的编码是不一样的,在Windows环境下,调用PHP的函数时参数如果是utf-8编码会出现错误,比如 move_uploaded_file()、filesize()、readfile()等,这些函数在处理上传、下载时经常会用到,调用时可能会出现下面的错误:

  Warning: move_uploaded_file()[function.move-uploaded-file]:failed to open stream: Invalid argument in ...

  Warning: move_uploaded_file()[function.move-uploaded-file]:Unable to move '' to '' in ...

  Warning: filesize() [function.filesize]: stat failed for ... in ...

  Warning: readfile() [function.readfile]: failed to open stream: Invalid argument in ..

  在Linux环境下用gb2312编码虽然不会出现这些错误,但保存后的文件名出现乱码导致无法读取文件,这时可先将参数转换成操作系统识别的编码,编码转换可用mb_convert_encoding(字符串,新编码,原编码)或iconv(原编码,新编码,字符串),这样处理后保存的文件名就不会出现乱码,也可以正常读取文件,实现中文名称文件的上传、下载。

  其实还有更好的解决方法,彻底与系统脱离,也就不用考虑系统是何编码。可以生成一个只有字母和数字的序列作为文件名,而将原来带有中文的名字保存在数据库中,这样调用move_uploaded_file()就不会出现问题,下载的时候只需将文件名改为原来带有中文的名字。实现下载的代码如下

  header("Pragma: public");

  header("Expires: 0");

  header("Cache-Component: must-revalidate, post-check=0, pre-check=0");

  header("Content-type: $file_type");

  header("Content-Length: $file_size");

  header("Content-Disposition: attachment; filename=\"$file_name\"");

  header("Content-Transfer-Encoding: binary");

  readfile($file_path);

  $file_type是文件的类型,$file_name是原来的名字,$file_path是保存在服务上文件的地址。

  四.再来总结一下为什么会乱码

  一般来说,乱码的出现有2种原因,首先是由于编码(charset) 设置错误,导致浏览器以错误的编码来解析,从而出现了满屏乱七八糟的“天书”,其次是文件被以错误的编码打开,然后保存,比如一个文本文件原先是GB2312 编码的,却以UTF-8 编码打开再保存。要解决上述乱码问题,首先需要知道开发中哪些环节涉及到了编码:

  1、文件编码:指的是页面文件(.html,.php等)本身是以何种编码来保存的。记事本和Dreamweaver 在打开页面时候会自动识别文件编码因而不太会出问题。而ZendStudio却不会自动识别编码,它只会根据首选项的配置固定以某种编码打开文件,如果工作时候一不注意,用错误编码打开文件,做了修改之后一保存,乱码就出现了(我深有体会)。

  2、页面申明编码:在HTML代码HEAD里面,可以用 来告诉浏览器网页采用了什么编码,目前中文网站开发中XXX主要用的是GB2312和UTF-8 两种编码。

  3、数据库连接编码:指的是进行数据库操作时候以哪种编码与数据库传输数据,这里需要注意的是不要与数据库本身的编码混淆,比如MySQL内部默认是latin1编码,也就是说Mysql是以latin1编码来存储数据,以其他编码传输给Mysql的数据会被转换成latin1编码。

  知道了WEB开发中哪些地方涉及到了编码,也就知道了乱码产生的原因:上述3项编码设置不一致,由于各种编码绝大部分是兼容ASCII的,所以英文符号不会出现,中文就倒霉了。

  五.决战一些常见的错误情况与解决:

  1、数据库采用UTF8 编码,而页面申明编码是GB2312 ,这是最常见的产生乱码的原因。这时候在PHP脚本里面直接SELECT数据出来的就是乱码,需要在查询前先使用: mysql_query("SET NAMES GBK"); 来设定MYSQL连接编码,保证页面申明编码与这里设定的连接编码一致(GBK是GB2312的扩展 )。如果页面是UTF-8 编码的话,可以用: mysql_query("SET NAMES UTF8");

  注意是UTF8而不是一般用的UTF-8。假如页面申明的编码与数据库内部编码一致可以不设定连接编码。

  注:事实上MYSQL的数据输入输出比上面讲的更复杂一些,MYSQL配置文件my.ini中定义了2个默认编码,分别是[client]里的default -character-set和[mysqld] 里的default-character-set 来分别设定默认时候客户端连接和数据库内部所采用的编码。我们上面指定的编码其实是MYSQL客户端连接服务器时候的命令行参数character_set_client,来告诉MYSQL服务器接受到的客户端数据是什么编码的,而不是采用默认编码。

  2、页面申明编码与文件本身编码不一致,这种情况很少发生,因为如果编码不一致美工做页面时候在浏览器看到的就是乱码了。更多时候是发布以后修改一些小BUG,以错误编码打开页面然后保存导致的。或者是用某些FTP软件直接在线修改文件,比如CuteFTP,由于软件编码配置错误而导致转换错了编码。

  3、一些租用虚拟主机的朋友,明明上述3项编码都设置正确了还是有乱码。比方说网页是GB2312 编码的,IE等浏览器打开却总是识别成UTF-8 ,网页HEAD里面已经申明是GB2312 了,手动修改浏览器编码为GB2312 后页面显示正常。产生原因是服务器Apache设定了服务器全局的默认编码,在httpd.conf里面加了AddDefaultCharset UTF-8 。这时候服务器会首先发送HTTP头给浏览器,其优先级比页面里申明编码高,自然浏览器就识别错了。解决办法有2个,请管理员在配置文件自己的虚机里加上一条AddDefaultCharset GB2312 来覆盖全局配置,或者在自己目录的.htaccess里配置。

  总结:总之一句话,要解决PHP中文乱码最好最快的解决办法就是,页面申明的编码与数据库内部编码一致,如果页面申请的页码与数据库内部编码不一致时,就设定连接编码 ,mysql_query("SET NAMES XXX "); XXX为连接编码.一定可以解决乱码的问题.

posted @ 2012-05-15 09:25 青蛙學堂 阅读(200) | 评论 (0)编辑 收藏

SQLserver数据库导入Mysql数据库

SQLserver数据库导入Mysql数据库的体验

因工作需要,要将存放在sql server数据库中的数据全部导入到mysql数据库中,在网上搜集相关资料,找到两种方法,现在分别谈谈对他们的看法。
第一种是安装mysql ODBC,利用sql server的导出功能,选择mysql数据源,进行数据的直接导出,这种方法很简便,但是针对实际应用有很多弊端,最主要体现就是数据类型问题,首先,sql server数据库中
的ntext,image等数据类型的数据无法直接写入到mysql数据库中,据说只要稍加改动就可以,可惜偶这只菜鸟还没想到如何改动,其次,因为偶在mysql中的数据库设计中将时间都设成int型(保存的是时间戳),所以在数据导过来后,就会出现冲突,再次,这种方法生成的mysql数据表的字段类型都不很合适,所以此种方法我觉得不能提倡。

第二种是利用phpasp脚本来实现数据的导入功能,这种方法需要编写程序,但灵活性大,操作也不是那么困难,一切都尽在你的掌握之中,现简单介绍一下该方法
前提条件是你的mysql环境已经搭建好了,先建好目标数据库,再将所有的表结构用sql语句生成,现在万事具备,只缺数据了。

可以通过下面的php脚本来实现sql server中mydb数据库的user表中数据向mysql中mydb数据库导入
<?
$cnx = odbc_connect('web', 'admin', '123456');//'web'是sqlserver中mydb的数据源名,'admin'是访问mydb的用户名,'123456'是访问mydb的密码
$cur= odbc_exec( $cnx, 'select * from user' );//打开sql server中mydb数据库的user表
$num_row=0;
$conn=mysql_pconnect("localhost","root","123456");// 连接mysql
@mysql_select_db('mydb',$conn) or

die("无法连接到数据库,请与管理员联系!");//打开mysql的mydb数据库
while( odbc_fetch_row( $cur )) //从sql server的mydb库中的user表逐条取出数据,如果对数据进行选择,可在前面的select语句中加上条件判断
{
$num_row++;
$field1 = odbc_result( $cur, 1 ); // 这里的参数i(1,2,3..)指的是记录集中的第i个域,你可以有所选择地进行选取,fieldi得到对应域的值,然后你可以对fieldi进行操作
$field2 = odbc_result( $cur, 2 );
$field3 = odbc_result( $cur, 3 );
$field4 = odbc_result( $cur, 4 );
$field5 = odbc_result( $cur, 5 );
$field6 = odbc_result( $cur, 6 );
$field5 = timetoint($field5); //这里是对sql server中的datetime类型的字段进行相应转换处理,转换成我所需要的int型
$querystring = "insert into user
(id,name,username,password,recdate)
values('$field1','$field2','$field3','$field4','$field5')" ;

mysql_query($querystring,$conn);
}

function timetoint($str){
$arr1=split(" ",$str);
$datestr=$arr1[0];
$timestr=$arr1[1];
$arr_date=split("-",$datestr);
$arr_time=split(":",$timestr);
$year=$arr_date[0];
$month=$arr_date[1];
$day=$arr_date[2];
$hour=$arr_time[0];
$minute=$arr_time[1];
$second=$arr_time[2];
$time_int=mktime($hour,$minute,$second,$month,$day,$year);
return $time_int;
}
?>

将该段脚本存成sql.php,在服务器上执行,就可以将服务器上sql server中mydb数据库的user表中的数据导入到mysql中mydb数据库的user表中去。其他表的操作与此雷同,就不赘述了。

下面再介绍一下asp脚本实现sql server中mydb数据库的数据向mysql中mydb数据库导入
<%
set conn=server.createobject("adodb.connection")
conn.open 'web', 'admin', '123456' // 'web'是sqlserver中mydb的数据源名,'admin'是访问mydb的用户名,'123456'是访问mydb的密码
set rs=server.createobject("adodb.recordset")
sql="select ID,name,username,password,datediff(s,'1970-01-01 00:00:00',recdate)-8*3600,reid,filename,fileContentType,filevalue from senddate" //这条sql语句实现了将datetime类型的recdate字段转化成unix时间戳的int型

rs.open sql,conn,1,3
set conn1=server.createobject("adodb.connection")
conn1.open "myoa","root","q1-d6=7?"
i=1
do while not rs.eof
field1 = rs(0)
field2 = rs(1)
field3 = rs(2)
field4 = rs(3)
field5 = rs(4)
sql1 = "insert into user(ID,name,username,password,recdate)

values("&field1&",'"&field2&"','"&field3&"','"&field4&"',"&field5&")"

conn1.execute sql1
rs.movenext
i=i+1
loop
rs.close
set rs=nothing
conn.close
set conn=nothing
conn1.close
set conn1=nothing

%>

以上两个是分别采用php脚本和asp脚本对user表的数据进行由sql server到mysql的导入其间我采用2种回避的方法来避免ntext,image类型数据的传递,一种是将ntext字段改为nvarchar(4000),因为实际情况,原始数据中该字段的数据长度都未超过4000个字,所以并没有出现数据截断,另一个手段是将image类型数据取出来写到文件中,以文件形式保存,将文件路径存到数据库中,方法见下:

function makeattach(fileContentType,filevalue,i)
select case fileContentType
case "application/msword"
ext="doc"

case "application/vnd.ms-excel"
ext="exl"

case "application/vnd.ms-powerpoint"
ext="pps"

case "application/x-rar-compressed"
ext="rar"

case "application/x-zip-compressed"
ext="zip"

case "image/gif"
ext="gif"

case "image/pjpeg"
ext="jpg"

case "text/plain"
ext="txt"

case else
ext="x"

end select
if ext<>"x" then
set fso=server.createobject("FileSystemObject")
fName="attech"&i&"."&ext
Dir="d:attach"
If fso.FileExists(Dir & fName) Then fso.deletefile Dir & fName
If fName<>"" AND NOT fso.FileExists(Dir & fName) Then
Set strm1=Server.CreateObject("ADODB.Stream")
strm1.Open
strm1.Type=1 'Binary
strm1.Write filevalue
strm1.SaveToFile Dir & fName,2
Set strm1=Nothing
end if
makeattach=fName
end if
end function

这个函数有3个输入参数,第一个是文件的contentType,第二个是文件的二进制数值,第三个是个可以区别文件名的变量,先根据contentType确定所存文件的后缀名,然后就是将二进制数值保存成指定文件名的文件,并将文件名作为输出参数返回,将返回的参数作为数据写到mysql的数据库中保存。
时间匆忙,先总结到这里,希望这些文字能对有需要的人有些帮助,少走些弯路,感谢您的阅读。:)

posted @ 2012-05-14 10:54 青蛙學堂 阅读(203) | 评论 (0)编辑 收藏

dtswizard--sqlserver2005数据导入导出工具

dtswizard--sqlserver2005数据导入导出工具

posted @ 2012-05-14 10:48 青蛙學堂 阅读(1031) | 评论 (0)编辑 收藏

PHP-APACHE-设置

 

 

注:此设定对应APACHE PHP VC6 线程安全程式。

 

1)、将PHP的压缩包zip解压到一个目录下,推荐:“E:\PHP”,pharmar的是D:\Program Files\Php

2)、将PHP目录(E:\PHP)下的 php.ini-dist 文件重命名为 php.iniPHP的配置文件就是它,修改以下几个地方
extension_dir="E:\ Php\ext" ,指向php文件夹下放置“php_*.dll”文件的路径。PHP4PHP5的路径在这里有所区别。
doc_root="E:\ Apache" ,指向前面apache设置的首页位置;
default_charset="gb2312" ,修改默认字符集,这里,如果前面有分号“;”,去掉这个分号;

register_globals=Off 改为 register_globals=On ,使传递全局变量有效;

extension=php_dba.dll 如果前面有分号,取消分号,以下同;

extension=php_dbase.dll

extension=php_gd2.dll GD库做图,一般用于图形验证码;

extension=php_mysql.dll 用于连接MYSQL数据库;

3) 、修改好后把 php.ini 文件复制到 C\WINDOWS\ 目录里:

4)、将PHP目录下的 php5ts.dll 文件拷贝到 C:\WINDOWS\system32 目录。

5)、最后修改 Apache httpd.conf 文件。在该文件的末尾添加如下2行,表示以模块方式安装PHP进入Apache

LoadModule php5_module E:/Php/php5apache2_2.dll

AddType application/x-httpd-php .php

 

注意:第一行的目录路径要更新为当前版本的apache动态链接库,比如这里我使用的是apache2.2.17版本和php5.3.6,那这个文件必须是php5apache2_2.dll,而不能是php5apache.dllphp5apache2.dll等。第二行为php脚步的后缀。

php4版中,需要添加一行 AddType mod_php4.c,而在php5中,就不需要这样的一行 AddType mod_php5.c了,php5已经集成,否则 apache 启动不了。

 

以上就完成了apachephp的配置过程了,重启apache。在服务器的默认目录“E:\ Apache\htdocs”里新建文件index.php,写上如下代码:

<?php

phpinfo();

?>

在浏览器地址栏里输入 http://127.0.0.1/ http://localhost/ ,你就会看到php版本信息了。到此为止,phpapache就已经成功的安装了。

 

这里有个细节:apache的配置文件 httpd.conf 中的目录分割符号是“/”,而 PHP 的配置文件 php.ini 里的目录则要求是反斜线 \”,不要搞混了哦。

 

posted @ 2012-05-13 08:38 青蛙學堂 阅读(171) | 评论 (1)编辑 收藏

仅列出标题
共35页: 1 2 3 4 5 6 7 8 9 Last 
<2017年12月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

导航

统计

常用链接

留言簿(7)

随笔分类

随笔档案

收藏夹

青蛙学堂

最新评论

阅读排行榜

评论排行榜