<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[网站建设技术集锦-Lee's Blog]]></title>
  <subtitle type="html"><![CDATA[本博客是涉及网站建设、服务器维护等IT技术的博客－不为失败找借口,只为成功找方法。]]></subtitle>
  <id>http://www.biglee.cn/blog/</id>
  <link rel="alternate" type="text/html" href="http://www.biglee.cn/blog/" /> 
  <link rel="self" type="application/atom+xml" href="http://www.biglee.cn/blog/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.8">PJBlog3</generator> 
  <updated>2012-05-18T22:01:17+08:00</updated>

  <entry>
	  <title type="html"><![CDATA[pjblog升级到3.2.9.518后友情链接页面无数据的解决方法]]></title>
	  <author>
		 <name>Lee</name>
		 <uri>http://www.biglee.cn/blog/</uri>
		 <email>lee at biglee.cn</email>
	  </author>
	  <category term="" scheme="http://www.biglee.cn/blog/default.asp?cateID=9" label="网站技术" /> 
	  <updated>2012-05-18T22:01:17+08:00</updated>
	  <published>2012-05-18T22:01:17+08:00</published>
		  <summary type="html"><![CDATA[<p>　　前不久得空将博客程序升级到了V3.2.9.518版，今天和一网友交换友情链接时发现友情链接的更多页面里所有友情链接都消失了，只剩下一个友情链接申请提交表单。</p>
<p>　　正好有点时间，于是分析了下程序和数据库，找到了问题的所在。</p>
<p>　　先看BlogLink.asp的51行：server.Execute(&quot;post/link.html&quot;)，查看post/link.html文件，发现内容为空，这是直接原因。</p>
<p>　　再看生成post/link.html文件的程序代码，是control/f_control.asp里的258行开始的这个Sub PostLink()。对应数据库表结构，可知这个代码是先读取友情链接分类，然后再按分类读取友情链接信息，然而我发现友情链接表里的分类ID都为0，也就是未分类，因此程序最终没有读取到任何信息。</p>
<p>　　解决办法有两个，一个就是去后台将所有的友情链接分类。这是最简单的方法。</p>
<p>　　还有一个办法就是修改程序，将未分类的友情链接也读取出来。之前一直未注意，不知道上一个版本有没有这样的问题，有的话也是类似的修改方法。附修改后的Sub PostLink()代码如下：</p>
<p>Sub PostLink()<br />
&nbsp;&nbsp;&nbsp;&nbsp; Dim LoadTemplate, Temp, SaveArticle<br />
&nbsp; Dim Link_SplitArray, Link_Global_Temp, Link_Layout_Temp, LinkClassTemp, LinkTemp, AllTemp<br />
&nbsp;&nbsp;&nbsp;&nbsp; LoadTemplate = LoadFromFile(&quot;Template/Link.asp&quot;)<br />
&nbsp;&nbsp;&nbsp;&nbsp; If LoadTemplate(0) = 0 Then '读取成功后写入信息<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Temp = LoadTemplate(1)<br />
&nbsp;&nbsp; Link_SplitArray = Split(Temp, &quot;&lt;#ST(B)#&gt;&quot;)<br />
&nbsp;&nbsp; Link_Global_Temp = Link_SplitArray(1)<br />
&nbsp;&nbsp; Link_Layout_Temp = Link_SplitArray(2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim blog_Links<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set blog_Links = conn.Execute(&quot;Select * From blog_LinkClass order by LinkClass_Order asc&quot;)<br />
&nbsp;&nbsp; AllTemp = &quot;&quot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Do Until blog_Links.EOF<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LinkClassTemp = Link_Global_Temp<br />
&nbsp;&nbsp;&nbsp; LinkTemp = Link_Layout_Temp<br />
&nbsp;&nbsp;&nbsp; Dim LinkSingContent<br />
&nbsp;&nbsp;&nbsp; LinkSingContent = GetLinkSingleHtml(LinkTemp, Trim(blog_Links(&quot;LinkClass_ID&quot;)), 3)<br />
&nbsp;&nbsp;&nbsp; If Len(LinkSingContent) &gt; 0 Then<br />
&nbsp;&nbsp;&nbsp;&nbsp; LinkClassTemp = Replace(LinkClassTemp, &quot;&lt;$LinkClass_Name$&gt;&quot;, Trim(blog_Links(&quot;LinkClass_Name&quot;)))<br />
&nbsp;&nbsp;&nbsp;&nbsp; LinkClassTemp = Replace(LinkClassTemp, &quot;&lt;$LinkClass_Title$&gt;&quot;, Trim(blog_Links(&quot;LinkClass_Title&quot;)))<br />
&nbsp;&nbsp;&nbsp;&nbsp; LinkClassTemp = Replace(LinkClassTemp, &quot;&lt;$LoopLayout$&gt;&quot;, LinkSingContent)<br />
&nbsp;&nbsp;&nbsp;&nbsp; AllTemp = AllTemp &amp; LinkClassTemp<br />
&nbsp;&nbsp;&nbsp; End If<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; blog_Links.movenext<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Loop<br />
&nbsp;&nbsp; LinkClassTemp = Link_Global_Temp<br />
&nbsp;&nbsp; LinkTemp = Link_Layout_Temp<br />
&nbsp;&nbsp; LinkSingContent = GetLinkSingleHtml(LinkTemp, 0, 3)<br />
&nbsp;&nbsp; If Len(LinkSingContent) &gt; 0 Then<br />
&nbsp;&nbsp;&nbsp; LinkClassTemp = Replace(LinkClassTemp, &quot;&lt;$LinkClass_Name$&gt;&quot;, &quot;其它&quot;)<br />
&nbsp;&nbsp;&nbsp; LinkClassTemp = Replace(LinkClassTemp, &quot;&lt;$LinkClass_Title$&gt;&quot;, &quot;Orther&quot;)<br />
&nbsp;&nbsp;&nbsp; LinkClassTemp = Replace(LinkClassTemp, &quot;&lt;$LoopLayout$&gt;&quot;, LinkSingContent)<br />
&nbsp;&nbsp;&nbsp; AllTemp = AllTemp &amp; LinkClassTemp<br />
&nbsp;&nbsp; End If<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SaveArticle = SaveToFile(AllTemp, &quot;post/link.html&quot;)<br />
&nbsp;&nbsp;&nbsp;&nbsp; End If<br />
&nbsp;End Sub</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.biglee.cn/blog/article.asp?id=210" /> 
	  <id>http://www.biglee.cn/blog/default.asp?id=210</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[ubuntu desktop cd、server、alt&#101;rnate三个版本的区别]]></title>
	  <author>
		 <name>Lee</name>
		 <uri>http://www.biglee.cn/blog/</uri>
		 <email>lee at biglee.cn</email>
	  </author>
	  <category term="" scheme="http://www.biglee.cn/blog/default.asp?cateID=8" label="PC技术" /> 
	  <updated>2012-05-12T06:09:09+08:00</updated>
	  <published>2012-05-12T06:09:09+08:00</published>
		  <summary type="html"><![CDATA[<p>Newbies of Ubuntu/Kubuntu/Edubuntu will be confused by the name of her official released CDs &ndash; Desktop Live CD, Alternate CD and Server CD. Why she makes these different CDs?</p>
<p>Desktop Live CD<br />
Live CD allows user to boot it from CD-ROM and experience the power of Linux. Live CD is a complete operating system that running from CD. You can use it for testing hardwares and/or softwares compatibilty. You can use it to taste the new version of the distribution. You can use it for internet kiosks or libraries.</p>
<p>You can install any software on the Live CD. Once you reboot or switch off, the change will be lost. Ubuntu Desktop Live CD provides the most common features to end-users, especially for newcomers. It is very easy to use and/or install. If you have no experience in Linux, you can install Ubuntu via the Live CD in a few steps. You can choose the default setting if you are in doubt. It requires more memory compare with Alternate CD.</p>
<p>In addition, you can install Ubuntu by Live CD on a Windows system via Wubi. Wubi allows you to install Ubuntu in Windows system as a file. You can uninstall it just like other Windows softwares.</p>
<p>Alternate CD<br />
Unlike Live CD, Alternate CD is a text mode installer. It requires an experienced Linux user to operate. It provides more drivers, such as FakeRAID, software RAID and some other drivers and features. You can also choose LVM and encrytped directory too. It is more flexible and powerful compare with Live CD. The final product is a graphical desktop environment. It can install for a lesser memory machine, thanks to the text mode installer.</p>
<p>Server CD<br />
It is a text mode installer and similar to Alternate CD. You can choose some common servers to install, such as LAMP, mail server, DNS, SQL server and File Server. The servers that you have chosen are almost configured but some of them need to be tuned for different usage. It is targeted to experienced Linux users. The final product is a command line environment.</p>
<p>Conclusion<br />
Ubuntu makes 3 different CDs in order to keep it fit in a 700MB CD and targeted to different users. Although it may cause confusion, it is a good idea for different market and user.</p>
<p>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－</p>
<div class="postbody"><span style="font-weight: bold">Desktop CD<br />
</span><br />
The desktop CD allows you to try Ubuntu without changing your computer at all, and at your option to install it permanently later. This type of CD is what most people will want to use. You will need at least 192MB of RAM to install from this CD. <br />
<br />
<span style="font-weight: bold">Server install CD</span> <br />
<br />
The server install CD allows you to install Ubuntu permanently on a computer. <br />
<span style="font-weight: bold"><br />
Alternate install CD</span> <br />
<br />
The alternate install CD allows you to perform certain specialist installations of Ubuntu. It provides for the following situations: <br />
<br />
* creating pre-configured OEM systems; <br />
* setting up automated deployments; <br />
* upgrading from older installations without network access; <br />
* LVM and/or RAID partitioning; <br />
* installs on systems with less than about 192MB of RAM.</div>
<p>
<p>&nbsp;</p>
</p>
<div class="postbody">－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－</div>
<div class="postbody">鉴于选择ubuntu做server的不多 <br />
<br />
Live CD可以免安装体验 也可以用于网络诊断 比较方便 <br />
Live CD也可以用于在windows引导不了时做一些工作 <br />
Live CD还可以用于备份系统 还可以用于安装gentoo lfs等发行版 <br />
Live CD能干嘛 就看你的想象力了 <br />
实乃是居家旅行 走亲访友 杀人越货之必备良药 <br />
<br />
单纯的安装角度来看 <br />
alternate install cd是首选 占用资源小 兼容性好 速度快 定制性相对强</div>
<p>ubuntu 发布的linux里面有一个非常具有迷惑性的版本-desktop。因为有一套server，所以desktop很容易从字面上被理解成桌面版。而这样理解的人通常会弄不明白剩下那个alternate是什么东西。</p>
<p>其实desktop是Live CD的名字，也就是刻录在光盘上运行的Linux。是一套已经装好的系统。把它烧录到光盘上放进光驱就可以直接运行这套完整的linux。当然你也可以在运行之后把它&ldquo;安装&rdquo;到硬盘上，而这样的安装更像是一种拷贝或者还原，类似ghost。<br />
真正意义上正统的安装版本则是alternate，它是由许多deb包组成的。可以详细的制定安装内容。是正宗的硬盘安装版。</p>
<p>这两个版本还有一些速度上的区别。<br />
因为类似系统还原，desktop的安装速度较快。而alternate正式的安装相比之下会慢一些。<br />
而运行的时候恰好相反：desktop因为是既成的，可能会缺少对应软件环境的适应性，所以和灵活指定及安装的alternate相比会慢一些。</p>
<p>desktopCD安装前可以看到基本界面和试用(liveCD功能), <br />
alternate面向安装个性化需求更大的更专业一点点的用户. <br />
desktop和alternate都有基本的软件包,要更多的软件包只要修改合适的源下载也是很快的.<br />
desktop是一个live cd ,只用于桌面系统，也可以在LiveCD状态下安装。<br />
alternate是标准的安装CD。包含了一些桌面程序，可以用高级安装模式安装，在安装时可以划分分区。也可以当作Server来用，不过一些Server 程序要自己通过网络来安装<br />
Alternate安装过程会有高级分区以及grub安装选项,Desktop没有.<br />
alternate既能安装desktop也能安装server<br />
desktop是一个live cd ，在桌面环境里面 以向导的方式引导安装<br />
live CD 就是把安装好的软件放到光盘中， 安装时就把其上的内容复制到硬盘再简单配置就行了。</p>
<p>alternate CD上放的DEB的软件包，安装时要解压、配置</p>
<p>只有在机子硬件配置很低时用 live CD安装较慢，其余都比alternate的要快。</p>
<p>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－</p>
<p><span class="signature">
<p>The Desktop CD Install installs from within a nice graphical interface, and I believe previously had no repository on the CD, it just copies the files across from the cd and eats up memory because it is running a live version as it installs. Excellent if you do not want to install via a menu driven intreface or a command line system.<br />
<br />
The Alternative CD installs in a command line environment or menu driven interface, is easy to customize as you go along if you know what you are doing, making it easy to install on low system requirement and does not cause many of the failed installations as the Desktop CD. The alternative CD has a repository on the CD.<br />
<br />
The Server CD does not install any desktop environment, such as kde or gnome, and installs a kernel that is less responsive to user inputs (via mouse or keyboard) and is more responsive to disk activity. IE it installs a slightly different kernel. With a server cd if you want a desktop you have to install it via the repositories by apt-get install ubuntu-desktop. The server cd has repository sources on the CD.<br />
<br />
That I think are the main diffrences.<!-- / message --><br />
<br />
&nbsp;</p>
</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="postbody">&nbsp;</div>
<div class="postbody">&nbsp;</div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.biglee.cn/blog/article.asp?id=209" /> 
	  <id>http://www.biglee.cn/blog/default.asp?id=209</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[VideoShot.exe停止工作的解决办法]]></title>
	  <author>
		 <name>Lee</name>
		 <uri>http://www.biglee.cn/blog/</uri>
		 <email>lee at biglee.cn</email>
	  </author>
	  <category term="" scheme="http://www.biglee.cn/blog/default.asp?cateID=8" label="PC技术" /> 
	  <updated>2012-04-27T21:27:06+08:00</updated>
	  <published>2012-04-27T21:27:06+08:00</published>
		  <summary type="html"><![CDATA[　　正专心查找资料，突然接连冒出两个“VideoShot.exe停止工作”的错误提示，上网搜索了下，这个是迅雷的一个插件，有人说是视频下载完成后就会出这个错。这才想起来刚才应GF之请，在下载几集电视剧以备五一旅途消磨时间用，查看了下下载进度，正好有两集下载完成了。<br/>　　既然是视频下载完成后出这个错误提示，这插件应该是个视频预览插件。再看下迅雷，发现迅雷在下载完成后自动切换到下载完成列表，右边有个视频信息一栏，貌似就是预览视频的，但是由于出错了，没信息。那我去禁用或者删除这个插件好了，反正我又不想用迅雷这个预览功能。打开迅雷7，找了设置中心等各个角落也没找到插件管理的地方。<br/>　　该死的迅雷，好吧，我自己去你老巢把这个插件给揪出来。在迅雷安装目录搜索了下VideoShot.exe，果真在addins\VideoAddin目录中找到了它。直接删除的话，应该会有什么问题的，那我搜索下配置文件，看看能不能找到相关的信息，搜索包含字符串“VideoShot.exe”的文件，只找到一个unins000.dat，不应该是它，再搜索目录名：VideoAddin，这下找到了好几个文件。其中两个文件比较可疑，一个是Thunder\addins目录下的addins_cache.xml，一个是skin\default目录下的skin.xml。<br/>　　用记事本等文本编辑器打开addins_cache.xml，搜索字符串“VideoAddin”，找到了“&amp;lt;addin&nbsp;&nbsp;name=&#39;VideoAddin&#39; /&amp;gt;”，删除掉，保存文件。<br/>　　再打开skin.xml，同样搜索字符串“VideoAddin”，先是找到一行这样的字符串：<br/>　　&amp;lt;texture id=&amp;quot;VideoAddin::texture.videoaddin.bgpanel.bg&amp;quot;&nbsp;&nbsp; /&amp;gt;<br/>为了方便调试与恢复，我不删除，先注释掉，改为：<br/>　　&amp;lt;!--&amp;lt;texture id=&amp;quot;VideoAddin::texture.videoaddin.bgpanel.bg&amp;quot;&nbsp;&nbsp; /&amp;gt;--&amp;gt;<br/>　　继续搜索字符串“VideoAddin”，找到几行这样的字符串：<br/><div class="UBBPanel quotePanel"><div class="UBBTitle"><img src="http://www.biglee.cn/blog/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent"><br/>视频信息面板<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.videoaddin.snap.bottompanel&amp;quot;&nbsp;&nbsp; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.videoaddin.line&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.videoaddin.bottompanel&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.viewsnapbtn.play.normal&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.viewsnapbtn.play.down&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.viewsnapbtn.play.hover&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.taskvideoinfo.reftabsbkg&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.viewsnapRightbtn.play.normal&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.viewsnapRightbtn.play.down&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.viewsnapRightbtn.play.hover&amp;quot; /&amp;gt;<br/>&amp;lt;bitmap id=&amp;quot;VideoAddin::bitmap.taskvideoinfo.ExtendTabs.Splitter&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::VideoInfo.NineInOne.bkg&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.viewsnapRightbtn.play.disable&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.bkg.addBtn&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.videoInfo.AddNormal&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.videoInfo.AddHover&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.videoInfo.AddDown&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin.TaskList.DapBtn.FluencyNormal&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin.TaskList.DapBtn.FluencyHover&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin.TaskList.DapBtn.FluencyDown&amp;quot; /&amp;gt;<br/></div></div><br/>　　一看就知道是视频信息那栏一配置信息了，也给注释掉，改成：<div class="UBBPanel quotePanel"><div class="UBBTitle"><img src="http://www.biglee.cn/blog/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent">&amp;lt;!--视频信息面板<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.videoaddin.snap.bottompanel&amp;quot;&nbsp;&nbsp; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.videoaddin.line&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.videoaddin.bottompanel&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.viewsnapbtn.play.normal&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.viewsnapbtn.play.down&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.viewsnapbtn.play.hover&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.taskvideoinfo.reftabsbkg&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.viewsnapRightbtn.play.normal&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.viewsnapRightbtn.play.down&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.viewsnapRightbtn.play.hover&amp;quot; /&amp;gt;<br/>&amp;lt;bitmap id=&amp;quot;VideoAddin::bitmap.taskvideoinfo.ExtendTabs.Splitter&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::VideoInfo.NineInOne.bkg&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.viewsnapRightbtn.play.disable&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.bkg.addBtn&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.videoInfo.AddNormal&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.videoInfo.AddHover&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin::texture.videoInfo.AddDown&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin.TaskList.DapBtn.FluencyNormal&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin.TaskList.DapBtn.FluencyHover&amp;quot; /&amp;gt;<br/>&amp;lt;texture id=&amp;quot;VideoAddin.TaskList.DapBtn.FluencyDown&amp;quot; /&amp;gt;--&amp;gt;<br/></div></div><br/>　　保存文件，退出并重新打开迅雷，再去下载一个视频，下载完成后再也没有错误提示了。]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.biglee.cn/blog/article.asp?id=208" /> 
	  <id>http://www.biglee.cn/blog/default.asp?id=208</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Jinitiator控件IE崩溃及Jinitiator界面汉字方框的解决办法]]></title>
	  <author>
		 <name>Lee</name>
		 <uri>http://www.biglee.cn/blog/</uri>
		 <email>lee at biglee.cn</email>
	  </author>
	  <category term="" scheme="http://www.biglee.cn/blog/default.asp?cateID=15" label="数据库" /> 
	  <updated>2012-04-27T08:54:09+08:00</updated>
	  <published>2012-04-27T08:54:09+08:00</published>
		  <summary type="html"><![CDATA[　　前几天拿到的一套网络销售系统原来还有个类似ERP的管理后台，折腾了半天才架设起来并找到入口，类似<a href="http://IP:7778/forms/frmservlet?config=webutil" target="_blank" rel="external">http://IP:7778/forms/frmservlet?config=webutil</a>&amp;form=main，初步了解了下，好像是用Oracle Form builder开发的。在原来就安装好Jinitiator控件的一台服务器上（Windwos Server 2003操作系统）用IE打开这个网址，然后会弹出个类似JVM的界面，但界面上的汉字都是乱码的，就是显示成黑色线的方框。<br/>　　网上搜索了下，说是将Jinitiator安装目录C:\Program Files\Oracle\JInitiator 1.3.1.22\下的lib文件夹里的font.properties.zh.5.1复制一份，重命名为font.properties.zh.5.2即可解决，试了下，果然成功了。<br/>　　为了方便查看系统，同事就在他的办公电脑（Windows 7）上也浏览器那个网址，并按提示安装了Jinitiator控件，但是安装完成后用IE浏览器这个网址直接就崩溃了。我也在自己的笔记本上（Windows Server 2008）安装此控件，用IE打开也直接崩溃，用Maxthon打开，提示：<br/>Maxthon 阻止了一个错误.<br/>Fault address:&nbsp;&nbsp;6D4AC228 03:00014228 C:\PROGRA~1\Oracle\JINITI~1.22\bin\hotspot\jvm.dll<br/>然后就崩溃了。<br/>同事说难道Win7之类的系统与这个控件不兼容？找了台装有Windows XP的电脑试了下，依旧崩溃。<br/>　　网上查了下资料，看到有人说Jinitiator和JVM其实是差不多的东西，我就想尝试下安装个JDK看看能不能解决。先是把Jinitiator卸载了，然后安装JDK，试了下还是失败，再把Jinitiator装上去，依旧不成功。<br/>　　回顾了下整个过程，我又注意到Maxthon下的错误提示，是与jvm.dll有关的，那把JDK下的jvm.dll复制过来替换了，是否能行呢？搜索下JDK安装目录，找到三个jvm.dll文件，分别在“Java\jre6\bin\client”、“Java\jdk1.6.0_10\jre\bin\client”和“Java\jdk1.6.0_10\jre\bin\server”目录下，前两个文件大小是一样的，我猜是同样的文件，还有一个文件稍大，用哪个好呢？既然是在运行客户端，那就用client目录下的吧，替换后，再次打开那个网址，再也不崩溃了。<br/>　　一波刚平一波又起，IE是不崩溃了，打开的界面同样是乱码的，并且用刚刚那个办法无法解决。再次上网搜索，很快找到解决办法：<br/>在Jinitiator安装目录的lib文件夹中找到font.properties.zh，把里面的<br/>filename.\u5b8b\u4f53=SIMSUN.TTF<br/>改为<br/>filename.\u5b8b\u4f53=SIMSUN.TTC<br/>即可<br/>　　折腾了半天，解决了两个问题，现将解决办法记录在此，供遇到相同问题的朋友参考。]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.biglee.cn/blog/article.asp?id=207" /> 
	  <id>http://www.biglee.cn/blog/default.asp?id=207</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Oracle数据库出错ORA-01033的解决办法之一]]></title>
	  <author>
		 <name>Lee</name>
		 <uri>http://www.biglee.cn/blog/</uri>
		 <email>lee at biglee.cn</email>
	  </author>
	  <category term="" scheme="http://www.biglee.cn/blog/default.asp?cateID=15" label="数据库" /> 
	  <updated>2012-04-26T01:01:09+08:00</updated>
	  <published>2012-04-26T01:01:09+08:00</published>
		  <summary type="html"><![CDATA[　　这几天拿到一套网络销售系统（连电脑一起搬过来），要架设起来看看。开机后发现是Windows Server 2003的操作系统，IIS下的ASP站点，用的是Oracle数据库。打开站点发现报错：ORA-01033:oracle initializationg o&#114; shutdown in progress ，是数据库连接问题。通过PL/SQL Developer连接Oracle时也报ORA-01033:oracle initializationg o&#114; shutdown in progress 错误提示。经过一番折腾解决了问题。解决思路为：用命令行模式启动数据库服务，看看初始化与装载数据库时具体提示哪个地方出错。过程如下：<br/><br/>1、进入CMD，执行set o&#114;ACLE_SID=db（要确保连接到正确的SID）<br/>2、执行sqlplus &#34;/as sysdba&#34;<br/>　　SQL&gt;shutdown immediate　　（先停止服务）<br/>　　SQL&gt;startup 　　　　　　　　　（启动服务）<br/>数据库装载完毕，但是报错：<br/>o&#114;A-16038：日志 3 序列号 290 无法归档<br/>o&#114;A-19504：无法创建文件&#34;&#34;<br/>o&#114;A-00312：联机日志线程1：&#39;F:\ORACLE\ORADATA\DB\REDO03.LOG&#39;<br/><br/>3、联想到之前系统提示F盘空间不足，虽然我之前已经清理了一些，但是我看了下才几十M的可用空间了，难道是这个原因？再次清理了下F盘，然后再次停止服务后启动服务，此次正常。<br/>4、进入PL/SQL Developer检查，没有再提示错误。<br/>　　至此，问题解决，打开站点访问也没有报错了。]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.biglee.cn/blog/article.asp?id=206" /> 
	  <id>http://www.biglee.cn/blog/default.asp?id=206</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[PHP利用SMTP发送邮件（Mail）的类与函数]]></title>
	  <author>
		 <name>Lee</name>
		 <uri>http://www.biglee.cn/blog/</uri>
		 <email>lee at biglee.cn</email>
	  </author>
	  <category term="" scheme="http://www.biglee.cn/blog/default.asp?cateID=15" label="数据库" /> 
	  <updated>2012-04-20T14:35:45+08:00</updated>
	  <published>2012-04-20T14:35:45+08:00</published>
		  <summary type="html"><![CDATA[　　很多情况下，服务器都没有建邮件服务器，因为PHP自带的Mail函数基本上起不了什么作用。废话不多说，分享一个用SMTP可以发信的类和函数。<br/>SMTP类代码：<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code73975);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.biglee.cn/blog/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code73975>class smtp<br/>{<br/>&#160;&#160;&#160;&#160;/* Public Variables */<br/>&#160;&#160;&#160;&#160;var $smtp_port;<br/>&#160;&#160;&#160;&#160;var $time_out;<br/>&#160;&#160;&#160;&#160;var $host_name;<br/>&#160;&#160;&#160;&#160;var $log_file;<br/>&#160;&#160;&#160;&#160;var $relay_host;<br/>&#160;&#160;&#160;&#160;var $debug;<br/>&#160;&#160;&#160;&#160;var $auth;<br/>&#160;&#160;&#160;&#160;var $user;<br/>&#160;&#160;&#160;&#160;var $pass;<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;/* Private Variables */<br/>&#160;&#160;&#160;&#160;var $sock;<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;/* Constractor */<br/>&#160;&#160;&#160;&#160;function smtp($relay_host = &#34;&#34;, $smtp_port = 25,$auth = false,$user,$pass)<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this-&gt;debug = FALSE;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this-&gt;smtp_port = $smtp_port;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this-&gt;relay_host = $relay_host;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this-&gt;time_out = 30; //is used in fsockopen()<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this-&gt;auth = $auth;//auth<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this-&gt;user = $user;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this-&gt;pass = $pass;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;#<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this-&gt;host_name = &#34;localhost&#34;; //is used in HELO command<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this-&gt;log_file = &#34;&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this-&gt;sock = FALSE;<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;/* Main Function */<br/>&#160;&#160;&#160;&#160;function sendmail($to, $from, $subject = &#34;&#34;, $body = &#34;&#34;, $mailtype, $cc = &#34;&#34;, $bcc = &#34;&#34;, $additional_headers = &#34;&#34;)<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$mail_from = $this-&gt;get_address($this-&gt;strip_comment($from));<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$body = ereg_replace(&#34;(^|(\r\n))(\\.)&#34;, &#34;\\1.\\3&#34;, $body);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$header .= &#34;MIME-Version:1.0\r\n&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if($mailtype==&#34;HTML&#34;){<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$header .= &#34;Content-Type:text/html\r\n&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$header .= &#34;To: &#34;.$to.&#34;\r\n&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if ($cc != &#34;&#34;) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$header .= &#34;Cc: &#34;.$cc.&#34;\r\n&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$header .= &#34;From: $from&lt;&#34;.$from.&#34;&gt;;\r\n&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$header .= &#34;Subject: &#34;.$subject.&#34;\r\n&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$header .= $additional_headers;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$header .= &#34;Date: &#34;.date(&#34;r&#34;).&#34;\r\n&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$header .= &#34;X-Mailer:By Redhat (PHP/&#34;.phpversion().&#34;)\r\n&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;list($msec, $sec) = explode(&#34; &#34;, microtime());<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$header .= &#34;Message-ID: &lt;&#34;.date(&#34;YmdHis&#34;, $sec).&#34;.&#34;.($msec*1000000).&#34;.&#34;.$mail_from.&#34;&gt;;\r\n&#34;;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$TO = explode(&#34;,&#34;, $this-&gt;strip_comment($to));<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if ($cc != &#34;&#34;) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$TO = array_merge($TO, explode(&#34;,&#34;, $this-&gt;strip_comment($cc)));<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if ($bcc != &#34;&#34;) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$TO = array_merge($TO, explode(&#34;,&#34;, $this-&gt;strip_comment($bcc)));<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$sent = TRUE;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;foreach ($TO as $rcpt_to) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$rcpt_to = $this-&gt;get_address($rcpt_to);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (!$this-&gt;smtp_sockopen($rcpt_to)) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this-&gt;log_write(&#34;Error: Cannot send email to &#34;.$rcpt_to.&#34;\n&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$sent = FALSE;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;continue;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if ($this-&gt;smtp_send($this-&gt;host_name, $mail_from, $rcpt_to, $header, $body)) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this-&gt;log_write(&#34;E-mail has been sent to &lt;&#34;.$rcpt_to.&#34;&gt;;\n&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} else {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this-&gt;log_write(&#34;Error: Cannot send email to &lt;&#34;.$rcpt_to.&#34;&gt;;\n&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$sent = FALSE;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;fclose($this-&gt;sock);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this-&gt;log_write(&#34;Disconnected from remote host\n&#34;);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return $sent;<br/>&#160;&#160;&#160;&#160;}<br/><br/>/* Private Functions */<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function smtp_send($helo, $from, $to, $header, $body = &#34;&#34;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!$this-&gt;smtp_putcmd(&#34;HELO&#34;, $helo)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $this-&gt;smtp_error(&#34;sending HELO command&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#auth<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($this-&gt;auth){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!$this-&gt;smtp_putcmd(&#34;AUTH LOGIN&#34;, base64_encode($this-&gt;user))) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $this-&gt;smtp_error(&#34;sending HELO command&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!$this-&gt;smtp_putcmd(&#34;&#34;, base64_encode($this-&gt;pass))) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $this-&gt;smtp_error(&#34;sending HELO command&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!$this-&gt;smtp_putcmd(&#34;MAIL&#34;, &#34;FROM:&lt;&#34;.$from.&#34;&gt;;&#34;)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $this-&gt;smtp_error(&#34;sending MAIL FROM command&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!$this-&gt;smtp_putcmd(&#34;RCPT&#34;, &#34;TO:&lt;&#34;.$to.&#34;&gt;;&#34;)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $this-&gt;smtp_error(&#34;sending RCPT TO command&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!$this-&gt;smtp_putcmd(&#34;DATA&#34;)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $this-&gt;smtp_error(&#34;sending DATA command&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!$this-&gt;smtp_message($header, $body)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $this-&gt;smtp_error(&#34;sending message&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!$this-&gt;smtp_eom()) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $this-&gt;smtp_error(&#34;sending &lt;CR&gt;;&lt;LF&gt;;.&lt;CR&gt;;&lt;LF&gt;; [EOM]&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!$this-&gt;smtp_putcmd(&#34;QUIT&#34;)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $this-&gt;smtp_error(&#34;sending QUIT command&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function smtp_sockopen($address)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($this-&gt;relay_host == &#34;&#34;) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $this-&gt;smtp_sockopen_mx($address);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $this-&gt;smtp_sockopen_relay();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function smtp_sockopen_relay()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;log_write(&#34;Trying to &#34;.$this-&gt;relay_host.&#34;:&#34;.$this-&gt;smtp_port.&#34;\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;sock = @fsockopen($this-&gt;relay_host, $this-&gt;smtp_port, $errno, $errstr, $this-&gt;time_out);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!($this-&gt;sock &amp;&amp; $this-&gt;smtp_ok())) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;log_write(&#34;Error: Cannot connenct to relay host &#34;.$this-&gt;relay_host.&#34;\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;log_write(&#34;Error: &#34;.$errstr.&#34; (&#34;.$errno.&#34;)\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;log_write(&#34;Connected to relay host &#34;.$this-&gt;relay_host.&#34;\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function smtp_sockopen_mx($address)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$domain = ereg_replace(&#34;^.+@([^@]+)$&#34;, &#34;\\1&#34;, $address);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!@getmxrr($domain, $MXHOSTS)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;log_write(&#34;Error: Cannot resolve MX \&#34;&#34;.$domain.&#34;\&#34;\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach ($MXHOSTS as $host) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;log_write(&#34;Trying to &#34;.$host.&#34;:&#34;.$this-&gt;smtp_port.&#34;\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;sock = @fsockopen($host, $this-&gt;smtp_port, $errno, $errstr, $this-&gt;time_out);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!($this-&gt;sock &amp;&amp; $this-&gt;smtp_ok())) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;log_write(&#34;Warning: Cannot connect to mx host &#34;.$host.&#34;\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;log_write(&#34;Error: &#34;.$errstr.&#34; (&#34;.$errno.&#34;)\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;log_write(&#34;Connected to mx host &#34;.$host.&#34;\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;log_write(&#34;Error: Cannot connect to any mx hosts (&#34;.implode(&#34;, &#34;, $MXHOSTS).&#34;)\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function smtp_message($header, $body)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fputs($this-&gt;sock, $header.&#34;\r\n&#34;.$body);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;smtp_debug(&#34;&gt;; &#34;.str_replace(&#34;\r\n&#34;, &#34;\n&#34;.&#34;&gt;; &#34;, $header.&#34;\n&gt;; &#34;.$body.&#34;\n&gt;; &#34;));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function smtp_eom()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fputs($this-&gt;sock, &#34;\r\n.\r\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;smtp_debug(&#34;. [EOM]\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $this-&gt;smtp_ok();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function smtp_ok()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$response = str_replace(&#34;\r\n&#34;, &#34;&#34;, fgets($this-&gt;sock, 512));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;smtp_debug($response.&#34;\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!ereg(&#34;^[23]&#34;, $response)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fputs($this-&gt;sock, &#34;QUIT\r\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fgets($this-&gt;sock, 512);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;log_write(&#34;Error: Remote host returned \&#34;&#34;.$response.&#34;\&#34;\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function smtp_putcmd($cmd, $arg = &#34;&#34;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($arg != &#34;&#34;) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($cmd==&#34;&#34;) $cmd = $arg;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else $cmd = $cmd.&#34; &#34;.$arg;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fputs($this-&gt;sock, $cmd.&#34;\r\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;smtp_debug(&#34;&gt;; &#34;.$cmd.&#34;\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $this-&gt;smtp_ok();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function smtp_error($string)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;log_write(&#34;Error: Error occurred while &#34;.$string.&#34;.\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function log_write($message)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;smtp_debug($message);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($this-&gt;log_file == &#34;&#34;) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$message = date(&#34;M d H:i:s &#34;).get_current_user().&#34;[&#34;.getmypid().&#34;]: &#34;.$message;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!@file_exists($this-&gt;log_file) || !($fp = @fopen($this-&gt;log_file, &#34;a&#34;))) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;smtp_debug(&#34;Warning: Cannot open log file \&#34;&#34;.$this-&gt;log_file.&#34;\&#34;\n&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flock($fp, LOCK_EX);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fputs($fp, $message);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose($fp);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function strip_comment($address)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$comment = &#34;\\([^()]*\\)&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (ereg($comment, $address)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$address = ereg_replace($comment, &#34;&#34;, $address);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $address;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function get_address($address)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$address = ereg_replace(&#34;([ \t\r\n])+&#34;, &#34;&#34;, $address);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$address = ereg_replace(&#34;^.*&lt;(.+)&gt;;.*$&#34;, &#34;\\1&#34;, $address);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $address;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function smtp_debug($message)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($this-&gt;debug) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $message;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}</div></div><br/>再写个发邮件函数，方便调用，代码：<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code65689);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.biglee.cn/blog/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code65689>function sendmail($smtpserver,$smtpuser,$smtppass,$smtpemailto,$smtpusermail, $mailsubject, $mailbody){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$smtp = new smtp($smtpserver,25,true,$smtpuser,$smtppass);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//$smtp-&gt;debug = TRUE;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$smtp-&gt;sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, &#34;HTML&#34;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>}</div></div><br/>调用函数发送邮件：<br/>$body=&#34;邮件内容。。。。。&#34;;<br/>sendmail(&#34;smtp.exmail.qq.com&#34;,&#34;邮箱登录名&#34;,&#34;邮箱密码&#34;,&#34;收件邮箱&#34;,&#34;发件邮箱&#34;,&#34;主题&#34;,$body);]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.biglee.cn/blog/article.asp?id=205" /> 
	  <id>http://www.biglee.cn/blog/default.asp?id=205</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[发送邮件提示“551 User not local; please try ”错误的原因及解决办法]]></title>
	  <author>
		 <name>Lee</name>
		 <uri>http://www.biglee.cn/blog/</uri>
		 <email>lee at biglee.cn</email>
	  </author>
	  <category term="" scheme="http://www.biglee.cn/blog/default.asp?cateID=9" label="网站技术" /> 
	  <updated>2012-04-18T11:17:14+08:00</updated>
	  <published>2012-04-18T11:17:14+08:00</published>
		  <summary type="html"><![CDATA[<p>　　一网站要嵌入一个客户反馈系统。为了方便收集反馈信息，并能及时查看信息，我决定以将反馈内容提交到邮箱。<br />
　　用了一个之前收集的<a target="_blank" href="http://www.biglee.cn/blog/article.asp?id=205">PHP写的SMTP发邮件类函数</a>，很快就搞定了，本地测试正常。传到服务器后发现收不到信，看了下函数，发现有Debug功能，开启Debug，反馈的信息如下：</p>
<blockquote>
<p>&nbsp;eG15Ym94MTQ3ODk2MzI1 235 Authentication successful &gt;;<br />
&nbsp;MAIL FROM:; 250 Ok &gt;;<br />
&nbsp;RCPT TO:; 551 User not local; please try Error: Remote host returned &quot;551 User not local; <br />
&nbsp;please try &quot; Error: Error occurred while sending RCPT TO command. Error: Cannot send email to ;<br />
&nbsp;Disconnected from remote host</p>
</blockquote>
<p>　　查了些资料，说出现以上错误信息的原因和所发邮件有没有内容、内容大小等都没有关系，是中国政府的国家防火墙(GFW，又名&ldquo;金盾工程&rdquo;)做了过滤的原因，它（金盾工程）定义了大陆的IP连接到大陆以外（如香港、台湾、欧洲等）的邮件服务器是不可以自己发邮件给自己的！</p>
<p>　　相反的，我是用PHP写的发送邮件程序，在海外主机上用腾讯企业邮箱的SMTP发送邮件。看来也是被墙了。再仔细看了下上面那个解释，我注意到&ldquo;不可以自己发邮件给自己&rdquo;，正好我为了方便，就是用自己和邮箱账号发给自己的邮箱来收集反馈信息，那我就换个用户来发送试试看，登录腾讯企业邮箱管理，新建了一个专门发送邮件的邮箱账号，再上传测试，成功了。</p>
<p>　　问题是解决了，但是我不明白的是，为什么自己邮箱给自己的邮箱发送就被阻止了，而发给同个服务器同个域下的另一个账号就没问题呢？不知道是出于什么目的。。。。</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.biglee.cn/blog/article.asp?id=204" /> 
	  <id>http://www.biglee.cn/blog/default.asp?id=204</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[VisualSVN 破解方法]]></title>
	  <author>
		 <name>Lee</name>
		 <uri>http://www.biglee.cn/blog/</uri>
		 <email>lee at biglee.cn</email>
	  </author>
	  <category term="" scheme="http://www.biglee.cn/blog/default.asp?cateID=8" label="PC技术" /> 
	  <updated>2012-04-12T14:20:14+08:00</updated>
	  <published>2012-04-12T14:20:14+08:00</published>
		  <summary type="html"><![CDATA[<p><strong>一、VisualSVN 通用破解方法</strong></p>
<p><span style="font-family: Verdana"><span style="font-family: Verdana">1. <a href="http://www.visualsvn.com/visualsvn/download"><font color="#ca0000">http://www.visualsvn.com/visualsvn/download</font></a>，下载1.5.x版安装(需要SVN1.5或以上环境)。<br />
2. 进入.NET Framework命令提示符，输入</span></span></p>
<p><span style="color: #000000">ildasm&nbsp;</span><span style="color: #800000">&quot;</span><span style="color: #800000">C:/Program&nbsp;Files/VisualSVN/bin/VisualSVN.Core.dll</span><span style="color: #800000">&quot;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">out</span><span style="color: #000000">=</span><span style="color: #800000">&quot;</span><span style="color: #800000">C:/Program&nbsp;Files/VisualSVN/bin/VisualSVN.Core.il</span><span style="color: #800000">&quot;</span></p>
<p><span style="color: #800000">或者用 DotNetHelper 工具，将VisualSVN.Core.dll 反编译成 VisualSVN.Core.il文件，再用记事本（最好是Editplus）打开这个文件</span></p>
<p><span style="color: #800000">在这个文件中找到：</span><span style="color: #800000"><span style="color: #000000">&ldquo;.method&nbsp;public&nbsp;hidebysig&nbsp;static&nbsp;bool&nbsp;&nbsp;IsValid( &rdquo;这行</span></span></p>
<p><span style="color: #800000"><span style="color: #000000">3、把里函数里面的内容改为：</span></span></p>
<p><span style="color: #800000"><span style="color: #000000"><span style="color: #000000">.maxstack&nbsp;&nbsp;</span><span style="color: #000000">8</span><span style="color: #000000"><br />
IL_0000:&nbsp;&nbsp;ldc.i4.</span><span style="color: #000000">1</span><span style="color: #000000"><br />
IL_0001:&nbsp;&nbsp;ret</span></span></span></p>
<p><span style="color: #800000"><span style="color: #000000"><span style="color: #000000">注意：&ldquo;<span style="color: #800000"><span style="color: #000000"><span style="color: #000000">.maxstack&nbsp;&nbsp;</span><span style="color: #000000">8</span></span></span>&rdquo;里面的&ldquo;8&rdquo;，要看看上下文中的同样标志，是否是8，我的是2</span></span></span></p>
<p><span style="color: #800000"><span style="color: #000000"><span style="color: #000000">(去掉Lincense判断直接return true)。</span></span></span></p>
<p><span style="color: #800000"><span style="color: #000000"><span style="color: #000000">或者用<span style="color: #800000">DotNetHelper工具，直接编译成.dll文件，注意，默认的文件名称是 VisualSVN.Core_Out.dll</span></span></span></span></p>
<p><span style="color: #800000"><span style="color: #000000"><span style="color: #000000"><span style="color: #800000">把原有的 VisualSVN.Core.dll 删除，再把VisualSVN.Core_Out.dll(新编译的dll文件)改名成 VisualSVN.Core.dll</span></span></span></span></p>
<p><span style="color: #800000"><span style="color: #000000"><span style="color: #000000"><span style="color: #800000"><font color="#000000">4. 回到命令行输入</font></span></span></span></span></p>
<p><span style="color: #000000">ilasm&nbsp;</span><span style="color: #800000">&quot;</span><span style="color: #800000">C:/Program&nbsp;Files/VisualSVN/bin/VisualSVN.Core.il</span><span style="color: #800000">&quot;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">dll</span></p>
<p>5、再启动vs2005，看看Visualsvn 是不是可用了</p>
<p><strong>二、关于&ldquo;VisualSVN-2.5.2&rdquo;的破解<br />
</strong></p>
<p>这个软件的核心部分是.net写的，而且没有加密和混淆，使用Reflector很容易反编译。</p>
<p>原来打算写一个Keygen程序，但是分析代码后发现注册信息部分使用了RSA加密，没有私钥就没办法生成注册码。</p>
<p>所以想到另一个方法，修改判断注册码有效性的函数&ldquo;IsValid&rdquo;，让其直接返回TRUE，这时无论输什么注册码，都会提示注册成功，但是无法生成有效的license，导致30天后失效。</p>
<p>最后想了一个笨办法，即延长有效期30年，这个方法有效</p>
<p>源码文件如下，请自行编译后覆盖原文件。</p>
<p>http://files.cnblogs.com/anotherstone/VisualSVN.Core.L_Crack.rar</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.biglee.cn/blog/article.asp?id=203" /> 
	  <id>http://www.biglee.cn/blog/default.asp?id=203</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[成就PHP高手的五个必由之路]]></title>
	  <author>
		 <name>Lee</name>
		 <uri>http://www.biglee.cn/blog/</uri>
		 <email>lee at biglee.cn</email>
	  </author>
	  <category term="" scheme="http://www.biglee.cn/blog/default.asp?cateID=9" label="网站技术" /> 
	  <updated>2012-03-31T13:40:47+08:00</updated>
	  <published>2012-03-31T13:40:47+08:00</published>
		  <summary type="html"><![CDATA[原文名称： 5 ways to be a better php developer <br/>原文链接： <a target="_blank" href="http://www.developertutorials.com/blog/web/5-ways-to-be-a-better-php-developer-36/" rel="external">http://www.developertutorials.com/blog/web/5-ways-to-be-a-better-php-developer-36/</a>英文版原文已经摘抄在本文后面，供参考。<br/>中文翻译： Altair<br/><br/>　　经常有一些经验不足的PHP开发人员在Freenode的##php IRC频道上问问题。如果问题很琐碎，或者答案显而易见，或表现得象一个菜鸟，很快他们就会发现会受到如下一些回复的炮轰：“去读该死的手册去吧”，“好好去学一学PHP吧”，“我们不是你个人的导师”或更直接的“你需要成为一个更好的PHP开发者”。但是，怎样才能成为一个更优秀的PHP开发者呢？在这篇文章中，我列出了五种成为更优秀的PHP开发者的方法，让你在PHP开发过程中提高效率，用更少的代码来完成更多的事情。在PHP的开发过程中永远会有更多的内容需要去学习,如新的核心函数，新的框架，新的设计模式，新的编码或文档规范等等。下面就是一些成为更优秀的PHP开发者的最佳途径。<br/><br/>1.阅读手册<br/><br/>　　没什么比阅读手册更值得强调的事了–仅仅通过阅读手册你就可以学习到很多东西。特别是有关字符串和数组有关的函数。就在这些函数里面包括许多有用的功能，如果你仔细阅读手册，你会经常发现在以往的项目开发过程中，很多时候你在“重复发明轮子”，而实际上你只需要一个核心函数就可以完成相应的功能。手册是你的朋友。<br/><br/>2.阅读程序源代码<br/><br/>　　有很多使用PHP开发的开源程序。为什么不去学习和借鉴呢？下载一份开源的PHP应用程序的源代码，仔细阅读它吧。也许越大的项目越值得去阅读，虽然它们也许有更复杂的结构和系统，但也有更详细的解释文档。如果你不知道从哪里开始，可以看看网站 <a href="http://www.sourceforge.net" target="_blank" rel="external">http://www.sourceforge.net</a> 。<br/><br/>3.学习一种框架<br/><br/>　　现在的框架如雨后春笋般纷纷出笼;它们中的大部分都是开源的，可以直接从网上下载，当然你要知道从哪里去下载。可以先选择一些主流的框架 — 网站<a target="_blank" href="http://www.phpframeworks.com" rel="external">http://www.phpframeworks.com</a>里有一个非常好的主流框架的列表。<br/><br/>4.研究<br/><br/>　　在PHP网站开发过程和讨论中你可能听说过很多术语。从OOP到MVC,KISS到DRY,YAML到INI,甚至REST到XML-RPC，也许有数百个与你的工作直接相关的技术概念。你也许对它们有了一个基本的了解，但你真的了解它们到底是什么，对你有什么意义吗？花一点时间去做些实实在在的研究吧。Wikipedia是从事这些研究的很好的起点。你一定会从中学到一些新知识的。<br/><br/>5.学习面向对象程序设计<br/><br/>　　这也许是上一个方法的继续，但是OOP比你想象的更重要。你真的了解PHP5中OOP是如何实现的吗？例如，你真的了解抽象类，接口，“implements”关键字，静态方法和静态属性，访问修饰符“protected”吗？甚至许多有经验的开发人员都倒在这些问题的面前。如果你能充分利用OOP的特征，你就可以节省很多的开发时间。<br/><br/>　　就是这些。要想成为 PHP 高手，这是五个最直接而又重要的的方法<br/><br/>附英文原文：<br/>5 Ways to be a Better PHP Developer<br/>Often, an inexperienced PHP developer will hop onto IRC and ask a question in ##php on Freenode. And if the question is trivial, the answer seems obvious o&#114; they simply seem like a newbie, they may soon find themselves bombarded with such comments as “RTFM”, “Go learn PHP”, “We are not your personal tutors” o&#114; simply “You need to become a better PHP developer”. So, how is it that one becomes a better PHP developer? In this post, I’ll outline five ways to be a better developer, improve your productivity, write less code and achieve more with your web applications.There’s always more to learn when it comes to PHP development. New core functions, new frameworks, new design patterns, new code documentation styles. Here are some of the best ways you can become a better PHP developer.<br/><br/>1. Read the manual<br/>I really can’t emphasize this enough – there’s a lot to be learned just reading the PHP manual. Especially check out the string and array functions. There’s a lot of functionality available right there, and often by reading through the manual you’ll find you’ve been reinventing the wheel in past projects when you could have just used a core function. The manual is your friend.<br/><br/>2. Browse through some code<br/>PHP has a lot of open source code out there. So why not learn from it? Download an open source PHP application and have a read through the code. The bigger projects are probably better, as they’ll have more complex structures and systems in place but also more thorough documentation explaining it all. Check out SourceForge.net if you can’t find a good place to start.<br/><br/>3. Learn a new framework<br/>There are more PHP frameworks out there than you’ve had hot dinners; a lot of them are open source and available online if you know wh&#101;re to look. Try the major ones first – phpframeworks.com has a good list. Your framework can never be entirely complete, your next job may require a different framework and you might just find the functionality of another comes in handy in one of your projects.<br/><br/>4. Research<br/>You’ve probably heard a lot of terminology and discussed in the context of PHP web development. From OOP to MVC, KISS to DRY, YAML to INI, even REST to XML-RPC, there are hundreds of technical concepts out there that could directly relate to your work. You may have formed a basic understanding of them, but do you really know what they are o&#114; what they mean for you? Spend some time doing real research; Wikipedia is a good place to start. You’re bound to learn something new.<br/><br/>5. Learn OOP<br/>Maybe this follows on a little from the previous point, but OOP is more important than you think. Do you really know about PHP5′s implementation OOP? For example, are you familiar with abstract classes, interfaces, the implements keyword, static methods and properties, the ‘protected’ access modifier? Even many experienced PHP developers fall down in this area. If you make use of the features of OOP, you could save yourself a lot of development time.<br/><br/>So there you have it. Five, straightforward yet significant ways to be a better PHP developer.]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.biglee.cn/blog/article.asp?id=202" /> 
	  <id>http://www.biglee.cn/blog/default.asp?id=202</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[10位顶级PHP大师的开发原则]]></title>
	  <author>
		 <name>Lee</name>
		 <uri>http://www.biglee.cn/blog/</uri>
		 <email>lee at biglee.cn</email>
	  </author>
	  <category term="" scheme="http://www.biglee.cn/blog/default.asp?cateID=9" label="网站技术" /> 
	  <updated>2012-03-28T16:04:57+08:00</updated>
	  <published>2012-03-28T16:04:57+08:00</published>
		  <summary type="html"><![CDATA[　　1. 在合适的时候使用PHP – Rasmus Lerdorf<br/><br/>　　没有谁比PHP的创建者Rasmus Lerdorf明白PHP用在什么地方是更合理的，他于1995年发布了PHP这门语言，从那时起，PHP就像燎原之火，烧遍了整个开发阵营，改变了互联网的世界。可是，Rasmus并不是因此而创建PHP的。PHP是为了解决web开发者的实际问题而诞生的。<br/><br/>　　和许多开源项目一样，PHP变得流行，流行的动机并不能用正常的哲学来进行解释，甚至流行得有些孤芳自赏。它完全可以作为一个案例，一个解决各种Web问题的工具需求所引起的案例，因此当PHP刚出现的时候，这种工具需求全部聚焦到PHP的身上。<br/><br/>　　但是，你不能奢望PHP可以解决所有问题。Lerdorf是第一个承认PHP只是一种工具的人，并且PHP也有很多力所不能及的情况。<br/><br/>　　根据工作的不同来选择合适的工具。我跑了很多家公司，为了说服他们部署和使用PHP，但是这并不意味着PHP对所有问题都适用。它只是可以一个解决大部分问题的front-end脚步语言。<br/><br/>　　作为一个web开发者，尝试用PHP解决所有问题是不科学的，同时也会浪费你的时间。当PHP玩不转的时候，不要犹豫，试用一下其他的语言吧。<br/><br/>　　2. 使用多表存储提高规模伸缩性 – Matt Mullenweg<br/><br/>　　没有人愿意质疑Matt Mullenweg在PHP方面的权威性，他开发了这个星球上最流行的blog系统,(依靠一个强大的社区力量支持)： WordPress. 创建Wordpress以后，Matt和他的团队启动了WordPress.com平台，一个基于WordPress MU的免费blog站点。现在，Wordpress.com已经拥有大约400万用户， 这些用户每天提供超过 140,000篇的日志。 <br/><br/>　　如果有人知道如何让网站的规模伸缩自如，这个人一定是Matt Mullenweg。2006年的时候 Matt对Wordpress的数据结构进行了前瞻性的改进，并且解释了为什么Wordpress MU对每个blog使用独立的MYSQL表格， 而不是把所有的blog数据都塞进一个巨大的表格。<br/><br/>　　我们测试过这个方法，但是发现如果要扩展它的伸缩性，代价太高。如果用一个整体的数据结构，在大流量面前，你将会面临服务器 硬件的问题。在MU里面。用户们都被分布到独立的表格当中，并且可以轻易地组织起来。举个例子，WordPress.com把用户的数据分散存储到4096个数据库中，这些数据库可以分散大规模的数据访问，实现流量和压力分流。<br/><br/>　　数据表的可迁移性让代码(blog)可以运行得更快，并且让系统具备更强的伸缩性。依靠强大的缓存策略和灵活的数据库运用策略， Matt向人们展示了时下最流行的Facebook和Wordpress.com都可以在PHP下稳定运行，并且处理惊人的访问量。<br/><br/>　　3. 千万不要相信用户 – Dave Child<br/><br/>　　Dave Child是Added Bytes (previously ilovejackdaniels.com) 网站的核心人物，这个网站以他出色的《cheat sheets for many programming languages》而闻名。 Dave为很多英国的公司服务，并且已经在编程世界里树立起相当的权威。<br/><br/>　　Dave为PHP开发者提供了很多深谋远虑的建议，并总结成了《writing secure code in PHP》：千万不要相信你的用户，他们甚至可能会伤害你。<br/><br/>　　有一条web开发的基本原则，我重复多少遍都觉得不够，那就是：千万不要相信你的用户，同时要假设你网站中的每个数据单元都是从用户那里收集来的恶意代码。很多时候，你必须用javascri&#112;t在客户端检验表单提交过来的内容， 如果你习惯了如此，那么，这是一个好习惯。如果安全性对你来说很重要，这就是最重要最需要学习的原则。<br/><br/>　　Dave目前正致力于为它的《Writing Secure PHP》系列书籍整理实例，书的最后他说:<br/><br/>　　最后，变得偏执一点吧。除非你认为你的站点永远不会受到攻击，否则就正视所有的问题，当问题真正发生的时候，你的情况会变得很糟。你需要把每个用户都看成会带来一场攻防站的黑客，想尽一切办法来保护站点的安全，同时想好相应问题的解决方案。<br/><br/>　　4. 多使用PHP缓存 – Ben Balbo<br/><br/>　　Ben Balbo开发了Site Point，一个为developers和designers提供指导的网站。他是墨尔本PHP开发和开源俱乐部的成员， 因此他对PHP有一定的了解，同时对PHP caching有一定的想法和经验。<br/><br/>　　如果你拥有一个访问量很大，但更新并不频繁的站点(比如blog，基于某种CMS)，或许它需要进行一些改造，这些改造不会花费太多的时间，但是对性能有突出的贡献。 如果要为一个复杂/更新频率很快的站点建立缓存机制，过程可能会很曲折，但是好处也是显而易见的。<br/><br/>　　PHP缓存技术有很多种，Ben为我们推荐了如下一些:<br/><br/>　　◆缓存函数的运行结果<br/><br/>　　◆设置过期时间<br/><br/>　　◆缓存IE下载的文件<br/><br/>　　◆模板缓存技术<br/><br/>　　◆Cache_Lite<br/><br/>　　由于PHP作为动态语言的特性，缓存机制对于更新频率并不快的站点来说非常重要。<br/><br/>　　5. 使用IDE, Templates和Snippets加速PHP开发 – Chad Kieffer<br/><br/>　　当Chad Kieffer从UI设计和数据库优化的工作中抽身出来的时候，他会在他的博客2 tablespoons上分享很多技术经验。由于Chad多方面的全面发展，他经常可以发现其他程序员不能发现的问题，并形成相关经验，尤其是他开发网站的方法。他参与了网站开发的各个环节，因此他的建议对于提高网站开发的大局观非常有用。<br/><br/>　　Chad认为使用Eclipse PDT(Eclipse’s PHP development package) 这样的IDE，同时使用一些模板技术和开源项目可以有效地提高PHP的开发速度。<br/><br/>　　紧凑的计划，长长的to do lists以及deadlines让开发人员非常苦闷。不过有些功能，比如Eclipse Templates，可以有效减少编码的时间和出错的几率。<br/><br/>　　通常来说，任何项目都可以自动化，自动化程度越高， 你完成项目的时间就越短。花时间来开发使用频率很高的框架和模板，将会节省你以后更多时间。同时，使用像Eclipse and the PDT package这样的IDE，你会发现效率得到明显提高，IDE可以自动闭合，补全分号并且可以在本地debug。<br/><br/>　　6. 利用好PHP的过滤函数 – Joey Sochacki<br/><br/>　　或许Joey Sochacki并不像Matt Mullenweg那样有名 ，但他也是一个经验丰富的开发者，并且通过他的博客Devolio分享了很多技术经验<br/><br/>　　Joey发现在编写php代码的过程中有很多地方需要进行过滤，但却并没有太多的coder关注php的内置过滤函数。<br/><br/>　　过滤数据是我们经常需要做的事情，但是很多功能丰富的PHP内置过滤函数却不为人知。使用类似filter_* 的PHP内置函数，我们几乎可以处理所有的过滤任务，包括数据类型验证/URL/email和IP地址验证/特殊字符处理等等。<br/><br/>　　过滤是一件复杂的事情，但是我相信joey的发现会给你很多启发，让你认识到PHP强大的过滤功能。<br/><br/>　　7. 使用PHP框架 – Josh Sharp<br/><br/>　　对于是否应该使用Zend, CakePHP, Code Igniter, 或者 其他PHP框架，一直存在着很多争议，但是在web开发者的心中，他们有自己衡量的标准。<br/><br/>　　Josh Sharp自己创建了一家提供面包和黄油服务的网站，因此他对于使用PHP框架来开发网站有一定的经验。他认为使用一个PHP框架来进行项目开发(use a PHP framework )，可以有效地节省时间，并且减少出错的几率。为什么?因为他觉得PHP实在是太好上手了。<br/><br/>　　PHP的易于使用有时候也有缺陷，因为并不严格的语法，经常会导致很多错误代码的诞生。但如果使用一个PHP框架，出错的几率就会大大减少。<br/><br/>　　PHP框架可以让你的代码结构更加规范，并且节省大量时间。<br/><br/>　　8. 不要使用PHP框架 – Rasmus Lerdorf<br/><br/>　　与Josh的观点恰恰相反，PHP的鼻祖Rasmus Lerdorf却认为最好不要使用PHP框架，为什么?因为不基于框架的PHP性能更好。Rasmus在Drupalcon 2008的演讲上，用“Hello World”的例子来对比了一些框架PHP和简单PHP之间的性能，结果显示框架PHP的性能要远远落后。<br/><br/>　　9. 使用批处理 – Jack D. Herrington<br/><br/>　　Jack Herrington对PHP世界并不陌生， 并且为大名鼎鼎的IBM developerWorks贡献过超过30篇的专搞， 同时出版过《PHP Hacks》的书，因此他是一个真正的专家。<br/><br/>　　Herrington推荐使用批处理和Cron来代替那些可以运行在后台的程序脚步，Web用户并不愿意在线等待你的处理过程，所以有些事情更适合放到后台来处理。<br/><br/>　　诚然，在某些情况下，这有点大材小用了，但是你可以清楚地看到，使用Cron, MySQL, PHP面向对象的方法以及Pear::DB这些便捷的工具来创建一个批处理工具并不是一件复杂的事情。<br/><br/>　　Jack认为使用cron, PHP和MySQL在后台处理一些任务，比起多进程的业务逻辑要划算得多。<br/><br/>　　两种方法我都尝试过，我认为Cron非常符合”Keep It Simple, Stupid” (KISS) 的原则，它让后台处理变得简单。与多进程的业务逻辑相比，它没有内存 溢出的风险。你可以创建一个简单的批处理脚本，并且在cron中运行，这个脚本会定时检查是否有任务需要处理，处理完之后就会自动退出，因此你不用担心是否有进程卡壳，或者陷入死循环。<br/><br/>　　10. 及时启用错误报告 – David Cummings<br/><br/>　　David Cummings有一个专门提供CMS软件服务的公司 ，并且获得过几次奖 ，他有非常丰富的PHP开发经验。David曾经写过《two PHP tips he wished he’d learned in the beginning》，其中一点就是：及时启用错误报告，这会节省大量的时间。<br/><br/>　　我告诉人们，最重要的事情就是最大程度地开启PHP的错误报告，为什么?因为PHP可能会隐藏很多小问题：<br/><br/>　　◆变量没有预定义<br/><br/>　　◆在代码片段中引用了不可用的变量<br/><br/>　　◆使用了未定义的常量这些因素看起来并不是什么大事，除非你在使用面向对象的方法编写一些类库。通常，关闭错误报告将可能使你付出更大的成本来维护你的代码。<br/><br/>　　错误报告可以帮你轻易地找到代码的问题所在，如果错误报告的等级够高，细微的错误都能被立即发现，帮助你节省整体debug的时间。]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.biglee.cn/blog/article.asp?id=201" /> 
	  <id>http://www.biglee.cn/blog/default.asp?id=201</id>
  </entry>	
		
</feed>

