<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

         摘要:   <html> </html>   標志著html文件的開始與結束 <head> </head>  頭部標志符 <title> </title>  網頁的標題 <boby> </boby> 構成web的主體 1. background&nbs...  閱讀全文
    posted @ 2009-11-18 15:31 肖馬輝 閱讀(1011) | 評論 (0)編輯 收藏
     
    如何利用網頁彈出各種形式的窗口,我想大家大多都是知道些的,但那種多種多樣的彈出式窗口是怎么搞出來的,我們今天就來學習一下:

      1.彈啟一個全屏窗口

    <html>
    <body onload="window.open('http://www.kunde58.com','example01','fullscreen');">;
    <b>www.kunde58.com</b>
    </body>
    </html>

      2.彈啟一個被F11化后的窗口

    <html>
    <body onload="window.open(''http://www.kunde58.com','example02','channelmode');">;
    <b>www.kunde58.com</b>
    </body>
    </html>

      3.彈啟一個帶有收藏鏈接工具欄的窗口

    <html>
    <body onload="window.open('www.wangye8.com','example03','width=400,height=300,directories');">
    <b>www.wangye8.com</b>
    </body>
    </html>

      4.網頁對話框

    <html>
    <SCRIPT LANGUAGE="javascript">
    <!--
    showModalDialog('http://www.kunde58.com,'example04','dialogWidth:400px;dialogHeight:300px;
    dialogLeft:200px;dialogTop:150px;center:yes;help:yes;resizable:yes;status:yes')
    //-->
    </SCRIPT>
    <b>www.wangye8.com</b>
    </body>
    </html>

    <html>
    <SCRIPT LANGUAGE="javascript">
    <!--
    showModelessDialog('http://www.kunde58.com,'example05','dialogWidth:400px;dialogHeight:300px;
    dialogLeft:200px;dialogTop:150px;center:yes;help:yes;resizable:yes;status:yes')
    //-->
    </SCRIPT>
    <b>http://www.wangye8.com</b>
    </body>
    </html>

      showModalDialog()或是showModelessDialog() 來調用網頁對話框,至于showModalDialog()與showModelessDialog()的區別,在于showModalDialog()打開的窗口(簡稱模式窗口),置在父窗口上,必須關閉才能訪問父窗口(建議盡量少用,以免招人反感);showModelessDialog()

    dialogHeight: iHeight 設置對話框窗口的高度。
    dialogWidth: iWidth 設置對話框窗口的寬度。   
    dialogLeft: iXPos 設置對話框窗口相對于桌面左上角的left位置。
    dialogTop: iYPos 設置對話框窗口相對于桌面左上角的top位置。
    center: {yes | no | 1 | 0 } 指定是否將對話框在桌面上居中,默認值是“yes”。
    help: {yes | no | 1 | 0 } 指定對話框窗口中是否顯示上下文敏感的幫助圖標。默認值是“yes”。   
    resizable: {yes | no | 1 | 0 } 指定是否對話框窗口大小可變。默認值是“no”。
    status: {yes | no | 1 | 0 } 指定對話框窗口是否顯示狀態欄。對于非模式對話框窗口,默認值是“yes”;對于模式對話框窗口,默認值是 “no”。

    5、其他彈出窗口代碼

    經常上網的朋友可能到過這樣一些網站,一進入首頁立刻會彈出一個窗口,或者按一個鏈接或按鈕彈出,通常在這個窗口里會顯示一些注意事項、版權信息、警告、歡迎光顧之類的話或者作者想要特別提示的信息。其實制作這樣的頁面非常容易,只要往該頁面的HTML里加入幾段java script代碼即可實現。下面我就帶你剖析它的奧秘。

    【最基本的彈出窗口代碼】
    其實代碼非常簡單:
    <SCRIPT LANGUAGE="java script">
    <!--
    window.open (’page.html’)
    -->
    </SCRIPT>
    因為這是一段java script代碼,所以它們應該放在<SCRIPT LANGUAGE ="java script">標簽和</script>之間。<!--和-->是對一些版本低的瀏覽器起作用,在這些老瀏覽器中如果不支持java script,不會將標簽中的代碼作為文本顯示出來。
    Window.open (’page.html’)用于控制彈出新的窗口page.html,如果page.html不與主窗口在同一路徑下,前面應寫明路徑,絕對路徑(http://)和相對路徑(../)均可。

     

    用單引號和雙引號都可以,只是不要混用。
    這一段代碼可以加入HTML的任意位置,加入到<head>和</head>之間也可以,位置越靠前執行越早,尤其是頁面代碼較長時,又想使頁面早點彈出就盡量往前放。

    【經過設置后的彈出窗口】
    下面再說一說彈出窗口外觀的設置。只要再往上面的代碼中加一點東西就可以了。
    我們來定制這個彈出窗口的外觀、尺寸大小、彈出位置以適應該頁面的具體情況。
    <SCRIPT LANGUAGE="java script:>
    <!--
    window.open (’page.html’,’newwindow’,’height=100,width=400,top=0,left=0,toolbar=no,menubar=no,scrollbars=no,resizable=no,
    location=no,status=no’)
    //寫成一行
    -->
    </SCRIPT>
    參數解釋:
    <SCRIPT LANGUAGE="java script"> js腳本開始;
    window.open 彈出新窗口的命令;
    page.html 彈出新窗口的文件名;
    newwindow 彈出窗口的名字(不是文件名),可用空 ″代替;
    height=100 窗口高度;
    top=0 窗口距離屏幕上方的像素值;
    left=0 窗口距離屏幕左側的像素值;
    toolbar=no 是否顯示工具欄,yes為顯示;
    menubar,scrollbars 表示菜單欄和滾動欄;
    resizable=no 是否允許改變窗口大小,yes為允許;
    location=no 是否顯示地址欄,yes為允許;
    status=no 是否顯示狀態欄內的信息(通常是文件已經打開),yes為允許;
    </SCRIPT> js腳本結束。

    【用函數控制彈出窗口】
    下面是一個完整的代碼。
    <html>
    <head>
    <script LANGUAGE="java script">
    <!--
    function openwin(){
    window.open("page.html","newwindow","height=100,width=400,toolbar=no,menubar=no,scrollbars=no,resizable=no,
    location=no,status=no";)
    //寫成一行
    }
    -->
    </script>
    </head>
    <body onload="openwin()">
    ...任意的頁面內容...
    </body>
    </html>
    這里定義了一個函數openwin(),函數內容就是打開一個窗口。在調用它之前沒有任何用途。怎么調用呢?
    方法一:<body onload="openwen()"> 瀏覽器讀頁面時彈出窗口;
    方法二:<body onunload="openwen()"> 瀏覽器離開頁面時彈出窗口;
    方法三:用一個連接調用:<a href="#" onclick="openwin()">打開一個窗口</a>
    注意:使用的"#"是虛連接。
    方法四:用一個按鈕調用:<input type="button" onclick="openwin()" value="打開窗口">

    【主窗口打開文件1.htm,同時彈出小窗口page.html】
    將如下代碼加入主窗口<head>區:
    <script language="java script">
    <!--
    function openwin(){
    window.open("page.html","","width=200,height=200" ;)
    }
    //-->
    </script>
    加入<body>區:<a href="1.htm" onclick="openwin()">open</a>即可。

    【彈出的窗口之定時關閉控制】
    下面我們再對彈出窗口進行一些控制,效果就更好了。如果我們再將一小段代碼加入彈出的頁面(注意是加入到page.html的HTML中,可不是主頁面中,否則…),讓它在10秒鐘后自動關閉是不是更酷了?
    首先,將如下代碼加入page.html文件的<head>區:
    <script language="java script">
    function closeit() {
    setTimeout("self.close()",10000) //毫秒
    }
    </script>
    然后,再用<body onload="closeit()">這一句話代替page.html中原有的<BODY>這一句就可以了。(這一句話千萬不要忘記寫啊!這一句的作用是調用關閉窗口的代碼,10秒鐘后就自行關閉該窗口。)

    【在彈出窗口中加上一個關閉按鈕】
    <form>
    <INPUT TYPE=’BUTTON’ value=’關閉’ onClick=’window.close()’>
    </form>
    呵呵,現在更加完美了!

     

     

    內包含的彈出窗口——一個頁面兩個窗口】
    上面的例子都包含兩個窗口,一個是主窗口,另一個是彈出的小窗口。
    通過下面的例子,你可以在一個頁面內完成上面的效果。
    <html>
    <head>
    <SCRIPT LANGUAGE="java script">
    function openwin()
    {
    OpenWindow=window.open("","newwin","height=250,width=250,toolbar=no,scrollbars="+scroll+",menubar=no";);
    //寫成一行
    OpenWindow.document.write("<TITLE>例子</TITLE>" ;)
    OpenWindow.document.write("<BODY BGCOLOR=#FFFFFF>" ;)
    OpenWindow.document.write("<H1>Hello!</h1>" ;)
    OpenWindow.document.write("New window opened!" ;)
    OpenWindow.document.write("</BODY >" ;)
    OpenWindow.document.write("</HTML>" ;)
    OpenWindow.document.close()
    }
    </script>
    </head>
    <body>
    <a href="#" onclick="openwin()">打開一個窗口</a>
    <input type="button" onclick="openwin()" value="打開窗口">
    </body>
    </html>
    看看OpenWindow.document.write()里面的代碼不就是標準的HTML嗎?只要按照格式寫更多的行即可。千萬注意多一個標簽或少一個標簽都會出現錯誤。記住用OpenWindow.document.close()結束啊。

    【終極應用——彈出窗口的Cookie控制】
    回想一下,上面的彈出窗口雖然酷,但是有一點小毛病(你沉浸在喜悅之中,一定沒有發現吧?)比如你將上面的腳本放在一個需要頻繁經過的頁面里(例如首頁),那么每次刷新這個頁面,窗口都會彈出一次,是不是非常煩人?有解決的辦法嗎?Yes!Follow me。我們使用Cookie來控制一下就可以了。
    首先,將如下代碼加入主頁面HTML的<HEAD>區:

    <script>
    function openpopup(){
    window.open("hello.htm","","width=300,height=300") //自己修改彈出窗口
    }

    function get_cookie(Name) {
    var search = Name + "="
    var returnvalue = "";
    if (documents.cookie.length > 0) {
    offset = documents.cookie.indexOf(search)
    if (offset != -1) { // if cookie exists
    offset += search.length
    // set index of beginning of value
    end = documents.cookie.indexOf(";", offset);
    // set index of end of cookie value
    if (end == -1)
    end = documents.cookie.length;
    returnvalue=unescape(documents.cookie.substring(offset, end))
    }
    }
    return returnvalue;
    }

    function loadpopup(){
    if (get_cookie('popped')==''){
    openpopup()
    documents.cookie="popped=yes"
    }
    }

    </script>
    </head>

    將如下代碼鍵入BODY區:
    <body onunload="loadpopup()"> //pop when leave page
    或者:
    <body onload="loadpopup()"> //pop when enter page

    你可以試著刷新一下這個頁面或重新進入該頁面,窗口再也不會彈出了。真正的Pop-Only-Once!
    寫到這里,彈出窗口的制作和應用技巧基本上算是講完了,希望對正在制作網頁的朋友有所幫助我就非常欣慰了。
    需要注意的是,JS腳本中的大小寫最好前后保持一致。

    沒有菜單、工具欄、地址欄的彈出窗口:

    <script language="java script">
    <!--
    var gt = unescape(’%3e’);
    var popup = null;
    var over = "Launch Pop-up Navigator";
    popup = window.open(’’, ’popupnav’, ’width=500,height=500,resizable=0,scrollbars=auto’); // width=500,height=500為窗口長和寬
    if (popup != null) {
    if (popup.opener == null) {
    popup.opener = self; }
    popup.location.href = ’要打開的文件名’;
    }
    // -->
    </script>


    方法二:Cookies應用:控制彈出窗口 當我們在一個頁面中設置一個POP彈出窗口后,每次只要重新瀏覽該頁面,POP窗口就會自動彈出來,造成不必要的麻煩。那么怎么解決這個問題呢? 我在這里用一個簡單的例子講解一下如何通過操作Cookies讓彈出窗口只在第一次瀏覽該頁面時彈出,以后就不再招人煩了!

     

     

    <script> function openpopwindow() { window.open("hello.htm","","width=200,height=200" //自己修改彈出窗口 } function get_cookie(Name) { var search = Name + "="; var returnvalue = ""; if (documents.cookie.length > 0) { offset = documents.cookie.indexOf(search); if (offset != -1) { // 如果以前有cookies記錄 offset += search.length; // 設置cookie的起始位置 end = documents.cookie.indexOf(";", offset); // 設置cookie的結束位置 if (end == -1) end = documents.cookie.length; returnvalue=unescape(documents.cookie.substring(offset, end)) } } return returnvalue; } function loadpopup() { if (get_cookie('popped')=='') { openpopwindow(); documents.cookie="popped=yes"; } } </script>

    將上面的代碼鍵入BODY區: <body onunload="loadpopup()"> //離開頁面的時候彈出
    或者: <body onload="loadpopup()"> //打開頁面的時候彈出


    離開頁面時彈開窗口效果:

    效果:別人關閉這個頁面的時候,彈出一個窗口,你可以寫一些祝福的話
    核心代碼:
    <script LANGUAGE="javascript">
    <!--Begin function leave(){
    window.open
    ('1.htm',",'toolbar=no,menubar=no,location=no,height=225,width=235');
    break
    }
    //END-->
    </script>

    posted @ 2009-11-05 18:10 肖馬輝 閱讀(1515) | 評論 (0)編輯 收藏
     
    Zend是眾多開源成功故事之一的主角,它遵循了已在MySQL和Subversion中被證明成功的模式,針對那些需要高可靠性、高可擴展性Web應用服務器的企業客戶,提供技術支持和商用軟件。

      此前,該公司已經宣布推出了Zend Server軟件,這是一個在一臺到三臺服務器上運行PHP應用的高度集成平臺。它包含一個高速代碼緩存功能,可以讓PHP應用更快速運行。它還可以監控用戶服務器上的所有PHP腳本,當運行緩慢或出錯時向用戶告警。

      現在,Zend正在推出其企業軟件的精簡免費版,在Zend Server社區版中,用戶可以獲得同樣的高性能代碼執行和管理界面,但是不會獲得技術支持,而且當PHP更新發布時,不會獲得即時升級。盡管如此,用戶至少可以使用其強大的功能,輕松節省昂貴的硬件升級成本。

      Zend創始人濟夫•蘇拉斯基(Zeev Suraski)最近接受了媒體采訪,談論了Zend Server社區版與其非免費版本的關系,以及其團隊為何花費了如此長時間來開發PHP 6等。

      記者:Zend Server與現有Zend平臺軟件有何異同?

      蘇拉斯基:開始階段,我們計劃同時運作管理這兩款產品,其中Zend Server針對單服務器解決方案,最多兩、三臺服務器;而Zend平臺針對大型集群環境。我們決定逐漸推出Zend Server戰略,因此未來我們計劃在Zend Server上增加群集支持功能,以及對其增加Zend平臺上的其它功能和新功能。

      記者:也就是說,你的計劃是把Zend平臺的功能加入到Zend Server中?

      蘇拉斯基:對,不過不僅僅增加來自Zend平臺的功能,我們還將改進其用戶界面和易用性,因此未來在群集版Zend Server中你不會看到完全相同的功能,而是它們的改進版;或者具有更高的性能,或者是全新的功能。

      記者:Zend Server的關鍵特點之一是,它是一個高度集成的解決方案,具有以更優化方式配置運行的軟件。但用戶已經有了MySQL和Apache,是否真的還需要Zend Server?

      蘇拉斯基:這要看你使用什么操作系統。如果你在一個已經安裝Apache的Linux系統上安裝它,那么你無需安裝一個新Apache,只需使用系統自帶的Apache即可。但是如果你使用其它系統,你可以通過Zend Server來安裝Apache,這將非常方便。

      記者:用戶能使用系統自帶的PHP嗎?

      蘇拉斯基:不能。用戶必須使用Zend Server中的PHP。從技術的角度講,你或許可以這么做,但是我們不建議這么做,也不對此進行支持。

      記者:Zend Server的監控代理自動跟蹤腳本、數據庫連接或其它PHP相關問題出錯的時間,它能夠保存應用程序狀態,因此可以在以后進行恢復。這需要占用很多資源嗎?

      蘇拉斯基:如果用戶的應用程序確實非常差,那么它會產生很多這種事件,保存它們的確需要花費大量時間。但一般情況下,用戶的應用程序不會產生太多這種事件,其資源開銷幾乎可以忽略不計,大約在1%到2%之間。它取決于產生事件的數量。

      記者:是否可以說Zend正在進入以前由Java應用服務器統治的一個領域?

      蘇拉斯基:在某種程度上我認為是如此。實際上在某些方面已經是一個事實。PHP已經被應用于許多關鍵業務應用中,并且被進行了非常大范圍的部署,例如維基百科、YouTube和Flickr等。這種趨勢還在增長,我們認為這非常有意義,并在Zend Server中對其進行支持。

      記者:另一方面,隨著Zend Server讓PHP更加面向企業,是否可以說PHP可能在失去與其最初社區的聯系?

      蘇拉斯基:我認為不是這樣,但是我要指出的是PHP已經發展了12年到13年,它不再是新手語言。也就是說,我認為PHP社區依然在開發它,而且與使用它的社區依然保持緊密聯系。PHP社區非常健康,它非常強大且依然在增長。

      PHP的關鍵優勢是它是一個成熟的解決方案,這已經被事實證明。知道如何使用Ruby或Python部署網站的人還相對較少,它們也都是非常好的解決方案,但是它們的社區規模要比PHP社區小的多。當然,Web服務器行業有容納多個產品的空間,我不認為PHP會被所有的網站所使用。

      記者:是否可以說社區的開源產品正在影響Zend Server免費版中的功能?舉例來說,我認為PHP 6將包含一個可選代碼緩存標準,你們是否會對此推出相應版本?

      蘇拉斯基:這是我們決定增加的功能之一,但是它不是唯一的功能。

      可選PHP緩存(APC)將成為PHP的標準,但是它不會帶來多大變化,它已經在PHP擴展庫中,用戶可以非常輕松的安裝它,而且如果用戶關注PHP 6的話,將會發現它并不會默認被啟用。如果人們真的喜歡APC,可以禁用Zend Optimizer插件然后使用APC,除了小部分用戶界面是Zend專用之外,其它完全相同。

      記者:PHP 6的開發時間似乎過于長了。考慮到Perl 6的情況,難道數字6是一個魔咒?或者只是計劃的一部分?

      蘇拉斯基:或許吧,不過我認為PHP 6將在Python 6之前推出。PHP 6是一個比PHP 4和PHP 5都更難的項目,原因有二:一是PHP的代碼庫現在已經如此巨大;二是每一處細小的兼容性故障都會成為很多人的噩夢。而且由于PHP 6將引入對native Unicode的支持,不可避免的會給該語言帶來大量兼容性故障。坦白的說,我不知道最終結果會如何。

      記者:與從PHP 4轉向PHP 5相比,從PHP 5轉向PHP 6的難度如何?

      蘇拉斯基:從版本4到版本5的遷移是相當成功的,只花了幾年的時間,但是今天的PHP 5已經比當初的PHP 4更加普及。我們決定不著急進行升級,因此我們現在更關注PHP 5.3。

      我們決定在PHP 5.3中增加最初計劃在PHP 6中推出的一些新功能,諸如命名空間,這樣我們不必急于升級到PHP 6。PHP 6正式推出可能還需要一段時間。

    posted @ 2009-10-27 10:17 肖馬輝 閱讀(122) | 評論 (0)編輯 收藏
     

    //遍歷option和添加、移除option
    function changeShipMethod(shipping){
    var len = $("select[@name=ISHIPTYPE] option").length
    if(shipping.value != "CA"){
    $("select[@name=ISHIPTYPE] option").each(function(){
    if($(this).val() == 111){
    $(this).remove();
    }
    });
    }else{
    $("<option value='111'>UPS Ground</option>").appendTo($("select[@name=ISHIPTYPE]"));
    }
    }


    //取得下拉選單的選取值

    $(#testSelect option:selected').text();
    或$("#testSelect").find('option:selected').text();
    或$("#testSelect").val();
    //////////////////////////////////////////////////////////////////
    記性不好的可以收藏下:
    1,下拉框:

    var cc1 = $(".formc select[@name='country'] option[@selected]").text(); //得到下拉菜單的選中項的文本(注意中間有空格)
    var cc2 = $('.formc select[@name="country"]').val(); //得到下拉菜單的選中項的值
    var cc3 = $('.formc select[@name="country"]').attr("id"); //得到下拉菜單的選中項的ID屬性值
    $("#select").empty();//清空下拉框//$("#select").html('');
    $("<option value='1'>1111</option>").appendTo("#select")//添加下拉框的option

    稍微解釋一下:
    1.select[@name='country'] option[@selected] 表示具有name 屬性,
    并且該屬性值為'country' 的select元素 里面的具有selected 屬性的option 元素;
    可以看出有@開頭的就表示后面跟的是屬性。

    2,單選框:
    $("input[@type=radio][@checked]").val(); //得到單選框的選中項的值(注意中間沒有空格)
    $("input[@type=radio][@value=2]").attr("checked",'checked'); //設置單選框value=2的為選中狀態.(注意中間沒有空格)

    3,復選框:
    $("input[@type=checkbox][@checked]").val(); //得到復選框的選中的第一項的值
    $("input[@type=checkbox][@checked]").each(function(){ //由于復選框一般選中的是多個,所以可以循環輸出
    alert($(this).val());
    });

    $("#chk1").attr("checked",'');//不打勾
    $("#chk2").attr("checked",true);//打勾
    if($("#chk1").attr('checked')==undefined){} //判斷是否已經打勾


    當然jquery的選擇器是強大的. 還有很多方法.

    <script src="jquery-1.2.1.js" type="text/javascript"></script>
    <script language="javascript" type="text/javascript">
    $(document).ready(function(){
    $("#selectTest").change(function()
    {
    //alert("Hello");
    //alert($("#selectTest").attr("name"));
    //$("a").attr("href","xx.html");
    //window.location.href="xx.html";
    //alert($("#selectTest").val());
    alert($("#selectTest option[@selected]").text());
    $("#selectTest").attr("value", "2");

    });
    });
    </script>


    <a href="#">aaass</a>

    <!--下拉框-->
    <select id="selectTest" name="selectTest">
    <option value="1">11</option>
    <option value="2">22</option>
    <option value="3">33</option>
    <option value="4">44</option>
    <option value="5">55</option>
    <option value="6">66</option>
    </select>
    jquery radio取值,checkbox取值,select取值,radio選中,checkbox選中,select選中,及其相關獲取一組radio被選中項的值
    var item = $('input[@name=items][@checked]').val();
    獲取select被選中項的文本
    var item = $("select[@name=items] option[@selected]").text();
    select下拉框的第二個元素為當前選中值
    $('#select_id')[0].selectedIndex = 1;
    radio單選組的第二個元素為當前選中值
    $('input[@name=items]').get(1).checked = true;
    獲取值:
    文本框,文本區域:$("#txt").attr("value");
    多選框checkbox:$("#checkbox_id").attr("value");
    單選組radio: $("input[@type=radio][@checked]").val();
    下拉框select: $('#sel').val();
    控制表單元素:
    文本框,文本區域:$("#txt").attr("value",'');//清空內容
    $("#txt").attr("value",'11');//填充內容
    多選框checkbox: $("#chk1").attr("checked",'');//不打勾
    $("#chk2").attr("checked",true);//打勾
    if($("#chk1").attr('checked')==undefined) //判斷是否已經打勾
    單選組radio: $("input[@type=radio]").attr("checked",'2');//設置value=2的項目為當前選中項
    下拉框select: $("#sel").attr("value",'-sel3');//設置value=-sel3的項目為當前選中項
    $("<optionvalue='1'>1111</option><optionvalue='2'> 2222</option>").appendTo("#sel")//添加下拉框的option
    $("#sel").empty();//清空下拉框

    獲取一組radio被選中項的值
    var item = $('input[@name=items][@checked]').val();
    獲取select被選中項的文本
    var item = $("select[@name=items] option[@selected]").text();
    select下拉框的第二個元素為當前選中值
    $('#select_id')[0].selectedIndex = 1;
    radio單選組的第二個元素為當前選中值
    $('input[@name=items]').get(1).checked = true;
    獲取值:
    文本框,文本區域:$("#txt").attr("value");
    多選框checkbox:$("#checkbox_id").attr("value");
    單選組radio: $("input[@type=radio][@checked]").val();
    下拉框select: $('#sel').val();
    控制表單元素:
    文本框,文本區域:$("#txt").attr("value",'');//清空內容
    $("#txt").attr("value",'11');//填充內容
    多選框checkbox: $("#chk1").attr("checked",'');//不打勾
    $("#chk2").attr("checked",true);//打勾
    if($("#chk1").attr('checked')==undefined) //判斷是否已經打勾
    單選組radio: $("input[@type=radio]").attr("checked",'2');//設置value=2的項目為當前選中項
    下拉框select: $("#sel").attr("value",'-sel3');//設置value=-sel3的項目為當前選中項
    $("<option value='1'>1111</option><option value='2'>2222</option>").appendTo("#sel")//添加下拉框的option
    $("#sel").empty();//清空下拉框

    posted @ 2009-10-22 11:41 肖馬輝 閱讀(161) | 評論 (0)編輯 收藏
     

    提交表單form1:
    Private Sub Command1_Click()
    WebBrowser1.Document.Forms("form1").submit
    End Sub

    將form1中的名為u的屬性設為不可用:
    Private Sub Command2_Click()
    WebBrowser1.Document.Forms("form1").u.setAttribute "disabled", "disabled"
    End Sub

    將form1中的名為u的Text框中的內容設為abc:
    Private Sub Command2_Click()
    WebBrowser1.Document.Forms("form1").u.setAttribute "value", "abc"
    End Sub

    遍歷所有標簽:
    For i = 0 To WebBrowser1.Document.All.length - 1
    If UCase(WebBrowser1.Document.All(i).tagName) = UCase("div") Then
    End If
    Next i

    1、獲得瀏覽器信息:
    Private Sub Command1_Click()
    WebBrowser1.Navigate "http://www.applevb.com"
    End Sub
    Private Sub Command2_Click()
    Dim oWindow
    Dim oNav
    Set oWindow = WebBrowser1.Document.parentWindow
    Set oNav = oWindow.navigator
    Debug.Print oNav.userAgent
    Set oWindow = Nothing
    Set oNav = Nothing
    End Sub
    點擊Command1瀏覽網頁,點擊Command2在立即窗口中輸出瀏覽器信息。

    2、彈出Webbrowser消息窗口

    Dim oWindow
    Set oWindow = WebBrowser1.Document.parentWindow
    oWindow.confirm "abcd"

    VB調用webbrowser技巧集2

    向Webbrowser中寫入HTML內容的幾種方法

    首先在Form_Load中加入

    WebBrowser1.Navigate "about:blank"

    確保Webbrowser1可用


    方法1:

    Dim s As String
    Dim stream As IStream

    s = ""
    s = s + ""
    s = s + ""
    s = s + "

    hello world

    "
    s = s + ""
    s = s + "
    WebBrowser1.Document.Write s


    方法2:

    Dim o

    Set o = WebBrowser1.Document.selection.createrange
    Debug.Print o
    If (Not o Is Nothing) Then
    o.pasteHTML "哈哈"
    Set o = Nothing
    End If


    方法3:

    '插入文本框
    Dim o

    Set o = WebBrowser1.Document.selection.createrange

    o.execCommand "InsertTextArea", False, "xxx"

    vb調用Webbrowser技巧集3
    1、頁面滾動:

    Private Sub Command2_Click()
    WebBrowser1.Document.parentwindow.scrollby 0, 30
    End Sub

    Private Sub Form_Load()
    WebBrowser1.Navigate "http://www.applevb.com"
    End Sub


    點擊Command2就可以使當前頁面向下滾動30像素


    2、判斷頁面是否可以前進后退

    Private Sub Command1_Click()
    WebBrowser1.GoForward
    End Sub

    Private Sub Command2_Click()
    WebBrowser1.GoBack
    End Sub

    Private Sub Form_Load()
    WebBrowser1.Navigate "http://www.applevb.com"
    End Sub

    Private Sub WebBrowser1_CommandStateChange(ByVal Command As Long, ByVal Enable As Boolean)
    If (Command = CSC_NAVIGATEBACK) Then
    Command2.Enabled = Enable
    End If
    If (Command = CSC_NAVIGATEFORWARD) Then
    Command1.Enabled = Enable
    End If
    End Sub

    VB調用webbrowser技巧集4

    1、如何使網頁不出現滾動條:

    Private Sub mnuScroll1_Click()
    @#注意:必須在網頁完全顯示之后才可以運行
    WebBrowser1.Document.body.Scroll = "no" @#不顯示滾動條的辦法
    End Sub
    Private Sub mnuScroll2_Click()
    @#注意:必須在網頁完全顯示之后才可以運行
    WebBrowser1.Document.body.Scroll = "Auto" @#顯示滾動條的辦法
    End Sub

    2、如何獲得網頁中被選中部分的HTML:

    Private Sub Command1_Click()
    Dim objSelection
    Dim objTxtRange

    Set objSelection = WebBrowser1.Document.selection
    If Not (objSelection Is Nothing) Then
    Set objTxtRange = objSelection.createRange
    If Not (objTxtRange Is Nothing) Then
    Debug.Print objTxtRange.htmlText

    Set objTxtRange = Nothing
    End If
    Set objSelection = Nothing
    End If
    End Sub

    Private Sub Form_Load()
    WebBrowser1.Navigate "http://www.applevb.com"
    End Sub

    Navigate 方 法 的 語 法 格 式 為:

    WebBrowser 控 件 名.Navigate URL
    [Flags,][TargetFrameName,][PostData,][Headers]

    ---- WebBrowser 控 件 支 持 的 主 要 方 法 有:

    GoBack — — — 回 退 到 上 一 屏。
    GoForward — — — 進 入 到 下 一 屏。
    GoHome — — — 回 家。 即 回 到 主 頁。
    Stop — — — 停 止 導 航。
    Refresh — — — 刷 新。
    Navigate — — — 導 航。

    ---- WebBrowser 控 件 所 響 應 的 事 件:

    ---- BeforeNavigate 事 件 — — — 在 開 始 導 航 前 發 生。 一 般 在 此 獲 取 完 整 的URL 字 符 串。

    ---- WebBrowser 控 件 最 主 要 的 參 數:

    ---- URL — — — 獲 得 導 航 用 的 標 準URL 字 符 串。 例 如: 它 能 將”www.MicroSoft.Com” 自 動 翻 譯 為”http://www.MicroSoft.Com”.URL 是Uniform Resource Locator 的 縮 寫, 是 在Internet 的WWW 服 務 程 序 上 用 于 指 定 信 息 位 置 的 表 示 方 法。

    使用WebBrowser的Navigator或者Navigator2方法打開一個asp文檔并且傳遞

    參數進去,但是asp文檔無法獲得參數,請教是什么原因?

    vb源碼:
    Private Sub cmdSubmit_Click()
    Dim strURL As String, strFormData As String
    Dim strData As String
    strURL = Trim$(txtURL.Text)
    strFormData = "name=" & Trim$(txtName.Text) &

    "&password=" & Trim$(txtPassword.Text)
    Call WBTest.Navigate2(strURL, 64, "_blank", strFormData,

    "hello")
    End Sub

    asp源碼:

    <%@ Language=VBScript %>
    <%
    dim strName
    dim strPassword
    strName=Trim(Request.Form("name"))
    strPassword=Trim(Request.Form("password"))
    Response.Write(strName)
    Response.Write(strPassword)
    if strName="KingZhang" and strPassword="123456" then
    Response.Write("登陸成功")
    else
    Response.Write("非法登陸用戶!")
    end if

    %>

    *********************************************************************

    Option Explicit

    Private Sub Command1_Click()
    Dim szValue As String
    WebBrowser1.Document.body.innerHTML = "


    method=post action=http://地址/xxx.php>
    "
    WebBrowser1.Document.Forms("post").submit
    End Sub

    Private Sub Form_Load()
    WebBrowser1.Navigate2 "about:blank"
    End Sub
    Top


    ********************************************************************

    請問:在WebBrwoser控件里提供的Navigate或者Navigate2方法中提供了傳遞數據

    的參數,調用方式為:WebBrowser1.Navigate2(URL,[Flags],

    [TargetFrameName],[PostData],[Headers])
    其中PostData參數就是一個提交參數字符串,例如"name=aaa&password=123",

    但問題是為什么這個方法并不是有效的,服務器端不能取得數據?
    如果這個方法是有效的話就不需要用一段html代碼模擬這種調用了。

    下面代碼能檢測出程序post出去的消息

    Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
    MsgBox PostData
    End Sub

    WebBrowser的8個方法和13個屬性

    WebBrowser的8個方法和13個屬性,以及它們的功能:

    方法 說明
     GoBack 相當于IE的“后退”按鈕,使你在當前歷史列表中后退一項

     GoForward 相當于IE的“前進”按鈕,使你在當前歷史列表中前進一項
     GoHome 相當于IE的“主頁”按鈕,連接用戶默認的主頁
     GoSearch 相當于IE的“搜索”按鈕,連接用戶默認的搜索頁面
     Navigate 連接到指定的URL
     Refresh 刷新當前頁面
     Refresh2 同上,只是可以指定刷新級別,所指定的刷新級別的值來自RefreshConstants枚舉表,
    該表定義在ExDisp.h中,可以指定的不同值如下:
    REFRESH_NORMAL 執行簡單的刷新,不將HTTP pragma: no-cache頭發送給服務器
    REFRESH_IFEXPIRED 只有在網頁過期后才進行簡單的刷新
    REFRESH_CONTINUE 僅作內部使用。在MSDN里寫著DO NOT USE! 請勿使用
    REFRESH_COMPLETELY 將包含pragma: no-cache頭的請求發送到服務器

     Stop 相當于IE的“停止”按鈕,停止當前頁面及其內容的載入
    屬性 說明
     Application 如果該對象有效,則返回掌管WebBrowser控件的應用程序實現的自動化對象(IDispatch)。如果在宿主對象中自動化對象無效,這個程序將返回WebBrowser
    控件的自動化對象
     Parent 返回WebBrowser控件的父自動化對象,通常是一個容器,例如是宿主或IE窗口
     Container 返回WebBrowser控件容器的自動化對象。通常該值與Parent屬性返回的值相同
     Document 為活動的文檔返回自動化對象。如果HTML當前正被顯示在WebBrowser中,則
    Document屬性提供對DHTML Object Model的訪問途徑
     TopLevelContainer 返回一個Boolean值,表明IE是否是WebBrowser控件頂層容器,是就返回true

     Type 返回已被WebBrowser控件加載的對象的類型。例如:如果加載.doc文件,就會返
    回Microsoft Word Document
     Left 返回或設置WebBrowser控件窗口的內部左邊與容器窗口左邊的距離
     Top 返回或設置WebBrowser控件窗口的內部左邊與容器窗口頂邊的距離
     Width 返回或設置WebBrowser窗口的寬度,以像素為單位
     Height 返回或設置WebBrowser窗口的高度,以像素為單位
     LocationName 返回一個字符串,該字符串包含著WebBrowser當前顯示的資源的名稱,如果資源
    是網頁就是網頁的標題;如果是文件或文件夾,就是文件或文件夾的名稱
     LocationURL 返回WebBrowser當前正在顯示的資源的URL
     Busy 返回一個Boolean值,說明WebBrowser當前是否正在加載URL,如果返回true
    就可以使用stop方法來撤銷正在執行的訪問操作

    如何利用 WebBrowser 控件,顯示 .GIF 動畫?

    要有一定的網頁知識(HTML、JavaScript、CSS)
    注意細節:
    沒有"滾動條"和"鼠標右鍵彈出的 IE 上下文菜單",".HTM 源文件" ...
    我寫了一個,效果還真不錯!

    'Objects: Form1、Command1、CommonDialog1、WebBrowser1
    Option Explicit
    Private Sub Command1_Click()
    CommonDialog1.ShowOpen
    If VBA.Len(VBA.Trim(CommonDialog1.FileName)) > 0 Then
    Dim p As stdole.StdPicture
    Dim sPath As String
    sPath = VBA.Trim(VBA.Trim(CommonDialog1.FileName))
    Set p = VB.LoadPicture(sPath)
    WebBrowser1.Width = p.Width * 16 / 26
    WebBrowser1.Height = p.Height * 16 / 26
    ' WebBrowser1.Navigate "about:blank"
    WebBrowser1.Document.open
    WebBrowser1.Document.writeln ""
    WebBrowser1.Document.writeln ""
    WebBrowser1.Document.writeln ""
    WebBrowser1.Document.writeln ""
    WebBrowser1.Document.writeln "WebBrowser1.Document.writeln "
    WebBrowser1.Document.writeln "WebBrowser1.Document.writeln "
    "
    WebBrowser1.Document.writeln ""
    WebBrowser1.Document.writeln ""
    End If
    End Sub
    Private Sub Form_Load()
    Command1.Caption = "&Open"
    WebBrowser1.Navigate "about:blank"
    WebBrowser1.Document.open
    WebBrowser1.Document.writeln ""
    WebBrowser1.Document.writeln ""
    WebBrowser1.Document.writeln ""
    WebBrowser1.Document.writeln ""
    WebBrowser1.Document.writeln "WebBrowser1.Document.writeln ""
    WebBrowser1.Document.writeln ""
    WebBrowser1.Document.Close
    End Sub

    WebBrowser控件說明
    方法 說明
     GoBack 相當于IE的“后退”按鈕,使你在當前歷史列表中后退一項

     GoForward 相當于IE的“前進”按鈕,使你在當前歷史列表中前進一項
     GoHome 相當于IE的“主頁”按鈕,連接用戶默認的主頁
     GoSearch 相當于IE的“搜索”按鈕,連接用戶默認的搜索頁面
     Navigate 連接到指定的URL
     Refresh 刷新當前頁面
     Refresh2 同上,只是可以指定刷新級別,所指定的刷新級別的值來自RefreshConstants枚舉表,
    該表定義在ExDisp.h中,可以指定的不同值如下:
    REFRESH_NORMAL 執行簡單的刷新,不將HTTP pragma: no-cache頭發送給服務器
    REFRESH_IFEXPIRED 只有在網頁過期后才進行簡單的刷新
    REFRESH_CONTINUE 僅作內部使用。在MSDN里寫著DO NOT USE! 請勿使用
    REFRESH_COMPLETELY 將包含pragma: no-cache頭的請求發送到服務器

     Stop 相當于IE的“停止”按鈕,停止當前頁面及其內容的載入

    屬性 說明
     Application 如果該對象有效,則返回掌管WebBrowser控件的應用程序實現的自動化對象(IDispatch)。如果在宿主對象中自動化對象無效,這個程序將返回WebBrowser
    控件的自動化對象
     Parent 返回WebBrowser控件的父自動化對象,通常是一個容器,例如是宿主或IE窗口
     Container 返回WebBrowser控件容器的自動化對象。通常該值與Parent屬性返回的值相同
     Document 為活動的文檔返回自動化對象。如果HTML當前正被顯示在WebBrowser中,則
    Document屬性提供對DHTML Object Model的訪問途徑
     TopLevelContainer 返回一個Boolean值,表明IE是否是WebBrowser控件頂層容器,是就返回true

     Type 返回已被WebBrowser控件加載的對象的類型。例如:如果加載.doc文件,就會返
    回Microsoft Word Document
     Left 返回或設置WebBrowser控件窗口的內部左邊與容器窗口左邊的距離
     Top 返回或設置WebBrowser控件窗口的內部左邊與容器窗口頂邊的距離
     Width 返回或設置WebBrowser窗口的寬度,以像素為單位
     Height 返回或設置WebBrowser窗口的高度,以像素為單位
     LocationName 返回一個字符串,該字符串包含著WebBrowser當前顯示的資源的名稱,如果資源
    是網頁就是網頁的標題;如果是文件或文件夾,就是文件或文件夾的名稱
     LocationURL 返回WebBrowser當前正在顯示的資源的URL
     Busy 返回一個Boolean值,說明WebBrowser當前是否正在加載URL,如果返回true
    就可以使用stop方法來撤銷正在執行的訪問操作


    WebBrowser 的事件
    Private Events Description
    BeforeNavigate2 導航發生前激發,刷新時不激發
    CommandStateChange 當命令的激活狀態改變時激發。它表明何時激活或關閉Back和Forward
    菜單項或按鈕
    DocumentComplete 當整個文檔完成是激發,刷新頁面不激發
    DownloadBegin 當某項下載操作已經開始后激發,刷新也可激發此事件
    DownloadComplete 當某項下載操作已經完成后激發,刷新也可激發此事件
    NavigateComplete2 導航完成后激發,刷新時不激發
    NewWindow2 在創建新窗口以前激發
    OnFullScreen 當FullScreen屬性改變時激發。該事件采用VARIENT_BOOL的一個輸
    入參數來指示IE是全屏顯示方式(VARIENT_TRUE)還是普通顯示方式(VARIENT_FALSE)
    OnMenuBar 改變MenuBar的屬性時激發,標示參數是VARIENT_BOOL類型的。
    VARIANT_TRUE是可見,VARIANT_ FALSE是隱藏
    OnQuit 無論是用戶關閉瀏覽器還是開發者調用Quit方法,當IE退出時就會激發
    OnStatusBar 與OnMenuBar調用方法相同,標示狀態欄是否可見。
    OnToolBar 調用方法同上,標示工具欄是否可見。
    OnVisible 控制窗口的可見或隱藏,也使用一個VARIENT_BOOL類型的參數
    StatusTextChange 如果要改變狀態欄中的文字,這個事件就會被激發,但它并不理會程序是否有狀態欄
    TitleChange Title有效或改變時激發
    WEBBROWSER 技巧(收藏)

    看到很多關于WebBrowser控件禁止右鍵的提問,回復的方法很多,其中有提到使用微軟提供的Webbrowser擴展COM服務器對象(WBCustomizer.dll),但是該方法在我們想使用Webbrowser編輯網頁(Webbrowser1.Document.execCommand editMode)的時候有很多弊端,比如不能顯示選中的文本等。另有些方法也就不用一一列舉了。

    這兒我想提到的是關于MSHTML.HTMLDocument

    引用Microsoft HTML OBject Library

    Rem #窗體代碼#

    Dim WithEvents M_Dom As MSHTML.HTMLDocument
    Private Function M_Dom_oncontextmenu() As Boolean
    M_Dom_oncontextmenu = False
    End Function

    Private Sub Webbrowser1_DownloadComplete()
    Set M_Dom = Webbrowser1.Document
    End Sub

    Rem 好了,右鍵菜單沒有了

    =======================================================================

    控件調用和獲得收藏夾里面

    基本上用 specialfolder(6 ) 就可以得到收藏夾的路徑, 然后你可以用dir去循環讀入每個目錄,然后dir里面的file, file的名字就是你要的收藏的名字, 路徑可以自己根據從上面得到的路徑去得到.
    如果你不用dir也可以用vb的dir控件.
    Private Type SHITEMID
    cb As Long
    abID As Byte
    End Type

    Public Type ITEMIDLIST
    mkid As SHITEMID
    End Type
    Public Function SpecialFolder(ByRef CSIDL As Long) As String
    locate the favorites folder
    Dim R As Long
    Dim sPath As String
    Dim IDL As ITEMIDLIST
    Const NOERROR = 0
    Const MAX_LENGTH = 260
    R = SHGetSpecialFolderLocation(MDIMain.hwnd, CSIDL, IDL)
    If R = NOERROR Then
    sPath = Space$(MAX_LENGTH)
    R = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal sPath)
    If R Then
    SpecialFolder = Left$(sPath, InStr(sPath, vbNullChar) - 1)
    End If
    End If
    End Function
    ================================================================

    是的,webbrowser本生是一個控件, 你要它全屏,就是要它所在的窗體全屏, 可以用setwindowlong取消窗體的 title, 用Call ShowWindow(FindWindow(Shell_traywnd, ), 0) 隱藏tray,就是下邊那個包含開始那一行. 用Call ShowWindow(FindWindow(Shell_traywnd, ), 9) 恢復. 夠詳細了吧.

    然后在form1.windowstate = 2 就可以了.

    ====================================================================
    選擇網頁上的內容。
    Private Sub Command1_Click()
    請先選中一些內容
    Me.WebBrowser1.ExecWB OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT
    MsgBox Clipboard.GetText
    End Sub

    =============================================================
    用IE來下載文件
    Private Declare Function DoFileDownload Lib shdocvw.dll (ByVal lpszFile As String) As Long


    Private Sub Command1_Click()

    Dim sDownload As String

    sDownload = StrConv(Text1.Text, vbUnicode)
    Call DoFileDownload(sDownload)

    End Sub

    保存webbrowser中的HTML內容
    Dim oPF As IPersistFile
    Set oPF = WebBrowser1.Document
    oPF.Save "TheFileNameHere.htm", False

    WebBrowser1.ExecWB怎么用

    下面是我測試的參數
    WB.ExecWB(4,1)

    4,1 保存網頁
    4,2 保存網頁(可以重新命名)
    6,1 直接打印
    6,2 直接打印
    7,1 打印預覽
    7,2 打印預覽
    8,1 選擇參數
    8,2 選擇參數
    10,1 查看頁面屬性
    10,2 查看頁面屬性
    17,1 全選
    17,2 全選
    22,1 重新載入當前頁
    22,2 重新載入當前頁

    webbrowser確定對話框的正確方法
    webbrowser確定窗口對話框

    某些網頁出于各種考慮會彈出對話框要求信息確認,往往會中斷我們的webbrowser過程,可以使用如下方法:
    1.加入Microsoft Html Object
    2.加入語句

    Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
    Dim obj As HTMLDocument
    Set obj = pDisp.Document
    obj.parentWindow.execScript "function showModalDialog(){return;}" '對showModalDialog引起的對話框進行確定
    End Sub
    而confirm引發的對話確定框可用confirm替換showModalDialog即可,Alert等同理~

    WebBrowser取得網頁源碼Private Sub Command1_Click()
    WebBrowser1.Navigate "http://www.sdqx.gov.cn/sdcity.php"
    End Sub

    Private Sub WebBrowser1_DownloadComplete()
    '頁面下載完畢
    Dim doc, objhtml
    Set doc = WebBrowser1.Document

    Set objhtml = doc.body.createtextrange()
    If Not IsNull(objhtml) Then
    Text1.Text = objhtml.htmltext
    End If

    End Sub

    我用WebBrowser取得網頁源碼,直接運行正常,但在編譯后出錯

    提示:實時錯誤“91” Object 變量或 with 塊變量沒有設置
    可能是沒有下載完所致,

    Private Sub WebBrowser1_DownloadComplete()
    if webbrowser.busy=false then
    Dim doc, objhtml
    Set doc = WebBrowser1.Document

    Set objhtml = doc.body.createtextrange()
    If Not IsNull(objhtml) Then
    Text1.Text = objhtml.htmltext
    End If
    end if
    End Sub

     

    posted @ 2009-09-21 13:41 肖馬輝 閱讀(678) | 評論 (0)編輯 收藏
     

    Windows XP + Apache 2.2.4 + PHP 5.2.3 + MySQL 5.0.27 + Zend Optimizer 3.3.0環境配置說明(推薦)
    2007年08月24日 星期五 下午 02:56

    以下為本說明所要用到的軟件及相關網站,zend網站下載需要注冊一個用戶。
    Apache 2.2.4 — www.apache.org
    PHP 5.2.3 — www.php.net
    MySQL 5.0.27 — www.mysql.com
    Zend Optimizer 3.3.0 — www.zend.com
    phpMyAdmin 2.9.2 — www.phpmyadmin.net

    ≡ Apache 2.2.4 的安裝 ≡

    打開我的電腦,進入D盤,在其下新建一個文件夾,名為 local 。
    到其官方站點下載 apache_2.2.4-win32-x86-no_ssl.msi 并執行。
    按3次Next按鈕,安裝程序要求輸入你的Network Domain(網絡域名)、Server Domain(服務器域名)和網站管理員的E-mail,有的話就如實填寫,本說明介紹的是本地自建測試環境,所以隨便一下,前兩個填 localhost ,郵件寫自己的即可。
    進入Next后,默認的安裝路徑是”C:\Program Files\Apache Software Foundation\Apache2.2\”,修改路徑,改為前面所述的”D:\local\Apache2″。
    然后一路下去,直到安裝結束;此時,打開D盤下的local文件夾,可以看到有一個名為Apache2的文件夾。
    打開IE,然后在地址欄輸入:”http://localhost” 或者 “http://127.0.0.1″ 可以看到Apache安裝完成的成功頁面;以后網頁的存在位置就在 “D:\webserver\Apache2\htdocs” 目錄。

    ≡ PHP 5.2.3 的安裝 ≡

    到其官方站點下載 php-5.2.3-Win32.zip 并解壓(在此不要下載及使用它的Installer,這種方式雖然很自動化、很智能,但也存在很多方面的限制,因為不推薦。)
    將PHP文件解壓到一個目錄下,目錄地址為 “D:\webserver\php5″。
    將PHP目錄(D:\webserver\php5)下的php.ini-dist復制到windows(有的系統是winnt目錄)目錄下,并改名為php.ini。
    復制D:\local\php目錄下的所有dll文件到windows的系統文件夾里,即:C:\windows\system32。

    ≡ MySQL 5.0.27 的安裝 ≡

    1.打開我的電腦,進入D:\webserver,在其下新建一個文件夾,名為 mysql5 。
    2.到其官方站點下載 Mysql 5.0.27 Installer 并執行。
    3.按Next,然后選擇Custom安裝方式。
    4.點擊Change,改變安裝路徑;原路徑是”C:\Program Files\MySQL\MySQL Server 5.0\”,這里改為:”D:\webserver\mysql5\”。
    5.等安裝進度條load完時,會出現一個Sign Up向導,這里不用理,選擇最下面的那個Skip Sign-Up,然后Next,上面有個 “Configure the MySQL Server now” 是打勾的,不要去掉,直接點Finish。
    6.現在開始安裝最后的配置,點Next,選擇Detailed Configuration,然后選擇第二個Server Machine。
    7.再Next,選擇Non-Transactional Database Only。
    8.再Next,選擇Manual Setting,連接數選擇200到300,在此因為是本機測試,所以此項并不重要。
    9.再Next,是設置其的端口,默認是3306,不要動它。
    10.再Next,選擇Manual Selected Default Character Set / Collation,在下面的 Character Set選擇gbk。
    11.再Next,在Include Bin Directory in Windows PATH前打勾。
    12.再Next,在Modify Security Settings前的勾取消,因為是本地環境,非服務器和虛擬主機。
    13.最后一個Next再加Execute,可以看到上面的步驟全部完成。
    14.MySQL的帳號是:root,密碼為空(安裝過程中有定義)。
    15.檢測MySQL,鍵盤的Win + R,彈出運行對話框,輸入cmd后回車,進入命令提示符,然后輸入:”net start mysql”(注意空格),如提示您要的服務已經啟動,表示全部安裝成功。

    ≡ Apache 與 PHP 的配置 ≡

    開始菜單的程序的Apache HTTP Server 2.2.4,再進入下一級的Configure Apache Server,這時可以看到那個Edit the Apache httpd.conf Configuration File。點一下。
    1.查找:
    #LoadModule ssl_module modules/mod_ssl.so
    在下面添加:
    LoadModule php5_module “d:/webserver/php5/php5apache2_2.dll”
    2.查找:
    DirectoryIndex index.html
    3.替換:
    DirectoryIndex index.html index.htm index.php default.php
    4.查找:
    AddType application/x-gzip .gz .tgz
    在下面添加:
    AddType application/x-httpd-php .php
    Apache配置結束,現在開始進行PHP配置,用Notepad打開C:\windows\php.ini。
    5.查找:
    extension_dir = “./”
    6.替換:
    extension_dir = “d:/webserver/php5/ext/”
    7.查找:
    upload_max_filesize = 2M
    這里的意思為修改上傳文件的最大限制,默認為2M,可以改為6M。
    8.查找:
    ;extension=php_mbstring.dll
    將前面的;號去掉。
    9.查找:
    ;extension=php_gd2.dll
    將前面的;號去掉。
    10.查找:
    ;extension=mysql.dll
    將前面的;號去掉。
    11.查找:
    ;date.timezone =
    替換:
    date.timezone = PRC
    文件修改完畢,此時,雙擊右下角任務欄的Apache圖標,彈出的窗口中,點Stop停止服務,等停止后再點Start啟動服務,此時,可以看到其窗口的狀態欄中會顯示:”Apache/2.2.4 (Win32) PHP/5.2.0″。配置全部完成。

    ≡ phpMyAdmin 2.9.2 的安裝 ≡

    到其官方站點下載 phpMyAdmin-2.9.2.zip 并解壓,并更改目錄名為phpmyadmin,然后移動到”d:\webserver\Apache2\htdocs”。
    編輯:libraries下的config.default.php。
    查找:
    $cfg[’Servers’][$i][’auth_type’] = ‘config’; // Authentication method (config, http or cookie based)?
    $cfg[’Servers’][$i][’user’] = ‘root’; // MySQL user
    $cfg[’Servers’][$i][’password’] = ”; // MySQL password (only needed
    // with ‘config’ auth_type)
    $cfg[’Servers’][$i][’nopassword’] = FALSE; // Whether to try to connect without password
    $cfg[’Servers’][$i][’only_db’] = ”; // If set to a db-name, only
    // this db is displayed in left frame
    // It may also be an array of db-names, where sorting order is relevant.
    這里由于是本地測試環境,所以所按默認值,不需要更改。
    查找:
    $cfg[’DefaultLang’] = ‘en-iso-8859-1′;
    替換:
    $cfg[’DefaultLang’] = ‘gb2312′;
    查找:
    $cfg[’DefaultCharset’] = ‘iso-8859-1′;
    替換:
    $cfg[’DefaultCharset’] = ‘gb2312′;
    設置完成。現在打開IE,鍵入:”http://localhost/phpmyadmin”,即可進行相關操作。
     

    posted @ 2009-08-18 21:57 肖馬輝 閱讀(386) | 評論 (0)編輯 收藏
     

    一般來說,您可以使用IIS來完成自定義的操作。IIS 擁有一套自己獨特的自定義錯誤,提供的反饋量較默認的 HTTP 1.1錯誤消息更大,而且更為"友好"。例如,默認的 HTTP 1.1 404 錯誤消息所包含的"找不到對象"語句已被擴展為:"Web 服務器找不到要求的文件/腳本。請檢查 URL 以確保路徑正確。如果問題仍然存在,請與服務器管理員聯系。"默認情況下,在 IIS 管理單元的"默認Web站點"中設置這些詳細的自定義錯誤消息。 

    自定義錯誤消息作為列表顯示在 IIS 的管理單元中。IIS 將此管理單元看作單個屬性。例如,在 Web 站點級配置一組自定義錯誤消息之后,該服務器下的所有目錄都將繼承整個自定義錯誤消息列表。也就是說,兩個自定義錯誤消息列表(對于服務器和目錄)并不合而為一。 

    -------------------------------------------------------------------------------- 

    自定義錯誤消息分類說明 

    錯誤代碼:400 

    400錯誤是由于不正確的請求造成的,說明正在搜索的網頁可能已經刪除、更名或暫時不可用。 

    錯誤代碼:401.1 

    401.1錯誤是由于登陸失敗造成的,說明沒有權限查看該目錄或網頁。 

    錯誤代碼:401.2 

    401.2錯誤是由于服務器配置問題而導致登陸失敗,由于服務器端腳本未能正確發送 WWW 身份驗證頭文件字段。如果要通過 Active Server Pages 腳本完成此項任務,可以使用"Response"對象的"AddHeader"方法來要求客戶端用特定身份驗證方法訪問資源。 

    錯誤代碼:401.3 

    401.3錯誤是由于資源上的 ACL 導致未被授權而無權訪問網頁或目錄。 

    錯誤代碼:401.4 

    401.4錯誤是由于篩選器導致授權失敗。如果Web 服務器安裝了篩選器程序以檢查連接到服務器的用戶。該篩選器程序能夠禁止通過連接到服務器的身份驗證來訪問資源。 

    錯誤代碼:401.5 

    401.5錯誤是由于 ISAPI/CGI 應用程序導致授權失敗。如果所要訪問的 Web 服務器地址上安裝了 ISAPI 或 CGI 程序用于在繼續執行之前檢驗用戶證書。該程序能夠禁止通過連接到服務器的身份驗證證書來訪問資源。 

    錯誤代碼:403.1 

    403.1錯誤是由于"執行"訪問被禁止而造成的,若試圖從目錄中執行 CGI、ISAPI 或其他可執行程序,但該目錄不允許執行程序時便會出現此種錯誤。 

    錯誤代碼:403.2 

    403.2錯誤是由于"讀取"訪問被禁止而造成的。導致此錯誤是由于沒有可用的默認網頁并且沒有對目錄啟用目錄瀏覽,或者要顯示的 HTML 網頁所駐留的目錄僅標記為"可執行"或"腳本"權限。 

    錯誤代碼:403.3 

    403.3錯誤是由于"寫入"訪問被禁止而造成的,當試圖將文件上載到目錄或在目錄中修改文件,但該目錄不允許"寫"訪問時就會出現此種錯誤。 

    錯誤代碼:403.4 

    403.4錯誤是由于要求SSL而造成的,您必須在要查看的網頁的地址中使用"https"。 

    錯誤代碼:403.5 

    403.5錯誤是由于要求使用 128 位加密算法的 Web 瀏覽器而造成的,如果您的瀏覽器不支持128位加密算法就會出現這個錯誤,您可以連接微軟網站進行瀏覽器升級。 

    錯誤代碼:403.6 

    403.6錯誤是由于IP 地址被拒絕而造成的。如果服務器中有不能訪問該站點的 IP 地址列表,并且您使用的 IP 地址在該列表中時您就會返回這條錯誤信息。 

    錯誤代碼:403.7 

    403.7錯誤是因為要求客戶證書,當需要訪問的資源要求瀏覽器擁有服務器能夠識別的安全套接字層 (SSL) 客戶證書時會返回此種錯誤。 

    錯誤代碼:403.8 

    403.8錯誤是由于禁止站點訪問而造成的,若服務器中有不能訪問該站點的 DNS 名稱列表,而您使用的 DNS 名稱在列表中時就會返回此種信息。請注意區別403.6與403.8錯誤。 

    錯誤代碼:403.9 

    403.9錯誤是由于連接的用戶過多而造成的,由于Web 服務器很忙,因通訊量過多而無法處理請求時便會返回這條錯誤。 

    錯誤代碼:403.10 

    403.10錯誤是由于無效配置而導致的錯誤,當您試圖從目錄中執行 CGI、ISAPI 或其他可執行程序,但該目錄不允許執行程序時便會返回這條錯誤。 
     
     
     
     作者:翼獄之風    2007-2-11 08:06   回復此發言   
     
    --------------------------------------------------------------------------------
     
    2 IIS自定義錯誤詳解 
     
    錯誤代碼:403.11 

    403.11錯誤是由于密碼更改而導致無權查看頁面。 

    錯誤代碼:403.12 

    403.12錯誤是由于映射器拒絕訪問而造成的。若要查看的網頁要求使用有效的客戶證書,而您的客戶證書映射沒有權限訪問該 Web 站點時就會返回映射器拒絕訪問的錯誤。 

    錯誤代碼:403.13 

    403.13錯誤是由于需要查看的網頁要求使用有效的客戶證書而使用的客戶證書已經被吊銷,或者無法確定證書是否已吊銷造成的。 

    錯誤代碼:403.15 

    403.15錯誤是由于客戶訪問許可過多而造成的,當服務器超出其客戶訪問許可限制時會返回此條錯誤。 

    錯誤代碼:403.16 

    403.16錯誤是由于客戶證書不可信或者無效而造成的。 

    錯誤代碼:403.17 

    403.17錯誤是由于客戶證書已經到期或者尚未生效而造成的。 

    錯誤代碼:404.1 

    404.1錯誤表明所訪問 Web 站點的 IP 地址不接受對端口(請求的來源端口)的請求。一般來說,404.1 錯誤只會出現在具有多個 IP 地址的計算機上。如果在特定 IP 地址/端口組合上收到客戶請求,而且在特定的端口上 IP 地址并沒有設置為偵聽,則 IIS 將返回 404.1 HTTP 錯誤。例如,如果一臺計算機有兩個 IP 地址,而只將其中一個 IP 地址配置為在端口 80 上偵聽,則其它 IP 地址從端口 80 收到的任何請求都將導致 IIS 返回 404.1 錯誤。只應在服務級設置這一錯誤,因為只有當服務器上使用多個 IP 地址時它才返回給客戶。 

    錯誤代碼:404b 

    404b錯誤是由于無法找到文件而造成的,通常是由于正在搜索的網頁可能已經刪除、更名或暫時不可用。 

    錯誤代碼:405 

    405錯誤是由于資源被禁止而導致的網頁地址不正確,因此要尋找的網頁無法顯示。 

    錯誤代碼:406 

    406錯誤是由于瀏覽器無法打開正在尋找的資源而導致的錯誤。 

    錯誤代碼:407 

    407錯誤是由于代理服務器必須先驗證身份,然后才處理請求。 

    錯誤代碼:410 

    410錯誤要尋找的網頁已被永久刪除而導致的,這意味著資源永遠無法使用。 

    錯誤代碼:412 

    412錯誤是由于要查看的網頁設置有先決條件,因此該請求無法完成。一般是網頁中有一個或多個請求標題字段中具有先決條件,這些字段經服務器測試后被認為是"FALSE"。客戶端為當前資源的 meta 信息(頭文件字段數據)設置了先決條件,以便防止請求的方法被用于指定資源外的其他資源。 

    錯誤代碼:414 

    414錯誤是由于請求的 URI 太長,服務器拒絕處理請求而造成的。一般的可能性有: 

    1)客戶端錯誤地將 POST 請求轉換為帶有長查詢信息的 GET 請求。 

    2)或者是客戶端遇到重定向問題(例如,重定向 URL 的前綴指向自身的后綴)。 

    3)服務器遭到客戶端的攻擊,該客戶端試圖利用那些使用定長緩沖來讀取或控制請求 URI 的服務器上的安全漏洞。 

    錯誤代碼:500 

    500錯誤是由于內部服務器錯誤造成的。 

    錯誤代碼:500.11 

    500.11錯誤是由于服務器關閉而造成的資源無法訪問,Web 站點關閉期間無法處理請求。 

    錯誤代碼:500.12 

    500.12錯誤是由于應用程序重新啟動而造成的資源暫時無法訪問,Web站點重新啟動期間無法處理請求。 

    錯誤代碼:500.13 

    500.13錯誤是由于服務器太忙而造成的,此時無法處理請求。通訊量超出 Web 站點的能力。 

    錯誤代碼:500.14 

    500.14錯誤是由于應用程序無效而造成的,部分 Web 站點不可用。Web 站點應用程序配置存在問題,無法處理請求。 

    錯誤代碼:500.15 

    500.15錯誤是由于請求了不不允許請求的 global.asa而造成的,你可以編輯"地址"欄中的網址,刪除 global.asa,然后按 Enter。來解決這個問題。 

    錯誤代碼:502 

    502錯誤是由于網關錯誤而造成的,當作為網關或代理的服務器與上層內容服務器聯絡時,收到無效的響應時就會出現502錯誤。 

    錯誤代碼:500-100.asp 

    500-100.asp錯誤是指ASP錯誤,默認情況下,"默認 Web 站點"及其所有應用程序都將 ASP 錯誤進程傳送到 500-100.asp 文件;但是,用戶創建的任何新 Web 站點或其應用程序都將 500.100 錯誤進程傳送到默認的(不是自定義的)錯誤文件。如果要為 .asp 文件開發附加的錯誤進程,可以將 500-100 錯誤映射到 .asp 文件,或者創建自己的錯誤進程 .asp 文件。 

    500-100.asp 文件處理 .asp 文件編譯和運行期間發生的任何錯誤。當發生 ASP 錯誤時,IIS 返回 500-100.asp 文件并附帶詳細的錯誤信息,如發生錯誤的行號和對錯誤的描述。 

    如果文件 500-100.asp 本身包含 ASP 錯誤,ASP 就不會返回另一個 500-100.asp 文件;這樣,報告錯誤時就好象根本沒有與 500-100 錯誤對應的自定義錯誤文件似的。 

    如果錯誤處理文件(默認是 500-100.asp)包含運行時錯誤,則只顯示此錯誤,而不考慮請求的 .asp 文件中的錯誤類型。如果錯誤處理文件有預處理和編輯錯誤,則在瀏覽器中顯示這兩種錯誤(即,顯示 500-100.asp 文件中的錯誤和請求的 .asp 文件中的錯誤)
     

    posted @ 2009-06-14 19:28 肖馬輝 閱讀(666) | 評論 (0)編輯 收藏
     
    之前也有一些介紹大型網站架構演變的文章,例如LiveJournal的、ebay的,都是非常值得參考的,不過感覺他們講的更多的是每次演變的結果,而沒有很詳細的講為什么需要做這樣的演變,再加上近來感覺有不少同學都很難明白為什么一個網站需要那么復雜的技術,于是有了寫這篇文章的想法,在這篇文章中將闡述一個普通的網站發展成大型網站過程中的一種較為典型的架構演變歷程和所需掌握的知識體系,希望能給想從事互聯網行業的同學一點初步的概念,:),文中的不對之處也請各位多給點建議,讓本文真正起到拋磚引玉的效果。
    <!--[if !supportLineBreakNewLine]-->
    <!--[endif]-->
    架構演變第一步:物理分離webserver和數據庫
    最開始,由于某些想法,于是在互聯網上搭建了一個網站,這個時候甚至有可能主機都是租借的,但由于這篇文章我們只關注架構的演變歷程,因此就假設這個時候已經是托管了一臺主機,并且有一定的帶寬了,這個時候由于網站具備了一定的特色,吸引了部分人訪問,逐漸你發現系統的壓力越來越高,響應速度越來越慢,而這個時候比較明顯的是數據庫和應用互相影響,應用出問題了,數據庫也很容易出現問題,而數據庫出問題的時候,應用也容易出問題,于是進入了第一步演變階段:將應用和數據庫從物理上分離,變成了兩臺機器,這個時候技術上沒有什么新的要求,但你發現確實起到效果了,系統又恢復到以前的響應速度了,并且支撐住了更高的流量,并且不會因為數據庫和應用形成互相的影響。
    看看這一步完成后系統的圖示:
    <!--[if !vml]-->
    <!--[endif]-->
    這一步涉及到了這些知識體系:
    這一步架構演變對技術上的知識體系基本沒有要求。
    <!--[if !supportLineBreakNewLine]-->
    <!--[endif]-->
    架構演變第二步:增加頁面緩存
    好景不長,隨著訪問的人越來越多,你發現響應速度又開始變慢了,查找原因,發現是訪問數據庫的操作太多,導致數據連接競爭激烈,所以響應變慢,但數據庫連接又不能開太多,否則數據庫機器壓力會很高,因此考慮采用緩存機制來減少數據庫連接資源的競爭和對數據庫讀的壓力,這個時候首先也許會選擇采用squid等類似的機制來將系統中相對靜態的頁面(例如一兩天才會有更新的頁面)進行緩存(當然,也可以采用將頁面靜態化的方案),這樣程序上可以不做修改,就能夠很好的減少對webserver的壓力以及減少數據庫連接資源的競爭,OK,于是開始采用squid來做相對靜態的頁面的緩存。
    看看這一步完成后系統的圖示:
    <!--[if !vml]-->
    <!--[endif]-->
    這一步涉及到了這些知識體系:
    前端頁面緩存技術,例如squid,如想用好的話還得深入掌握下squid的實現方式以及緩存的失效算法等。

    架構演變第三步:增加頁面片段緩存
    增加了squid做緩存后,整體系統的速度確實是提升了,webserver的壓力也開始下降了,但隨著訪問量的增加,發現系統又開始變的有些慢了,在嘗到了squid之類的動態緩存帶來的好處后,開始想能不能讓現在那些動態頁面里相對靜態的部分也緩存起來呢,因此考慮采用類似ESI之類的頁面片段緩存策略,OK,于是開始采用ESI來做動態頁面中相對靜態的片段部分的緩存。
    看看這一步完成后系統的圖示:
    <!--[if !vml]-->
    <!--[endif]-->
    這一步涉及到了這些知識體系:
    頁面片段緩存技術,例如ESI等,想用好的話同樣需要掌握ESI的實現方式等;

    架構演變第四步:數據緩存
    在采用ESI之類的技術再次提高了系統的緩存效果后,系統的壓力確實進一步降低了,但同樣,隨著訪問量的增加,系統還是開始變慢,經過查找,可能會發現系統中存在一些重復獲取數據信息的地方,像獲取用戶信息等,這個時候開始考慮是不是可以將這些數據信息也緩存起來呢,于是將這些數據緩存到本地內存,改變完畢后,完全符合預期,系統的響應速度又恢復了,數據庫的壓力也再度降低了不少。
    看看這一步完成后系統的圖示:
    <!--[if !vml]-->
    <!--[endif]-->
    這一步涉及到了這些知識體系:
    緩存技術,包括像Map數據結構、緩存算法、所選用的框架本身的實現機制等。

    架構演變第五步:增加webserver
    好景不長,發現隨著系統訪問量的再度增加,webserver機器的壓力在高峰期會上升到比較高,這個時候開始考慮增加一臺webserver,這也是為了同時解決可用性的問題,避免單臺的webserver down機的話就沒法使用了,在做了這些考慮后,決定增加一臺webserver,增加一臺webserver時,會碰到一些問題,典型的有:
    1、如何讓訪問分配到這兩臺機器上,這個時候通常會考慮的方案是Apache自帶的負載均衡方案,或LVS這類的軟件負載均衡方案;
    2、如何保持狀態信息的同步,例如用戶session等,這個時候會考慮的方案有寫入數據庫、寫入存儲、cookie或同步session信息等機制等;
    3、如何保持數據緩存信息的同步,例如之前緩存的用戶數據等,這個時候通常會考慮的機制有緩存同步或分布式緩存;
    4、如何讓上傳文件這些類似的功能繼續正常,這個時候通常會考慮的機制是使用共享文件系統或存儲等;
    在解決了這些問題后,終于是把webserver增加為了兩臺,系統終于是又恢復到了以往的速度。看看這一步完成后系統的圖示:
    <!--[if !vml]-->
    <!--[endif]-->
    這一步涉及到了這些知識體系:
    負載均衡技術(包括但不限于硬件負載均衡、軟件負載均衡、負載算法、linux轉發協議、所選用的技術的實現細節等)、主備技術(包括但不限于ARP欺騙、linux heart-beat等)、狀態信息或緩存同步技術(包括但不限于Cookie技術、UDP協議、狀態信息廣播、所選用的緩存同步技術的實現細節等)、共享文件技術(包括但不限于NFS等)、存儲技術(包括但不限于存儲設備等)。

    架構演變第六步:分庫
    享受了一段時間的系統訪問量高速增長的幸福后,發現系統又開始變慢了,這次又是什么狀況呢,經過查找,發現數據庫寫入、更新的這些操作的部分數據庫連接的資源競爭非常激烈,導致了系統變慢,這下怎么辦呢,此時可選的方案有數據庫集群和分庫策略,集群方面像有些數據庫支持的并不是很好,因此分庫會成為比較普遍的策略,分庫也就意味著要對原有程序進行修改,一通修改實現分庫后,不錯,目標達到了,系統恢復甚至速度比以前還快了。
    看看這一步完成后系統的圖示:
    <!--[if !vml]-->
    <!--[endif]-->
    這一步涉及到了這些知識體系:
    這一步更多的是需要從業務上做合理的劃分,以實現分庫,具體技術細節上沒有其他的要求;
    但同時隨著數據量的增大和分庫的進行,在數據庫的設計、調優以及維護上需要做的更好,因此對這些方面的技術還是提出了很高的要求的。

    架構演變第七步:分表、DAL和分布式緩存
    隨著系統的不斷運行,數據量開始大幅度增長,這個時候發現分庫后查詢仍然會有些慢,于是按照分庫的思想開始做分表的工作,當然,這不可避免的會需要對程序進行一些修改,也許在這個時候就會發現應用自己要關心分庫分表的規則等,還是有些復雜的,于是萌生能否增加一個通用的框架來實現分庫分表的數據訪問,這個在ebay的架構中對應的就是DAL,這個演變的過程相對而言需要花費較長的時間,當然,也有可能這個通用的框架會等到分表做完后才開始做,同時,在這個階段可能會發現之前的緩存同步方案出現問題,因為數據量太大,導致現在不太可能將緩存存在本地,然后同步的方式,需要采用分布式緩存方案了,于是,又是一通考察和折磨,終于是將大量的數據緩存轉移到分布式緩存上了。看看這一步完成后系統的圖示:
    <!--[if !vml]-->
    <!--[endif]-->
    這一步涉及到了這些知識體系:
    分表更多的同樣是業務上的劃分,技術上涉及到的會有動態hash算法、consistent hash算法等;
    DAL涉及到比較多的復雜技術,例如數據庫連接的管理(超時、異常)、數據庫操作的控制(超時、異常)、分庫分表規則的封裝等;

    架構演變第八步:增加更多的webserver
    在做完分庫分表這些工作后,數據庫上的壓力已經降到比較低了,又開始過著每天看著訪問量暴增的幸福生活了,突然有一天,發現系統的訪問又開始有變慢的趨勢了,這個時候首先查看數據庫,壓力一切正常,之后查看webserver,發現apache阻塞了很多的請求,而應用服務器對每個請求也是比較快的,看來是請求數太高導致需要排隊等待,響應速度變慢,這還好辦,一般來說,這個時候也會有些錢了,于是添加一些webserver服務器,在這個添加webserver服務器的過程,有可能會出現幾種挑戰:
    1、Apache的軟負載或LVS軟負載等無法承擔巨大的web訪問量(請求連接數、網絡流量等)的調度了,這個時候如果經費允許的話,會采取的方案是購買硬件負載,例如F5、Netsclar、Athelon之類的,如經費不允許的話,會采取的方案是將應用從邏輯上做一定的分類,然后分散到不同的軟負載集群中;
    2、原有的一些狀態信息同步、文件共享等方案可能會出現瓶頸,需要進行改進,也許這個時候會根據情況編寫符合網站業務需求的分布式文件系統等;
    在做完這些工作后,開始進入一個看似完美的無限伸縮的時代,當網站流量增加時,應對的解決方案就是不斷的添加webserver。看看這一步完成后系統的圖示:
    <!--[if !vml]-->
    <!--[endif]-->
    這一步涉及到了這些知識體系:
    到了這一步,隨著機器數的不斷增長、數據量的不斷增長和對系統可用性的要求越來越高,這個時候要求對所采用的技術都要有更為深入的理解,并需要根據網站的需求來做更加定制性質的產品。

    架構演變第九步:數據讀寫分離和廉價存儲方案
    突然有一天,發現這個完美的時代也要結束了,數據庫的噩夢又一次出現在眼前了,由于添加的webserver太多了,導致數據庫連接的資源還是不夠用,而這個時候又已經分庫分表了,開始分析數據庫的壓力狀況,可能會發現數據庫的讀寫比很高,這個時候通常會想到數據讀寫分離的方案,當然,這個方案要實現并不容易,另外,可能會發現一些數據存儲在數據庫上有些浪費,或者說過于占用數據庫資源,因此在這個階段可能會形成的架構演變是實現數據讀寫分離,同時編寫一些更為廉價的存儲方案,例如BigTable這種。
    看看這一步完成后系統的圖示:
    <!--[if !vml]-->
    <!--[endif]-->
    這一步涉及到了這些知識體系:
    數據讀寫分離要求對數據庫的復制、standby等策略有深入的掌握和理解,同時會要求具備自行實現的技術;
    廉價存儲方案要求對OS的文件存儲有深入的掌握和理解,同時要求對采用的語言在文件這塊的實現有深入的掌握。

    架構演變第十步:進入大型分布式應用時代和廉價服務器群夢想時代
    經過上面這個漫長而痛苦的過程,終于是再度迎來了完美的時代,不斷的增加webserver就可以支撐越來越高的訪問量了,對于大型網站而言,人氣的重要毋庸置疑,隨著人氣的越來越高,各種各樣的功能需求也開始爆發性的增長,這個時候突然發現,原來部署在webserver上的那個web應用已經非常龐大了,當多個團隊都開始對其進行改動時,可真是相當的不方便,復用性也相當糟糕,基本是每個團隊都做了或多或少重復的事情,而且部署和維護也是相當的麻煩,因為龐大的應用包在N臺機器上復制、啟動都需要耗費不少的時間,出問題的時候也不是很好查,另外一個更糟糕的狀況是很有可能會出現某個應用上的bug就導致了全站都不可用,還有其他的像調優不好操作(因為機器上部署的應用什么都要做,根本就無法進行針對性的調優)等因素,根據這樣的分析,開始痛下決心,將系統根據職責進行拆分,于是一個大型的分布式應用就誕生了,通常,這個步驟需要耗費相當長的時間,因為會碰到很多的挑戰:
    1、拆成分布式后需要提供一個高性能、穩定的通信框架,并且需要支持多種不同的通信和遠程調用方式;
    2、將一個龐大的應用拆分需要耗費很長的時間,需要進行業務的整理和系統依賴關系的控制等;
    3、如何運維(依賴管理、運行狀況管理、錯誤追蹤、調優、監控和報警等)好這個龐大的分布式應用。
    經過這一步,差不多系統的架構進入相對穩定的階段,同時也能開始采用大量的廉價機器來支撐著巨大的訪問量和數據量,結合這套架構以及這么多次演變過程吸取的經驗來采用其他各種各樣的方法來支撐著越來越高的訪問量。看看這一步完成后系統的圖示:
    <!--[if !vml]-->
    <!--[endif]-->
    這一步涉及到了這些知識體系:
    這一步涉及的知識體系非常的多,要求對通信、遠程調用、消息機制等有深入的理解和掌握,要求的都是從理論、硬件級、操作系統級以及所采用的語言的實現都有清楚的理解。
    運維這塊涉及的知識體系也非常的多,多數情況下需要掌握分布式并行計算、報表、監控技術以及規則策略等等。
    說起來確實不怎么費力,整個網站架構的經典演變過程都和上面比較的類似,當然,每步采取的方案,演變的步驟有可能有不同,另外,由于網站的業務不同,會有不同的專業技術的需求,這篇blog更多的是從架構的角度來講解演變的過程,當然,其中還有很多的技術也未在此提及,像數據庫集群、數據挖掘、搜索等,但在真實的演變過程中還會借助像提升硬件配置、網絡環境、改造操作系統、CDN鏡像等來支撐更大的流量,因此在真實的發展過程中還會有很多的不同,另外一個大型網站要做到的遠遠不僅僅上面這些,還有像安全、運維、運營、服務、存儲等,要做好一個大型的網站真的很不容易,寫這篇文章更多的是希望能夠引出更多大型網站架構演變的介紹,:)。
    posted @ 2009-05-04 16:29 肖馬輝 閱讀(207) | 評論 (0)編輯 收藏
     

    WEB網站大數據量的性能解決方案 2009-02-17 00:04
    分類:默認分類
    字號: 大 中 小
    隨著中國大型IT企業信息化速度的加快,大部分應用的數據量和訪問量都急劇增加
    ,大型企業網站正面臨性能和高數據訪問量的壓力,而且對存儲、安全以及信息檢索等
    等方面都提出了更高的要求……
    本文中,我想通過幾個國外大型IT企業及網站的成功案例,從Web技術人員角度探討
    如何積極地應對國內大型網站即將面臨的擴展(主要是技術方面,而較少涉及管理及營
    銷等方面)矛盾。
    一、 國外大型IT網站的成功之道
    (一) MySpace
    今天,MySpace已經成為全球眾口皆碑的社區網站之王。盡管一流和營銷和管理經驗
    自然是每個IT企業取得成功的首要因素,但是本節中我們卻拋棄這一點,而主要著眼于
    探討在數次面臨系統擴張的緊急關頭MySpace是如何從技術方面采取應對策略的。
    第一代架構—添置更多的Web服務器
    MySpace最初的系統很小,只有兩臺Web服務器(分擔處理用戶請求的工作量)和一
    個數據庫服務器(所有數據都存儲在這一個地方)。那時使用的是Dell雙CPU、4G內存的
    系統。在早期階段,MySpace基本是通過添置更多Web服務器來對付用戶暴增問題的。但
    到在2004年早期,在MySpace用戶數增長到五十萬后,其數據庫服務器已經開始疲于奔命
    了。
    第二代架構—增加數據庫服務器
    與增加Web服務器不同,增加數據庫并沒那么簡單。如果一個站點由多個數據庫支持
    ,設計者必須考慮的是,如何在保證數據一致性的前提下讓多個數據庫分擔壓力。
    MySpace運行在三個SQL Server數據庫服務器上—一個為主,所有的新數據都向它提
    交,然后由它復制到其它兩個;另兩個數據庫服務器全力向用戶供給數據,用以在博客
    和個人資料欄顯示。這種方式在一段時間內效果很好——只要增加數據庫服務器,加大
    硬盤,就可以應對用戶數和訪問量的增加。
    這一次的數據庫架構按照垂直分割模式設計,不同的數據庫服務于站點的不同功能
    ,如登錄、用戶資料和博客。垂直分割策略利于多個數據庫分擔訪問壓力,當用戶要求
    增加新功能時,MySpace只需要投入新的數據庫加以支持。在賬戶到達二百萬后,MySpa
    ce還從存儲設備與數據庫服務器直接交互的方式切換到SAN(存儲區域網絡)—用高帶寬
    、專門設計的網絡將大量磁盤存儲設備連接在一起,而數據庫連接到SAN。這項措施極大
    提升了系統性能、正常運行時間和可靠性。然而,當用戶繼續增加到三百萬后,垂直分
    割策略也變得難以維持下去。
    第三代架構—轉到分布式計算架構
    幾經折騰,最終,MySpace將目光移到分布式計算架構——它在物理上分布的眾多服
    務器,整體必須邏輯上等同于單臺機器。拿數據庫來說,就不能再像過去那樣將應用拆
    分,再以不同數據庫分別支持,而必須將整個站點看作一個應用。現在,數據庫模型里
    只有一個用戶表,支持博客、個人資料和其他核心功能的數據都存儲在相同數據庫。
    既然所有的核心數據邏輯上都組織到一個數據庫,那么MySpace必須找到新的辦法以
    分擔負荷——顯然,運行在普通硬件上的單個數據庫服務器是無能為力的。這次,不再
    按站點功能和應用分割數據庫,MySpace開始將它的用戶按每百萬一組分割,然后將各組
    的全部數據分別存入獨立的SQL Server實例。目前,MySpace的每臺數據庫服務器實際運
    行兩個SQL Server實例,也就是說每臺服務器服務大約二百萬用戶。據MySpace的技術人
    員說,以后還可以按照這種模式以更小粒度劃分架構,從而優化負荷分擔。
    第四代架構—求助于微軟方案
    2005年早期,賬戶達到九百萬,MySpace開始用微軟的C#編寫ASP.NET程序。在收到
    一定成效后,MySpace開始大規模遷移到ASP.NET。
    賬戶達到一千萬時,MySpace再次遭遇存儲瓶頸問題。SAN的引入解決了早期一些性
    能問題,但站點目前的要求已經開始周期性超越SAN的I/O容量——即它從磁盤存儲系統
    讀寫數據的極限速度。
    第五代架構—增加數據緩存層并轉到支持64位處理器的SQL Server 2005
    2005年春天,MySpace賬戶達到一千七百萬,MySpace又啟用了新的策略以減輕存儲
    系統壓力,即增加數據緩存層——位于Web服務器和數據庫服務器之間,其唯一職能是在
    內存中建立被頻繁請求數據對象的副本,如此一來,不訪問數據庫也可以向Web應用供給
    數據。
    2005年中期,服務賬戶數達到兩千六百萬時,MySpace因為我們對內存的渴求而切換
    到了還處于beta測試的支持64位處理器的SQL Server 2005。升級到SQL Server 2005和
    64位Windows Server 2003后,MySpace每臺服務器配備了32G內存,后于2006年再次將配
    置標準提升到64G。
    事實上,MySpace的Web服務器和數據庫仍然經常發生超負荷,其用戶頻繁遭遇“意
    外錯誤”和“站點離線維護”等告示,他們不得不在論壇抱怨不停……
    MySpace正是在這樣不斷重構站點軟件、數據庫和存儲系統中,才一步步走到今天。
    事實上,MySpace已經成功解決了很多系統擴展性問題,其中存在相當的經驗值得我們借
    鑒。MySpace系統架構到目前為止保持了相對穩定,但其技術人員仍然在為SQL Server支
    持的同時連接數等方面繼續攻堅,盡可能把事情做到最好。
    (二) Amazon
    亞馬遜書店無疑是電子商務發展的里程碑。2000年到現在,世界網絡業腥風血雨。
    Amazon曾經成為網絡泡沫的頭號代表。如今,當這個“最大的泡沫”用幾經易改的數字
    把自己變成了堅實的IT巨人。
    歷覽Amazon發展過程,其成功經驗在于,它創造性地進行了電子商務中每一環節的探索
    ,包括系統平臺的建設,程序編寫、網站設立、配送系統等等方面。用Amazon當家人貝
    索斯的話說就是,“在現實世界的商店最有力的武器就是地段,地段,地段,而對于我
    們來說最重要的三件事就是技術,技術,技術。”
    (三) eBay
    eBay是世界聞名的拍賣網站,eBay公司通信部主管凱文?帕斯格拉夫認為,“eBay成
    功的最重要原因在于公司管理和服務。”
    其成功的奧秘可以列舉為以下幾點:
    ①敢為天下先—在網絡尚不普及的時代,eBay率先進入網絡拍賣領域;
    ②依托虛擬商場所產生的特有的“零庫存”是eBay公司取得成功的另一個重要原因。該
    公司的核心業務沒有任何庫存風險,所有的商品都是由客戶提供,它只需要負責提供虛
    擬的拍賣平臺—網絡和軟件。所以,eBay公司的財務報表上不會出現“庫存費用”和“
    保管費用”等。
    ③自eBay公司成立開始,它就一直遵循兩條“黃金原則”:建設虛擬社區,給網民以家
    的感覺;保證網站穩定安全地運行。
    二、 國內大型網站開發時的幾點建議
    從本節開始,我們將結合國內外大型IT網站在技術擴展方面的沉痛教訓和成功經驗
    ,探討在如今剛剛開始的Web 2.0時代如何應對國內網站即將面臨的數據訪問量增加(甚
    至是急劇膨脹)的問題,并提出一些供參考的策略和建議。
    (四) 搭建科學的系統架構
    構建大型的商業網站絕對不可能像構建普通的小型網站一樣一蹴而就,需要從嚴格
    的軟件工程管理的角度進行認真規劃,有步驟有邏輯地進行開發。對于大型網站來說,
    所采用的技術涉及面極其廣泛,從硬件到軟件、編程語言、數據庫、Web服務器、防火墻
    等各個領域都有了很高的要求,已經不是原來簡單的html靜態網站所能比擬的。以著名
    的Yahoo!為例,他們的每一個大型網站工程都需要大量相應專業人員的參與。
    (五) 頁面靜態化
    可不要小看純靜態化的HTML頁面!其實在很多情況下,HTML往往意味著“效率最高
    、消耗最小”,所以我們盡可能使我們的網站上的頁面采用靜態頁面來實現。但是,對
    于大量內容并且頻繁更新的網站,我們無法全部手動實現,因此可以開發相應的自動化
    更新工具,例如我們常見的信息發布系統CMS。像我們經常訪問的各個門戶站點的新聞頻
    道,甚至他們的其他頻道,都是通過信息發布系統來管理和實現的。信息發布系統可以
    實現最簡單的信息錄入自動生成靜態頁面,還能具備頻道管理、權限管理、自動抓取等
    功能,對于一個大型網站來說,擁有一套高效、可管理的CMS是必不可少的。
    (六) 存儲問題
    存儲也是一個大問題,一種是小文件的存儲,比如圖片這類;另一種是大文件的存
    儲,比如搜索引擎的索引。
    大家知道,對于Web服務器來說,不管是Apache、IIS還是其他容器,圖片是最消耗資源
    的,于是我們有必要將圖片與頁面進行分離,這是基本上大型網站都會采用的策略,他
    們都有獨立的圖片服務器,甚至很多臺圖片服務器。這樣的架構可以降低提供頁面訪問
    請求的服務器系統壓力,并且可以保證系統不會因為圖片問題而崩潰,在應用服務器和
    圖片服務器上,可以進行不同的配置優化以保證更高的系統消耗和執行效率。
    (七) 數據庫技術—集群和庫表散列
    對于大型網站而言,使用大型的數據庫服務器是必須的事情。但是,在面對大量訪
    問的時候,數據庫的瓶頸仍然會顯現出來,這時一臺數據庫將很快無法滿足應用,于是
    我們需要借助于數據庫集群或者庫表散列技術。
    在數據庫集群方面,很多數據庫廠商都有自己的解決方案,Oracle、Sybase、SQL
    Server等都有很好的方案,常用的MySQL提供的Master/Slave也是類似的方案。因此,你
    使用了什么樣的數據庫,就參考相應的解決方案來實施即可。
    上面提到的數據庫集群由于在架構、成本、擴張性方面都會受到所采用數據庫類型
    的限制,于是我們需要從應用程序的角度來考慮改善系統架構,其中,庫表散列是常用
    并且最有效的解決方案。我們在應用程序中安裝業務和應用或者功能模塊將數據庫進行
    分離,不同的模塊對應不同的數據庫或者表,再按照一定的策略對某個頁面或者功能進
    行更小的數據庫散列,比如用戶表,按照用戶ID進行表散列,這樣就能夠低成本的提升
    系統的性能并且有很好的擴展性。在這一方面一個現成的例子就是搜狐。它的論壇就是
    采用了這樣的架構,將論壇的用戶、設置、帖子等信息進行數據庫分離,然后對帖子、
    用戶按照板塊和ID進行散列數據庫和表,最終可以在配置文件中進行簡單的配置便能讓
    系統隨時增加一臺低成本的數據庫進來補充系統性能。
    (八) 緩存策略
    這絕對不單指低級的緩存技術相關的編程,應從整個架構角度著眼,深入研究Web服
    務器、數據庫服務器的各層級的緩沖策略,最后才是低級的緩沖技術的編程。不同的We
    b服務器、數據庫服務器及Web編程語言都有自己不同的緩沖策略。例如數據庫存儲方面
    ,SQL Serve 2005中的主動式緩存機制,Oracle數據的cache group技術,Hibernate的
    緩存包括Session的緩存和SessionFactory的緩存;Web服務器方面,Apache提供了自己
    的緩存模塊,也可以使用外加的Squid模塊進行緩存,這兩種方式均可以有效的提高Apa
    che的訪問響應能力,IIS緩沖器技術;至于web開發語言,所用緩存技術更存在很大不同
    ,例如ASP.NET 2.0中提出了兩種緩存應用程序數據和緩存服務頁輸出的策略,這兩種緩
    存技術相互獨立但不相互排斥,PHP有Pear的Cache模塊,等等。
    (九) 鏡像
    鏡像是大型網站常采用的提高性能和數據安全性的方式,鏡像的技術可以解決不同
    網絡接入商和地域帶來的用戶訪問速度差異。在鏡像的細節技術方面,這里不闡述太深
    ,有很多專業的現成的解決架構和產品可選。也有廉價的通過軟件實現的思路,比如Li
    nux上的rsync等工具。
    (十) 負載均衡
    負載均衡將是大型網站解決高負荷訪問和大量并發請求采用的終極解決辦法。
    負載均衡技術發展了多年,有很多專業的服務提供商和產品可以選擇,基于LAMP解決方
    案的Lighttped+Squid是相當不錯的解決負載均衡和加速系統的有效方式。
    (十一) 硬件四層交換
    第四層交換使用第三層和第四層信息包的報頭信息,根據應用區間識別業務流,將
    整個區間段的業務流分配到合適的應用服務器進行處理。第四層交換功能就象是虛IP,
    指向物理服務器。它傳輸的業務服從的協議多種多樣,有HTTP、FTP、NFS、Telnet或其
    他協議。這些業務在物理服務器基礎上,需要復雜的載量平衡算法。在IP世界,業務類
    型由終端TCP或UDP端口地址來決定,在第四層交換中的應用區間則由源端和終端IP地址
    、TCP和UDP端口共同決定。
    在硬件四層交換產品領域,有一些知名的產品可以選擇,比如Alteon、F5等,這些
    產品很昂貴,但是物有所值,能夠提供非常優秀的性能和很靈活的管理能力。Yahoo中國
    當初接近2000臺服務器使用了三四臺Alteon就搞定了。
    (十二) 軟件四層交換
    大家知道了硬件四層交換機的原理后,基于OSI模型來實現的軟件四層交換也就應運
    而生,這樣的解決方案實現的原理一致,不過性能稍差。但是滿足一定量的壓力還是游
    刃有余的。
    一個典型的使用負載均衡的策略就是,在軟件或者硬件四層交換的基礎上搭建squid集群
    ,這種思路在很多大型網站包括搜索引擎上被采用,這樣的架構低成本、高性能還有很
    強的擴張性,隨時往架構里面增減節點都非常容易。
    (十三) 軟件投資問題
    據報導,目前國內除了一些上市企業和特別大知名大公司以外,很少有企業在成本
    中考慮正版軟件的購置費用。這種思維極有可能給中國互聯網帶來噩夢。如果一些公司
    真正面臨軟件資金方面的困難,完全可以考慮使用開源世界的LAMP解決方案(Linux+A
    pache+MySQL+Perl、PHP或者Python Web編程語言);否則,隨著我國加入WTO范圍的
    不斷擴大,盜版打擊必然越來越嚴。因此,“茍且偷生”必將自食其果。
    另外,隨著網絡帶寬日漸提升,WEB 2.0技術必將影響到網絡世界的幾乎每一個角落
    。因此,如何積聚技術人員進行技術攻關并進一步加強安全防范也成為一個日益嚴峻的
    問題,宜盡早納入到公司的議事日程。

    posted @ 2009-03-28 23:00 肖馬輝 閱讀(845) | 評論 (0)編輯 收藏
     
        

    先下載所需要安裝的東東~~

    PHP 5.2.0 官方下載地址:http://www.php.net/downloads.php
    mysql-5.0.27 官方下載地址:http://dev.mysql.com/downloads/mysql/5.0.html
    phpMyAdmin for Windows V2.9.1 官方下載地址:http://www.phpmyadmin.net/home_page/index.php
    你也可以上天空站下載:http://www.skycn.com/soft/10687.html

    第一步:配置PHP

      如果你下載的是安裝版的php,安裝的時候可以選擇使用IIS,安裝完畢就會自動配置好IIS。如果你下載的是zip版的,則按照以下步驟配置:

    1、把PHP-5.2.0 zip(目前最新版本)解壓放到 D:\php (你可以選擇目錄,本例以此說明)。

    2、將php.ini-dist復制到 C:\Windows 目錄下并改名為php.ini,復制 php5ts.dll和 libmysql.dll到 C:\Windows\system32 中。

    3、用記事本打開php.ini,查找“extension_dir”,然后把 extension_dir = "./"修改為 extension_dir = "D:\php\ext"  注意:路徑在Win下一定要使用\

    4、在記事本中查找“;extension=php_mysql.dll”和“;extension=php_gd2.dll”,然后把前面的“;”去掉,即把 ;extension=php_mysql.dll 改為 extension=php_mysql.dll
    把以下內容前面的;去掉
    ;extension=php_mbstring.dll
    ;extension=php_gd2.dll
    ;extension=php_dbase.dll
    ;extension=php_ldap.dll

    5、找到 ;session.save_path = "/tmp" 將';'去掉.設置你保存session的目錄。
    如:session.save_path = "C:\Windows\Temp";

    6、找到 register_globals 將 Off 改為 On

    7、找到 allow_url_include 將 Off 改為 On

    8、保存 php.ini

    9、接下來在IIS中進行設置,打開Web服務擴展,添加PHP擴展,擴展名為PHP,要求的文件為d:\php\php5isapi.dll,打開默認網站-〉屬性對話框,切換到“主目錄”選項卡,然后點“配置”按鈕打開“應用程序配置對話框”,點“添加”按鈕打開“添加/編輯應用程序擴展名映射”對話框。在“可執行文件”輸入框中,指向d:\php\php5isapi.dll,在“擴展名”輸入框里面輸入“.php”,并選中“腳本引擎”和“檢查文件是否存在”兩個復選框,一路確定,選擇文檔,添加默認內容為 index.php ,確定并重啟IIS后退出IIS。

    此時PHP環境基本已經配置成功
    在WEB根目錄(如我的D:\website)里建一個名為test.php的文件內容如下
    <? echo phpinfo(); ?>
    用瀏覽器打開 http://localhost/test.php
    如果可以看到php配置輸出信息就OK了


    第二步:安裝MySql

    1、先安裝mysql,雙擊執行 Setup.exe,點Next選擇Custom(自定義)安裝,然后點Next(下一步),默認安裝目錄為 C:\Program Files\MySQL\MySQL Server 5.0\ 為了方便進入我們可以安裝在D盤根目錄下,點Change(改變目錄)按鈕來更改安裝目錄為D:\mysql。完成后出現創建 MySQL.com 帳號的界面,簡單一點,我們選擇Skip Sign-Up跳過這一步,既安裝完成。這里有個配置向導的選項Configure the MySQL Server now默認的是選起的,我們就順便完成配置吧。

      這里的配置是很簡單的,我們只要點Next(下一步)即可,有幾個地方要說明:Install As Windows Service默認的是選中的,這一選項要選上,作用是將MySQL作為Windows的服務運行。Service Name(服務名)默認的“MySQL”,可以改你喜歡的服務名。下面的Launch the MySQL Server automatically要勾選,這樣Windows啟動時,MySQL就會自動啟動服務。Include Bin Directory in Windows PATH這一選項是修改環境變量,在PATH的值中增加../bin目錄,可以根據怎么的愛好來決定是否選上,如果選上,在CMD下不需要進入bin目錄就可以運行mysql。在Manual Selected Default Character Set / Collation 下 Character Set: 選擇 gbk 或 gb2312,接著點下一步,Modify Security Settings是設置根帳號的密碼,設置后點下一步,excute完成安裝。

      如果是zip文件,用解壓縮軟件將壓縮包直接解壓到指定目錄,如 D:\mysql;

    2、安裝完成后,打開“開始”按鈕中的“運行”,輸入命令:D:\mysql\bin\mysqld-nt.exe --install,并執行;

    3、打開“開始”按鈕下的“程序”=》“管理工具”=》“服務”,找到“mysql”服務,啟動它;

    4、至此,mysql安裝完成,重啟win2003 server。您還可以打開D:\mysql\bin\MySQLInstanceConfig.exe,再次配置MySQL,在Manual Selected Default Character Set / Collation 下 Character Set: 選擇 gbk 或 gb2312(我選擇的是 gbk ),后面還會要求輸入 root 登錄密碼(如:123456)。

      至此,mysql安裝完成。


    第三步:PHPMyAdmin 的安裝配置

    1、將phpMyAdmin-2.9.1.zip解壓到WEB根目錄(d:\website\中去),重命名文件夾為myadmin或其它
    打開myadmin 目錄中的 config.sample.inc.php
    找到以下這些(以下我已改好):

    $cfg['blowfish_secret'] = 'cookie'; //在等號后的單引號內加入 cookie

    $cfg['Servers'][$i]['controluser'] = 'root'; //將 pmausr 改為 root

    $cfg['Servers'][$i]['controlpass'] = '123456'; //分別填上你mysql的用戶和密碼即可

    改好了保存并將config.sample.inc.php改為config.inc.php,在瀏覽器打開http://localhost/myadmin 輸入你的用戶名和密碼,便可以管理mysql了。

      如果以上都正常的話,開始建網站吧 ^-^

    藍色數碼寫于2006-11-15 14:09        以前寫的,轉來此處。

    補充:

    mysql連接錯誤(10061)該怎么辦?
    Error: Can't connect to MySQL server on 'localhost' (10061)

    請檢查你的mysql服務是否啟動!

    MySQL的1067錯誤
    錯誤信息為:
    A system error has occurred.
    System error 1067 has occurred.
    The process terminated unexpectedly.

    在我的機上的解決辦法是:
    修改%windir%\my.ini,增加
    [mysqld]
    #設置basedir指向mysql的安裝路徑
    basedir=D:\mysql
    datadir=D:\data

    或者刪除%windir%\my.ini

    在c:\下添加一個 c:\my.cnf文件
    文件內容
    [mysqld]
    #設置basedir指向mysql的安裝路徑
    basedir=D:\mysql
    datadir=D:\mysql\data

    posted @ 2009-02-16 23:10 肖馬輝 閱讀(991) | 評論 (0)編輯 收藏
    僅列出標題
    共7頁: 上一頁 1 2 3 4 5 6 7 下一頁 
     
    主站蜘蛛池模板: 亚洲精品国产V片在线观看| 久久久无码精品亚洲日韩软件| 99re这里有免费视频精品| 99免费观看视频| 亚洲av无码专区国产乱码在线观看| 一区二区免费国产在线观看| 亚洲国产精品成人| 亚洲国产成人精品青青草原| 深夜福利在线免费观看| 免费人妻无码不卡中文字幕18禁| 久久综合日韩亚洲精品色| 免费在线黄色电影| 日本免费无遮挡吸乳视频电影| 亚洲欧洲专线一区| 一级毛片免费不卡在线| 亚洲成人国产精品| 成人精品视频99在线观看免费| 亚洲国产a∨无码中文777 | 猫咪www免费人成网站| 精品亚洲一区二区三区在线观看| 国产日韩AV免费无码一区二区| 亚洲精品高清视频| 菠萝菠萝蜜在线免费视频| 亚洲午夜精品久久久久久浪潮| 日本免费一区二区久久人人澡 | 国产成人精品免费视频大全麻豆 | 青青免费在线视频| 精品国产_亚洲人成在线高清| 97在线视频免费| 久久亚洲中文字幕无码| xx视频在线永久免费观看| 亚洲欧洲专线一区| 亚洲国产精品无码专区影院| 国产人在线成免费视频| 亚洲国产精品自在线一区二区| 在线观看免费人成视频| 亚洲精品在线视频观看| 日本高清免费aaaaa大片视频| a毛片全部播放免费视频完整18| 亚洲国产精品成人久久久| 亚洲免费在线观看|