Vanilla Forums

          簡(jiǎn)介Vanilla Forums是一套PHP+MySQL開源論壇。它的特點(diǎn)在于各種配置,功能,操作界面風(fēng)格(Themes)都很簡(jiǎn)潔,素雅。另外Vanilla默認(rèn)會(huì)在首頁中直接列出所有貼子,按照時(shí)間順序,把最新的討論貼放在最前面和概念中的論壇相比更加像博客。Vanilla所有的功能和模塊都是通過應(yīng)用(Applications)和插件(Plugins)來實(shí)現(xiàn),是一款靈活的輕量級(jí)論壇程序。

          這兩天都是在搗鼓這個(gè)東西,再加上家里有人來裝修什么的,原本的計(jì)劃都被打亂了。最初看到Vanilla Forums(注目:不是吃的草莓……)是在煎蛋最初的論壇上面,當(dāng)然那時(shí)還不知道這就是Vanilla Forums,正式知道叫做Vanilla Forums還是在09年的時(shí)候,當(dāng)時(shí)在家無聊,于是就想搭個(gè)論壇玩玩什么的(當(dāng)然后來并沒有實(shí)行),當(dāng)時(shí)國內(nèi)的主流論壇程序大概有下面這些吧:PHPwind 、Discuz、Dvbbs 、BBSMAX、BBSXP等,但一直以來都覺得這些論壇程序大多都是臃腫惡心的,尤其是當(dāng)時(shí)SNS大行其道,有些論壇自然也連SNS也功能也整合進(jìn)去了實(shí)在是無法忍受,現(xiàn)在回看,這些論壇帶SNS的模式?jīng)]有多少個(gè)是成功的。而我心中的論壇,外觀上最起碼應(yīng)該是百度貼吧或者天涯或者水木清華或者小百合那樣的,方便簡(jiǎn)單、明了直觀。

          于是就看看國外的開源程序,主流的有phpBB、MyBB、UseBB等,但這些離我心目中輕量級(jí)還有一段距離,于是就想到了早期在煎蛋看到過的討論區(qū),那時(shí)候再去煎蛋,煎蛋已經(jīng)棄用了Vanilla。不是很甘心,于是上php-open上面查看一下有什么收獲沒有,果然發(fā)現(xiàn)了Vanilla Forums的蹤跡,當(dāng)時(shí)Vanilla Forums的版本是1.1.9,界面如下,搭建后放了上一個(gè)空間商,發(fā)了一些帖子。但后來因?yàn)槿チ斯ぷ鞣敝氐陌⒗锿松习嘁簿筒涣肆酥恕?/p>

          Vanilla Forums

          兩天前在網(wǎng)上看到有人在提及這個(gè)東東,于是就點(diǎn)上官網(wǎng)上看看。哈一上去就是驚喜Vanilla Forums已經(jīng)升級(jí)為2.0.16版本了,界面依然簡(jiǎn)介,雖說界面上比1.1.9版豪華了那么一點(diǎn),但依然沒有違背簡(jiǎn)約這個(gè)原則。最后還是將其下載下來擺弄了一兩天,哈哈,最后分享一下這兩天的中文配置經(jīng)驗(yàn)和心得吧,不算完整也不完善,純分享而已。Vanilla Forums下載地址:http://vanillaforums.org/download

          安裝環(huán)境,php4.1+和MySQL,這個(gè)不多說了。

          新安裝的Vanilla Forums會(huì)自動(dòng)開啟兩個(gè)應(yīng)用,VanillaConversations,其中Vanilla是核心應(yīng)用,禁用之后論壇不能被訪問,看到有說官方有提供1.0版本和2.0版本Vanilla應(yīng)用,不過找過1.0版本的;Conversations是用戶之間發(fā)私信的應(yīng)用,禁用后不影響論壇使用,但用戶之間則不能互發(fā)私信,而且Conversations可以提供多個(gè)用戶之間相互聊天的功能,有點(diǎn)像多人聊天室。

          中文語言包,國外的東西默認(rèn)語言當(dāng)然不會(huì)是中文了,但國內(nèi)也有熱心人士提供了中文語言包,下載地址是:點(diǎn)擊這里。具體啟用方法是:

          解壓文件后,將zh_CN文件夾移動(dòng)的網(wǎng)站locales里邊;
          然后修改config/config.php文件中$Configuration['Garden']['Locale']選項(xiàng);
          改成$Configuration['Garden']['Locale'] = ‘zh-CN’;,如沒有看到改選項(xiàng)的話就自己添加;
          然后進(jìn)入管理后臺(tái)啟用中文語言,注意是先修改后啟用。

          評(píng)價(jià),該語言包翻譯了前臺(tái)絕大部分語言,我發(fā)現(xiàn)有一兩個(gè)是遺漏的,當(dāng)然如果添加了一些插件,則可能會(huì)不能全部翻譯,這是可以自己通過修改語言包來達(dá)到目的。后臺(tái)作者并沒有翻譯完整,不過對(duì)于老手老說英文后臺(tái)不是太礙事,實(shí)在不行的話Google翻譯一下大概能知道真正的意思。

          時(shí)區(qū),程序是通過讀取php.ini這個(gè)配置文件來確定時(shí)區(qū)的,所以用戶可以通過修改php.ini來修改成東8時(shí)區(qū),如果不能修改php.ini的話,可以通過修改bootstrap.php來改成東8時(shí)區(qū)

          找到bootstrap.php文件;
          找到// Make sure a default time zone is set
          if (ini_get(‘date.timezone’) == ”)
          date_default_timezone_set(‘America/Montreal’);

          改成// Make sure a default time zone is set
          //if (ini_get(‘date.timezone’) == ”)
          // date_default_timezone_set(‘America/Montreal’);
          date_default_timezone_set(‘Asia/Hong_Kong’);

          其實(shí)就是屏蔽了原有判斷語句改為直接使用香港時(shí)區(qū)。

          中文用戶名,論壇使用郵箱注冊(cè),可以自定義用戶名,但默認(rèn)只能是英文的,可以通過以下方法來實(shí)現(xiàn)定義中文用戶名

          找到functions.validation.php文件
          找到ValidateUsername函數(shù),將函數(shù)中的正則表達(dá)式改成‘/^([\d\w_\x80-\xff]{3,20})?$/si’

          使用中文名之后會(huì)出現(xiàn)一些小問題,比如產(chǎn)看中文名用戶資料頁面會(huì)出現(xiàn)錯(cuò)誤,原本@加上用戶名之后可以通知被@的用戶還有點(diǎn)擊可以跳轉(zhuǎn)到用戶資料頁面,但對(duì)中文名用戶失效,原有#加上英文單詞可以跳轉(zhuǎn)到搜索頁面,類似話題模式,但論壇本身本沒有識(shí)別中文分詞什么的,所以#之后加上中文內(nèi)容不能點(diǎn)擊進(jìn)行搜索,下面提供解決方案

          /profile/用戶名 可以訪問到用戶資料

          找到applications/dashboard/models/class.usermodel.php文件
          $User = $this->SQL->Where(‘u.Name’, $Username)->Get()->FirstRow();
          改成 $User = $this->SQL->Where(‘u.Name’, urldecode($Username))->Get()->FirstRow();

          @用中文名用戶 和點(diǎn)擊鏈接

          找到functions.general.php文件
          找到GetMentions函數(shù)
          將正則式‘/(?:^|[\s,\.])@(\w{3,20})\b/i’,
          改成‘/(?:^|[\s,\.])@([\S]{1,20})(?=[\s,\.!?]|$)/i’,
          找到library/core/class.format.php 文件
          找到Mentions 函數(shù)
          將正則式‘/(^|[\s,\.])@(\w{1,20})\b/i’, //{3,20}
          改成‘/(^|[\s,\.])@([\S]{1,20})(?=[\s,\.!?]|$)/i’,

          #中文話題 搜索

          找到library/core/class.format.php 文件
          找到Mentions 函數(shù)
          將正則式‘/(^|[\s,\.])\#([\w\-]+)(?=[\s,\.!?]|$)/i’,
          改成‘/(^|[\s,\.])\#([\S]{1,30}?)#/i’,
          將緊接著的正則式‘\1′.Anchor(‘#\2′, ‘/search?Search=%23\2&Mode=like’).’\3′,
          改成’\1′.Anchor(‘#\2#’, ‘/search?Search=%23\2%23&Mode=like’).’\3′,

          通過上面的修改,可以將中文話題以#話題#的形式點(diǎn)擊跳轉(zhuǎn),類似各大微博,但對(duì)于中文搜索依然不可用。

          插件推薦
          程序初期提供了16個(gè)插件,但并非感覺上并不是每個(gè)都用到,下面就寫一寫我這兩天測(cè)試推薦使用插件。
          AdSense,顧名思義,就是Google AdSense的插件,將廣告添加在主題帖之后。
          EasyReply,通過這個(gè)插件,帖子會(huì)提供一個(gè)鏈接,點(diǎn)擊之后會(huì)在回復(fù)框自動(dòng)添加@用戶名 來提醒用戶有人回帖了。
          Emotify :) ,表情插件,再回復(fù)框左上角添加了既可愛又操蛋的表情按鈕。
          IE6 Update,雖然官方說Vanilla Forums是兼容IE 6的,但經(jīng)過測(cè)試由JQuery實(shí)現(xiàn)的彈窗在IE 6下其實(shí)是不兼容的,所以用這個(gè)插件來提醒一下吧,貌似國外IE 6基本已經(jīng)絕跡了,但國內(nèi)用的還是很多。
          Magic,通過這個(gè)插件,jpg、jpeg、gif、png這四種格式的圖片只要在文本框直接添加圖片路徑就會(huì)自動(dòng)轉(zhuǎn)換成圖片了,要注意的是,這個(gè)插件的功能對(duì)主題帖是不起作用的,只對(duì)回帖起作用,你可以通過在$Sender->EventArguments['Comment']->Body = $this->MakeView($Sender->EventArguments['Comment']->Body);之后添加$Sender->EventArguments['Discussion']->Body = $this->MakeView($Sender->EventArguments['Discussion']->Body);這段語句,則插件對(duì)主題貼也起作用了。
          Post Count,有了這個(gè)插件,可以統(tǒng)計(jì)出用戶的發(fā)帖數(shù)。
          Quotes,提供引用功能的插件,不過有一個(gè)不足,就是如果原帖有1000字,則如果引用的話會(huì)1000字全部引用,可以通過修改JS文件來實(shí)現(xiàn)只引用100字之類的,這個(gè)暫時(shí)沒改。
          HtmLawed,用了屏蔽有害Html代碼插件。
          Embed vanilla,通過這個(gè)插件,Vanilla Forums允許使用js將整論壇嵌入到一個(gè)頁面中,在選用一個(gè)合適的主題效果不錯(cuò),如圖所示。

          wordpress-Vanilla-1

          wordpress-Vanilla-2

          備用插件:
          Facebook,用Facebook賬號(hào)登陸論壇的插件。
          Twitter,用Twitter賬號(hào)登陸的插件。
          GoogleSignIn,用Google賬號(hào)登陸的插件。
          天朝里邊以上3個(gè)插件的作用不大。
          FileUpload,允許用戶上傳附件的插件。
          Cleditor,基于JQuery驅(qū)動(dòng)的一款可視化編輯器,個(gè)人對(duì)可視化編輯器比較無愛。
          Following,用戶互粉插件。
          WhosOnline,用戶在線顯示插件。
          Gravatar,這個(gè)插件可以使用戶調(diào)用Gravatar頭像,不過Vanilla Forums本身允許用戶上傳自定義頭像,所以作用不大。

          嗯先寫這么一些吧,畢竟插件還沒全部用過,而且部分英文看不懂,Goggle翻譯出來的也不是太靠譜。
          Vanilla Forums除了提供帖子討論功能之外,還用動(dòng)態(tài)分享和收藏帖子功能,動(dòng)態(tài)分享功能有點(diǎn)像QQ空間和騰訊朋友的動(dòng)態(tài)分享功能,就是簡(jiǎn)約一點(diǎn)吧。

          posted @ 2011-03-23 19:43 小馬歌 閱讀(3285) | 評(píng)論 (0)編輯 收藏
           

          文章作者說“跑到微軟那一查,給的答復(fù)讓我吐血:Do not enable HTTP compression for the script files 請(qǐng)不要對(duì)腳本文件開啟http壓縮 只好在服務(wù)器端增加對(duì)瀏覽器的識(shí)別代碼,如果是ie6,就不壓縮腳本文件了 雖然腳本能運(yùn)行了,可是用戶體驗(yàn)就...  哎,我恨ie 6”

          唉,說啥好呢?

          真相是,微軟的答復(fù)(http://support.microsoft.com/kb/327286/en-us?sid=64&spid=2073) 里面提供了兩個(gè)解決方案,其中第一個(gè)描述的稍微啰嗦了一點(diǎn),被這個(gè)作者直接忽略掉了。第二個(gè)解決方案只有一句話,顯然更容易被讀懂:

          To work around this problem, you can do either of the following:

          If you use a Cache-Control: no-cache HTTP header to prevent the files from caching, remove that header. In some situations, if you substitute an Expires HTTP header, you do not trigger the problem.

          -or-

          Do not enable HTTP compression for the script files.


          Emu雖然英文比較爛,四級(jí)老考不過,為了方便大家還是翻譯一下吧,不然又該有人讀不下去了。

            要規(guī)避此問題,你可以在下面兩個(gè)方案中選一種:

              1.如果你使用了Cache-Control: no-cache 這個(gè) HTTP 頭來防止文件被緩存,移除這個(gè)頭就好了。有些情況下,如果你用一個(gè)Expires頭來代替(前面這個(gè)出問題的http頭),(也可以起到相同作用而)不會(huì)觸發(fā)這個(gè)問題。

              或者

              2.不要壓縮腳本文件。

          個(gè)人建議還是考慮第一方案。

          本文作為前面一篇翻譯文章《壓縮,讓網(wǎng)絡(luò)更快》的補(bǔ)充。
          posted @ 2011-03-15 22:21 小馬歌 閱讀(215) | 評(píng)論 (0)編輯 收藏
           

          php有許多系統(tǒng)預(yù)定義變量,通過判斷他們可以簡(jiǎn)單的判斷系統(tǒng)是 windows還是*unix, 其中相關(guān)的函數(shù)或者預(yù)定義變量如下:


          php_uname();
          PHP_OS
          DIRECTORY_SEPARATOR
          PHP_SHLIB_SUFFIX
          PATH_SEPARATOR
           
          具體程序:

           

          Php代碼 
          <?  
          if(PATH_SEPARATOR==':') echo 'Linux';  
          else echo 'Windows';  
          ?> 

          <?
          if(PATH_SEPARATOR==':') echo 'Linux';
          else echo 'Windows';
          ?> 
          或者

           

          Php代碼 
          <?php  
          echo php_uname();  
          echo "<br>";  
           
          echo PHP_OS;  
          echo "<br>";  
           
          /* Some possible outputs: 
          Linux localhost 2.4.21-0.13mdk #1 Fri Mar 14 15:08:06 EST 2003 i686 
          Linux 
           
          FreeBSD localhost 3.2-RELEASE #15: Mon Dec 17 08:46:02 GMT 2001 
          FreeBSD 
           
          Windows NT XN1 5.1 build 2600 
          WINNT 
          */ 
           
          if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {  
              echo 'This is a server using Windows!';  
          } else {  
              echo 'This is a server not using Windows!';  
          }  
           
          ?>

          posted @ 2011-03-15 22:04 小馬歌 閱讀(314) | 評(píng)論 (0)編輯 收藏
           
          當(dāng)項(xiàng)目繁多的時(shí)候,需要規(guī)范,并且定義到細(xì)節(jié),只有這樣,才能支持大規(guī)模的開發(fā)。
          PM非常重要,PM的能力將直接導(dǎo)致項(xiàng)目最后的質(zhì)量。
          本文是根據(jù)公司當(dāng)前的現(xiàn)狀而描述的,并不一定普遍適用--合適的,就是最好的。
          項(xiàng)目經(jīng)理職責(zé):
          1、 基本職責(zé)就是確保項(xiàng)目目標(biāo)的實(shí)現(xiàn),領(lǐng)導(dǎo)項(xiàng)目團(tuán)隊(duì)準(zhǔn)時(shí)、優(yōu)質(zhì)地完成全部工作。
          2、 與客戶溝通,了解項(xiàng)目的整體需求。并與客戶保持一定的聯(lián)系,即時(shí)反饋階段性的成果,和即時(shí)更改客戶提出的合理需求。
          3、 制定項(xiàng)目開發(fā)計(jì)劃文檔,量化任務(wù),并合理分配給相應(yīng)的人員。
          4、 跟蹤項(xiàng)目的進(jìn)度,協(xié)調(diào)項(xiàng)目組成員之間的合作。
          5、 監(jiān)督產(chǎn)生項(xiàng)目進(jìn)展各階段的文檔,并與QA即時(shí)溝通,保證文檔的完整和規(guī)范。
          6、 開發(fā)過程中的需求變更,項(xiàng)目經(jīng)理需要跟客戶了解需求,在無法判斷新的需求對(duì)項(xiàng)目的整理影響程度的情況下,需同項(xiàng)目組成員商量,最后決定是否接收客戶的需求,然后再跟客戶協(xié)商。確定要變更需求的情況下,需產(chǎn)生需求變更文檔,更改開發(fā)計(jì)劃,通知QA。
          7、 項(xiàng)目提交測(cè)試后,項(xiàng)目經(jīng)理需了解測(cè)試結(jié)果,根據(jù)測(cè)試的bug的嚴(yán)重程度來重新更改開發(fā)計(jì)劃。
          8、 向上匯報(bào)。向上級(jí)匯報(bào)項(xiàng)目的進(jìn)展情況,需求變更等所有項(xiàng)目信息。
          9、 項(xiàng)目完成的時(shí)候需要項(xiàng)目總結(jié),產(chǎn)生項(xiàng)目總結(jié)文檔。
          項(xiàng)目經(jīng)理權(quán)利:
          1、 開發(fā)指揮權(quán)。項(xiàng)目開發(fā)人員的分配和調(diào)整。
          2、 技術(shù)決策權(quán)。主要是審查和批準(zhǔn)重大技術(shù)措施和技術(shù)方案,以防決策失誤,造成重大損失。
          3、 申請(qǐng)協(xié)作權(quán)。項(xiàng)目發(fā)展出現(xiàn)不能解決的問題的時(shí)候,可以向上級(jí)申請(qǐng)協(xié)作。
          4、 考核成員權(quán)。考核項(xiàng)目組成員,視覺和測(cè)試組只考核組長(zhǎng)。
          必備流程:
          1.            每天下午5:00――6:00,項(xiàng)目經(jīng)理召集該項(xiàng)目的相關(guān)人員(包括開發(fā)人員、美工等)作項(xiàng)目每日總結(jié),內(nèi)容包括:
          (1)    了解每個(gè)成員的工作進(jìn)度情況。
          (2)    了解成員在工作中遇到的困難,并尋找資源解決。
          (3)    成員之間的配合是否協(xié)調(diào)一致(比如,需要提交的物件沒有按時(shí)提交或遺忘等)。
          (4)    如有需要,根據(jù)當(dāng)前的進(jìn)展情況調(diào)整項(xiàng)目計(jì)劃。
          (5)    安排每個(gè)成員第二天的工作。
          (6)    如果考慮到項(xiàng)目當(dāng)前的進(jìn)展?fàn)顟B(tài)可能會(huì)導(dǎo)致項(xiàng)目延期,則項(xiàng)目經(jīng)理有權(quán)安排項(xiàng)目組加班,以保證工期。
          2.            如果項(xiàng)目經(jīng)理接收到新的需求,則項(xiàng)目經(jīng)理應(yīng)該在下午的項(xiàng)目每日總結(jié)會(huì)上提出,并分配安排工作。除非新來的需求特別緊急或影響到項(xiàng)目組當(dāng)前正在進(jìn)行的任務(wù),需要召集項(xiàng)目組成員緊急討論外,否則不應(yīng)打斷項(xiàng)目組的當(dāng)前工作。
          如果新的需求是在每天下班后接收的,則項(xiàng)目經(jīng)理應(yīng)在第二天早上召集項(xiàng)目組成員討論并安排任務(wù)
          posted @ 2011-03-09 22:59 小馬歌 閱讀(316) | 評(píng)論 (0)編輯 收藏
           

          It seems something is wrong with IE's cache and GZip

          好多Linux + Apache的服務(wù)器都會(huì)對(duì)CSS、JS和圖片這些靜態(tài)的內(nèi)容設(shè)置緩存,到了IE這里又會(huì)在本地做一個(gè)緩存。所以當(dāng)我們更新了CSS文件之后,常常會(huì)出現(xiàn)客戶端沒有更新,導(dǎo)致顯示出現(xiàn)問題。之前我一直使用時(shí)間戳參數(shù)的方法來解決:

          <link rel="stylesheet" type="text/css" 
          href="common.css?time=20060408" />

          每次更改了css文件就把參數(shù)time的值設(shè)為更改當(dāng)日的日期,這樣本地IE就會(huì)把它當(dāng)作一個(gè)新的文件更新一次。

          但是在最近做的項(xiàng)目中發(fā)現(xiàn)一個(gè)比較奇怪的問題,服務(wù)器端做了gzip壓縮,到客戶端第一次解壓的時(shí)候沒問題,第二次訪問的時(shí)候ie從cache里讀文件就出問題了,只能讀出前面大約一兩千個(gè)字節(jié)。在兩臺(tái)win2000+ie6的機(jī)子上重現(xiàn)了這個(gè)問題,XP的還沒有發(fā)現(xiàn)。

          最終的解決方案是在時(shí)間戳參數(shù)后面再加上一個(gè).css結(jié)尾,也就是這么寫:

          <link rel="stylesheet" type="text/css" 
          href="common.css?time=20060408.css" />

          然后就一切正常了...

          大概IE在從緩存里讀文件的時(shí)候還得對(duì)文件擴(kuò)展名做一個(gè)判斷,所以這么加一下它就認(rèn)了。我自己對(duì)這個(gè)解釋不甚滿意,所以如果你有標(biāo)準(zhǔn)答案麻煩留個(gè)言

          BTW,這個(gè)現(xiàn)象在.js文件上同樣重現(xiàn)了。


          posted @ 2011-03-08 13:19 小馬歌 閱讀(459) | 評(píng)論 (0)編輯 收藏
           

          我在美國生了兩個(gè)孩子,生育前后都有培訓(xùn)班,家庭醫(yī)生每次洗腦讓我受益匪淺,我的兩個(gè)寶寶在嬰兒時(shí)期乖巧得好像家里沒有小嬰兒,我甚至疑心她們會(huì)不會(huì)哭?如今外婆常拿這句傻話笑我。回國后看到朋友或鄰居們被小祖宗折磨得精疲力竭,我遇到一個(gè)就會(huì)分享媽媽經(jīng),很沒效率,想著將媽媽經(jīng)寫下來或許會(huì)幫到手忙腳亂、身心疲憊的年輕爸爸媽媽。再次感謝南加州著名的兒科醫(yī)生JANE GU,這幾年在她的指導(dǎo)下學(xué)到很多一輩子都受益的育兒寶典。

           

          絕招一

          如何讓小寶寶不哭

          愛哭的BABY都是爸媽教出來的。才出生的小BABY聽不懂話,他們靠條件反射來做判斷。中國的家長(zhǎng)一聽到孩子哭就抱起來。GU醫(yī)生反復(fù)告誡我:孩子一哭就放下來,不哭才抱起來,正好反過來。這樣一來,再小的孩子都能明白,不哭的時(shí)候才有得抱,這招極靈。放下愛哭的孩子開始訓(xùn)練,看著時(shí)鐘,不要抱讓她哭,準(zhǔn)備等10分鐘再抱。第一次可以設(shè)定5分鐘,以后一次比一次時(shí)間拉長(zhǎng),我的妞妞第一次就沒有熬到5分鐘,大約3分半的時(shí)候就停了,我已經(jīng)心疼得肝腸寸斷自己都快哭了,一定要忍住了。讓孩子知道哭聲是叫不來媽媽的。訓(xùn)練“不哭的孩子”要排除4個(gè)哭的其他原因:尿了、病了、餓了,困了。上帝保佑,我家兩個(gè)孩子都不會(huì)無理由哭,偶爾哭一下當(dāng)作運(yùn)動(dòng)也是極少數(shù),妞妞和妙妙100%是快樂的寶寶,躺在床上都咯咯笑出聲的孩子。

           

          絕招二

          如何讓剛出生的小寶寶一覺睡到天亮

          美國醫(yī)生再三批評(píng)我:你不是好媽媽,隔壁的孩子一睡到天亮,隔壁的媽媽是好媽媽,你不是!每次去看家庭醫(yī)生我都挨批評(píng),原因是我晚上要喂奶1-2次,抱怨養(yǎng)孩子很累很辛苦。醫(yī)生告訴我一個(gè)觀念:人類晚上不需要進(jìn)食!我傻乎乎問,為什么呢?醫(yī)生沒辦法,只好大聲說:因?yàn)槲覀兪侨祟悾∥矣∠髽O深,妞爸早就笑彎腰了。很顯然,我擔(dān)心BABY晚上會(huì)餓根本是多余的,10-12小時(shí)的連續(xù)睡眠,對(duì)孩子來說比吃奶重要100倍!我們被老大妞妞折磨很慘,晚上吃一頓奶的壞習(xí)慣一直延續(xù)到快2歲。養(yǎng)老二的時(shí)候按照醫(yī)生說的,徹底讓我和老公解脫出來,從剛出生到一個(gè)禮拜我家妙妙被訓(xùn)練距離5個(gè)小時(shí)才吃奶,2個(gè)禮拜之后,孩子就能睡天亮了。晚上不需要吃奶!!!(三個(gè)感嘆號(hào)是請(qǐng)媽媽們切記的意思)

           

          絕招三

          如何讓寶寶自己靜靜入睡,不要搖晃

          醫(yī)生說,一個(gè)快樂的BABY會(huì)睡在床上唱歌的(不是真唱,是嬰兒咿咿呀呀)!嬰兒的大部分時(shí)光都需要在床上度過,這里請(qǐng)爸爸媽媽們記住,床是不會(huì)動(dòng)的!所以,抱起嬰兒的時(shí)候不要搖晃,不要來回走動(dòng),更不要這樣哄孩子睡覺,輕輕放在床上讓他自己睡就好。再說一次,床是不會(huì)動(dòng)的。爸爸媽媽你們沒有權(quán)利剝奪孩子躺在床上享受快樂的權(quán)利。還有更重要的就是,興奮的家長(zhǎng)不要用力和孩子“瘋鬧”,孩子的大腦在嬰兒時(shí)期還是膠狀的果凍狀態(tài),很容易受傷。

           

          絕招四

          趴著睡養(yǎng)美女

          非GU醫(yī)生推薦,純屬個(gè)人選擇:我們選擇孩子趴著睡覺比仰著睡得安穩(wěn),頭型是完美的圓形,臉型被徹底改造成小臉,無論男女都必要。還有就是才出生的孩子心臟朝下,幾乎不會(huì)一驚一驚的狀態(tài),模仿子宮被包裹的狀態(tài)。另一個(gè)最大的好處是改變亞洲人的大餅?zāi)槪?天之內(nèi)的嬰兒需要1個(gè)小時(shí)幫忙翻臉,5天之后,我家妞就會(huì)自己左右轉(zhuǎn)向自如了。妞是標(biāo)準(zhǔn)的小臉,和生出來的時(shí)候大方臉好像變了一個(gè)孩子,呵呵,得意。老二妙妙的臉沒有刻意這樣做,那時(shí)候妞妞需要人照顧,沒有精力1個(gè)小時(shí)翻頭的精力了,很可惜。這個(gè)機(jī)會(huì)只有在出生到3個(gè)月之內(nèi)有效,大了就沒用了。很重要的是,這么做的時(shí)候,嬰兒床上除了孩子和小被子,什么都清理干凈,不要以為小嬰兒不會(huì)動(dòng),不會(huì)危險(xiǎn)。我生老二的時(shí)候,老大在一邊鬧,沒有精力這么“做臉”了,老二就沒有這么做了,哈哈,如今應(yīng)驗(yàn)了一個(gè)典型的東方大臉姑娘。

           

          絕招五

          寶寶的抵抗力比你強(qiáng)十倍

          爸爸媽媽穿2件,寶寶絕不能穿2件半,只能比你穿的少,不能比你穿的多。我家兩個(gè)孩子都十分強(qiáng)壯,冷熱其實(shí)很好控制,偶爾看到兒童醫(yī)院發(fā)燒的孩子被花被子棉襖裹著一層一層的,可憐啊,孩子不會(huì)說話,都是家長(zhǎng)害的。

           

          絕招六

          拒絕抗生素!是虐待不是愛

          感冒發(fā)燒是孩子成長(zhǎng)的過程,是增強(qiáng)抵抗力的過程。我家寶寶發(fā)燒了最常用的就是用冰敷,用有拉鏈的保鮮袋裝冰塊,用干凈毛巾裹了冰敷在全身,30分鐘一定退燒。燒厲害了配點(diǎn)美林或泰諾。如果是著涼了感冒沒有發(fā)燒,就讓孩子吊著鼻涕沒有事,幾天就好。不要相信任何藥能治療感冒。到目前為止,除了去年的手足口被醫(yī)院騙進(jìn)去那一次之外,我家2個(gè)孩子從來沒有掛過鹽水和注射過抗生素。在美國,是那種要死的病才注射抗生素的,在中國注射室的景觀,嚇壞了妞妞的爸爸,那個(gè)景象讓人發(fā)毛他說。一排一排的吊針,打手打頭打腳的小孩子們?cè)趮寢尠职譅敔斈棠痰呐阕o(hù)下掛鹽水。集中營莫過如此,很恐怖。花錢不說,更可怕的是體內(nèi)的細(xì)菌大戰(zhàn)存留的各種毒越來越多,周期性的需要掛鹽水來壓下去,常常聽到媽媽們說,有一點(diǎn)癥狀馬上掛水壓下去,十分得意。我為她們的無知十分惋惜。我的孩子越來越健壯,從不生病,病了也幾天自己好,基本不治療。鄰居的孩子半夜跑醫(yī)院,累的人仰馬翻樂此不疲,從這點(diǎn)看我是好媽媽。

           

          絕招七

          天天洗澡,用清水,少用沐浴露

          我的2個(gè)寶寶健康的另外一個(gè)原因是天天洗澡,天天洗澡是必要的。記得我生完孩子出來,準(zhǔn)備聽我媽媽的教誨躺著不動(dòng),打算熬到第二天才洗澡,護(hù)士驚訝地拉我起來洗澡“不管你什么傳統(tǒng),把汗水和細(xì)菌都洗掉才會(huì)健康”。我被誤會(huì)成個(gè)臟媽媽被拖去洗澡,當(dāng)然要說明的是我生兩個(gè)都是順產(chǎn)。產(chǎn)婦如此何況小孩子?孩子每天運(yùn)動(dòng)量大,臭汗奶腥味便便尿尿什么味道都有,一定要洗澡,不能隔天才洗。這也是健康不生病的重要原因,他們不會(huì)著涼的,抵抗力比成人強(qiáng)十倍。GU醫(yī)生交代:寶寶洗澡盡量用清水,再名牌的嬰兒產(chǎn)品都不如清水好,不要用任何沐浴露、洗發(fā)水,清水最最好!醫(yī)生說盡量不用,一定要用的話一個(gè)星期用一次沐浴露就好,我家是三天用一次(我覺得一周太長(zhǎng)了,心理作用)。

           

          絕招八

          沒有奶不夠吃的媽媽,只有不想喂奶的媽媽

          能吃到2歲半是天下最幸福的寶寶。GU醫(yī)生說,沒有奶不夠吃的媽媽,只有不想喂奶的媽媽,孩子的食量多大,媽媽的奶就有多少,生雙胞胎的媽媽的奶同樣夠兩個(gè)孩子吃。這一點(diǎn)我很失敗,盡管GU醫(yī)生用筆畫了一個(gè)圓圈,她告訴我,你的孩子吃多少,你就能生產(chǎn)多少,你覺得奶不夠,加奶粉進(jìn)去,奶就會(huì)真的不夠,最后就沒了,事實(shí)證明我后來真的越來越少直到?jīng)]了。孩子不會(huì)說話,她吃飽沒有很難知道,媽媽覺得奶少了就放棄母奶,就補(bǔ)奶粉,其實(shí)是告訴自己的身體,我只能生產(chǎn)這么多了。要相信自己能當(dāng)頭稱職的奶牛。如果再生一個(gè),一定要證明一下。生完小孩第三天就去醫(yī)院參加“喂奶班”,幾個(gè)媽媽帶嬰兒圍成一圈,有黑媽媽白媽媽和亞洲媽媽,喂奶課用的是那種很舒服的沙發(fā),腳下有墊腳的專用凳子。醫(yī)生們將孩子脫光,包括尿布,然后稱BABY的重量精確到小數(shù)點(diǎn)后面2位數(shù)。然后讓我們抱孩子喂奶,不準(zhǔn)穿衣服只穿尿布。醫(yī)生一對(duì)一教媽媽們?nèi)绾巫尯⒆右豢诰鸵?zhǔn)奶頭,如何保護(hù)奶頭,一次一次訓(xùn)練,期間有別的媽媽來用免費(fèi)提供的吸奶機(jī)下奶,用塑料袋裝回家。我剛開始的害羞和尷尬慢慢沒有了,呵呵,我在家完全不知道妞妞吃了多少,這下好了,一堂課下來,馬上稱孩子份量,我妞妞吃了不少,好像是那天的第二名,前后數(shù)據(jù)證明,我有奶。

           

          絕招九

          寶寶吃奶睡著怎么辦?

          BABY被媽媽抱著舒服又安全,沒吃飽就睡著了,醒了又吃兩口,折磨媽媽,寶寶也吃不飽睡不好,害人害己。訓(xùn)練班里學(xué)到最有用的一招,如何弄醒孩子讓他們專心吃奶,就是脫衣服!脫得就剩尿布,醫(yī)生告訴我,放心吧,你抱著她有媽媽的體溫,這體溫能保證嬰兒不會(huì)著涼,溫度剛剛好,BABY有一點(diǎn)涼意,他們會(huì)用心進(jìn)餐(她說的真是進(jìn)餐,呵呵)。放心吧,這些看起來弱不禁風(fēng)的小東西,從媽媽母體帶出來的抵抗力比成人強(qiáng)10倍,喂奶的產(chǎn)婦也不容易病,這就是繁殖的力量。(當(dāng)然室內(nèi)的溫度是有一定溫暖的,國內(nèi)無空調(diào)寒冷地區(qū)的人不要對(duì)照模仿誤會(huì))

           

          絕招十

          母奶是最好的“抗生素”

          妞妞大概10來天的時(shí)候,一只眼睛發(fā)炎化膿了,我和妞爸嚇得抱到醫(yī)院,還是急診,兒科的男醫(yī)生問,你喂奶還是奶粉,我說母奶。他說擠點(diǎn)出來放進(jìn)孩子眼睛,BABY就會(huì)好。What? 我排隊(duì)等急診老半天就這么打發(fā)我回家了。于是如法炮制,母奶當(dāng)藥,幾天后妞妞果然見好,是否母奶的原因還是不清不楚,美國醫(yī)生忽悠得或許有點(diǎn)道理吧。總之母奶是好東西。

           

          絕招十一

          你會(huì)換尿布嗎?

          廢話,養(yǎng)孩子的誰不會(huì)換尿布呢?不一定哦。你是否有被孩子噴到尿或臭便便的時(shí)候呢?一天洗5次床單是我的最高記錄。換尿布的時(shí)候,每次來的新阿姨都要重新教一遍,竅門就是把干凈尿布放在臭尿布下面,再打開尿布,擦干凈抽出來,這樣即使孩子正好那時(shí)候又便又尿,你的床單保住了。習(xí)慣這么做以后,永遠(yuǎn)沒有意外發(fā)生。換尿布之前將濕紙巾和垃圾簍和尿布還有護(hù)臀膏都準(zhǔn)備好,不要讓自己有轉(zhuǎn)身的機(jī)會(huì),別以為那么小的孩子不會(huì)掉下來,會(huì)掉的,很危險(xiǎn)。

           

          絕招十二

          你會(huì)拍嗝嗎?

          姿勢(shì)一,趴在肩膀上輕拍孩子后背,這種是傳統(tǒng)姿勢(shì),很多時(shí)候不太容易拍出來嗝。

          姿勢(shì)二:讓孩子側(cè)坐在腿上,左手托著孩子的脖子,撐起下巴,右手拍后背,這樣效率極高,通常十幾下就拍出嗝了。臨睡的最后一頓奶,一定要喂飽足了,拍完嗝繼續(xù)喂,我家妙妙2禮拜就睡整晚就是用這招,拍完嗝還可以再喂2-3次,直到她真的不吃了,小嘴巴往外推奶瓶的狀態(tài),妙妙就能睡到天亮。

           

          絕招十三

          早點(diǎn)吃五谷雜糧

          4個(gè)月吃米粉再大點(diǎn)跟大人一起吃東西,孩子長(zhǎng)大不太會(huì)偏食,早點(diǎn)吃和成人一樣的食物對(duì)孩子有好處。6顆牙的時(shí)候,GU醫(yī)生說,她已經(jīng)可以用這幾顆牙齒吃很多東西了,什么都可以喂,沒有不能吃的。

           

          絕招十四

          別破壞寶寶的專注力

          再小的寶寶玩玩具或看電視或看圖畫書的時(shí)候,請(qǐng)家里的阿姨或者任何人都別打斷她們。即使是吃飯的時(shí)間到了,晚一點(diǎn)也沒有關(guān)系。培養(yǎng)孩子的專注力就等于培養(yǎng)她們長(zhǎng)大了能注意力集中做任何事情。我家妞妞專注力很好,她喜歡的事,比如拼圖,一個(gè)下午幾個(gè)鐘頭不抬頭,沒有人叫她,除了尿尿之外。最怕那種大呼小叫逗孩子的長(zhǎng)輩們,自以為聰明,邊看電視邊問問題。閉嘴,請(qǐng)安靜。給孩子一個(gè)專注的環(huán)境吧。

           

          絕招十五

          慢慢走路,小聲說話

          身體力行很重要,大人怎樣的孩子都會(huì)學(xué)。難得遇到上海一位陸老師,教孩子慢慢走路,輕聲說話,人家聽得到就好了,別那么大聲。回了家鄉(xiāng),小區(qū)的幼兒園老師教孩子們扯起嗓門唱歌,我在一旁看,心想完了,培養(yǎng)了半天的小淑女被漢派文化同化了,哈哈,如今的妞妞很“武漢”,熱干面一樣的個(gè)性十足,整個(gè)兒一辣妹。大環(huán)境很厲害,幾乎沒有不被同化的可能。

           

          絕招十六

          只要沒有生命危險(xiǎn),鼓勵(lì)寶寶試試看,摸摸看

          中國父母禮節(jié)有余,膽子太小。“別動(dòng),危險(xiǎn),站起來地上臟,別摸,會(huì)刺到。。。。不許這樣,不許那樣”美國父母最常說的卻是“Try it! ”試試看,摸摸看。鼓勵(lì)寶寶,只要沒有生命危險(xiǎn),不要阻止孩子用他們的小手嘗試和認(rèn)識(shí)世界。大不了衣服弄臟,地上滾來滾去的寶寶時(shí)光很短,飯粒菜湯翻了一地,大不了掃一下他們會(huì)早學(xué)會(huì)吃飯甚至用筷子,玩水大不了感冒,玩沙子大不了進(jìn)鞋子難受難清潔。總之有很多阻礙孩子快樂的條條框框,促使我們的小天使們?cè)絹碓娇斓刈兂沙扇耍兂陕犜捄投碌暮⒆印?鞓返谝恢匾路K了不重要,只要沒有生命危險(xiǎn),不要阻止我的孩子。

           

          絕招十七

          也是最重要的一招,一天只能批評(píng)兩次!

          父母也不可以隨便批評(píng)寶寶,一天只能批評(píng)兩次,兩次用完了就等明天的配額吧。美國老師這么慎重交代的。于是,寶寶外婆說:“你的孩子一天10次都不夠,2次的話我10分鐘就用完了,這太難了。我大笑。在嬰兒的時(shí)期,批評(píng)有用嗎?拉個(gè)便便也被阿姨批評(píng)“寶寶又干壞事了”我會(huì)反問阿姨,你不拉屎?jiǎn)幔糠催^來,說媽媽喜歡寶寶一天至少說兩次,建立安全感很重要,這對(duì)初進(jìn)幼兒園的寶寶很有用,即使媽媽暫時(shí)見不到,寶寶也不會(huì)緊張,她知道媽媽很愛她,我自己從小帶的妞妞,她進(jìn)幼兒園的時(shí)候一天都沒哭過,異常順利。老二妙妙大部分是阿姨帶的,倒是哭了好幾天才緩過來。

           

          絕招十八

          寶寶2歲之前盡量多抱抱!

          在寶寶愿意讓你抱的時(shí)候,盡量多抱抱吧,很多家長(zhǎng)生怕抱多了寶寶不獨(dú)立太依賴父母,其實(shí)這和2歲之前的多抱抱沒有關(guān)系。相反,對(duì)嬰兒的樂觀性格培養(yǎng)很有好處,絕不會(huì)有皮膚饑渴癥。嬰兒時(shí)期常常被抱著的寶寶,他們舒服了、安全了、滿足了,寶寶心情自然好,不會(huì)老哭,會(huì)樂個(gè)不停,我的兩個(gè)孩子都很開朗不認(rèn)生非常愛笑,笑的肆無忌憚好像全世界不存在笑得搖頭晃腦的,很有感染力那種。建議媽媽們同一個(gè)浴缸抱著撫摸著寶寶洗澡和玩水,時(shí)常躲在被子里不穿衣服用皮膚貼著寶寶的皮膚和她們玩,讓寶寶任意撫摸你拍打你,他們會(huì)異常開心和滿足,比上昂貴的親子班有效。妞妞現(xiàn)在4歲半了不太主動(dòng)要抱了,我有時(shí)候會(huì)很想抱抱她,她居然說媽媽你坐著抱我,這樣你不會(huì)累,聽起來好像完全是滿足我想抱的愿望十分體貼。有時(shí)候妞妞比較像媽媽,哈哈。生了2個(gè)孩子還是覺得她們長(zhǎng)得飛快,還是沒過到癮,妞爸說,好像我家有個(gè)小妞妞不見了。孩子進(jìn)入了學(xué)齡前敏感時(shí)期,新的探索已經(jīng)來了。

          posted @ 2011-03-02 16:36 小馬歌 閱讀(454) | 評(píng)論 (0)編輯 收藏
           

          SESSION與COOKIE問題,可以說是一個(gè)老生常談的問題,對(duì)于什么是SESSION,什么是COOKIE,我這里就不多說了,

          GOOGLE一下,一大把(或者:去看:http://hi.baidu.com/fc_lamp/blog/item/da10f32cf47b843e349bf7c3.html)

          今天,我要說的是如何在同一頁面重復(fù)的操作同一個(gè)session.name官網(wǎng)說明:session.name指定會(huì)話名以用做 cookie 的名字。只能由字母數(shù)字組成,默認(rèn)為PHPSESSID。即:人為修改PHP自動(dòng)生成的SESSION ID。

          首先,我們知道 一旦 PHP session_start()后就開啟了一個(gè)會(huì)話。這當(dāng)種了兩件事:一是把相關(guān)SESSION信息存放于服務(wù)器端(產(chǎn)生一個(gè)類似于sess_XXX這樣的文件),二是把會(huì)話名session name(默認(rèn)為:PHPSESSID),以及SESSION ID發(fā)給瀏覽器以cookie的方式存起來(即:cookie_name : SESSION ID)。這樣,當(dāng)再次訪問頁面時(shí),瀏覽器再把COOKIE里的SESSION ID發(fā)給服務(wù)器(當(dāng)然,COOKIE里的值是沒有過期的),PHP比對(duì)服務(wù)器上的SESSION文件,如果沒有得話,會(huì)產(chǎn)生一個(gè)新的SESSION文件,如果有得話,則直接使用。這里有兩點(diǎn)值的說明一下:

          1 :對(duì)于登錄合不合法之類的是你自己寫PHP腳本來判斷的,即比對(duì)$_SESSION里的值(因?yàn)樾庐a(chǎn)生的SESSION文件里是沒有任何值的)。

          2 :把COOKIE里的SESSION ID傳給服務(wù)器(PHP)后,在使用SESSION ID之前有一個(gè)選擇。前面,我們說過SESSION ID在COOKIE里是以鍵值配對(duì)方式存放的,鍵即為會(huì)話名(session name),一般如果沒有事先聲明(在session_start()之前)PHP是使用默認(rèn)的會(huì)話名,即PHPSESSID,所以不同頁面可以有不同的會(huì)話名。如下圖所示:


          所以,對(duì)于特殊的SESSION ID,要使用時(shí)必須事先聲明(設(shè)置)會(huì)話名,才能正常的引用。

          那么如何設(shè)置會(huì)話名(session name)呢?設(shè)置session name的方試一般有兩種:

          1:在php.ini配置文件里修改:在php.ini文件里找到:session.name = PHPSESSID  即可完成設(shè)置

          2:使用session_name()函數(shù)設(shè)置,eg:session_name('test9');

          這里要注意一下:關(guān)于session name的問題。恩,在這里我直接引用官網(wǎng)上的一段話(簡(jiǎn)單的E文,想必大家都看的懂):

          The session name references the session id in cookies and URLs. It should contain only alphanumeric characters; it should be short 

          and descriptive (i.e. for users with enabled cookie warnings). Ifnameis specified, the name of the current session is changed to its value.

          The session name can't consist of digits only, at least one letter must be present. Otherwise a new session id is generated every time.

          以上這段非常重要,請(qǐng)你一定要仔細(xì)看。或者去官網(wǎng):http://cn.php.net/manual/zh/function.session-name.php

          好了,有了以上的說明后我們來看一段同一頁面重復(fù)的操作同一個(gè)session.name代碼:

              if(isset($_COOKIE['test9'])){//如果已有值,則銷毀
                  session_name('test9');
                  session_start();
                  setcookie('test9','',time()-3600);//相應(yīng)COOKIE也過期(這段代碼實(shí)際上可以不要)
                  session_unset();
                  session_destroy();
              }
              //重新播種SESSION
              session_name('test9');
              session_id(md5(uniqid()));
              session_start();
              $_SESSION['test'] = 'test';

              var_dump($_COOKIE);


           另外:官網(wǎng)上也有討論設(shè)置SESSION生命周期的問題,可以看看。地址:http://cn.php.net/manual/zh/function.session-set-cookie-params.php

          posted @ 2011-02-26 04:15 小馬歌 閱讀(1037) | 評(píng)論 (0)編輯 收藏
           

          前言

          在我的上一篇文章《使用 Nginx 提升網(wǎng)站訪問速度》中介紹了 Nginx 這個(gè) HTTP 服務(wù)器以及如何通過它來加速網(wǎng)站的訪問速度。在實(shí)際的網(wǎng)站運(yùn)營中,我們經(jīng)常需要了解到網(wǎng)站的訪問情況,例如每天有多少 IP 在訪問、PV 數(shù)是多少、哪個(gè) URL 訪問量最大、用戶使用最多的瀏覽器是哪個(gè)、都是通過什么方式知道這個(gè)網(wǎng)站的以及有多少用戶訪問出錯(cuò)等等,通過掌握這些信息來提高用戶的體驗(yàn),從而改善網(wǎng)站的質(zhì)量。一般我們可以通過一些免費(fèi)的訪問統(tǒng)計(jì)網(wǎng)站例如 Google Analytics 來或者這些信息。但不足之處是這類網(wǎng)站只能對(duì)頁面進(jìn)行分析,不包括靜態(tài)文件;另外可能有很多的站長(zhǎng)不愿意使用這類工具來暴露自己的數(shù)據(jù),種種的這些因素使站長(zhǎng)希望自己來分析訪問日志。而 awstats 就可以滿足所有的這些需求。

          Awstats 是在 SourceForge 上發(fā)展很快的一個(gè)基于 Perl 的 WEB 日志分析工具,一個(gè)充分的日志分析讓 Awstats 顯示您下列資料:

          • 訪問次數(shù)、獨(dú)特訪客人數(shù),
          • 訪問時(shí)間和上次訪問,
          • 使用者認(rèn)證、最近認(rèn)證的訪問,
          • 每周的高峰時(shí)間(頁數(shù),點(diǎn)擊率,每小時(shí)和一周的千字節(jié)),
          • 域名/國家的主機(jī)訪客(頁數(shù),點(diǎn)擊率,字節(jié),269域名/國家檢測(cè), geoip 檢測(cè)),
          • 主機(jī)名單,最近訪問和未解析的 IP 地址名單
          • 大多數(shù)看過的進(jìn)出頁面,
          • 檔案類型,
          • 網(wǎng)站壓縮統(tǒng)計(jì)表(mod_gzip 或者 mod_deflate),
          • 使用的操作系統(tǒng) (每個(gè)操作系統(tǒng)的頁數(shù),點(diǎn)擊率 ,字節(jié), 35 OS detected),
          • 使用的瀏覽器,
          • 機(jī)器人訪問(檢測(cè) 319 個(gè)機(jī)器人),
          • 蠕蟲攻擊 (5 個(gè)蠕蟲家族),
          • 搜索引擎,利用關(guān)鍵詞檢索找到你的地址,
          • HTTP 協(xié)議錯(cuò)誤(最近查閱沒有找到的頁面),
          • 其他基于 URL 的個(gè)性報(bào)導(dǎo),鏈接參數(shù), 涉及綜合行銷領(lǐng)域目的.
          • 貴網(wǎng)站被加入"最喜愛的書簽".次數(shù).
          • 屏幕大小(需要在索引頁補(bǔ)充一些 HTML 標(biāo)簽).
          • 瀏覽器的支持比例: Java, Flash, RealG2 reader, Quicktime reader, WMA reader, PDF reader.
          • 負(fù)載平衡服務(wù)器比率集群報(bào)告.

          Awstats 的運(yùn)行是需要 PERL 環(huán)境的支持,從 awstats 的文檔來看,它對(duì) Apache HTTP Server 的支持是非常完美的,而當(dāng)我們把 Web 服務(wù)器換成 Nginx 后,要運(yùn)行 awstats 變得很麻煩。首先 Nginx 本身對(duì) Perl 的支持是比較弱的,甚至官方也不建議使用;另外在日志格式上有需要修改后才能運(yùn)行。

          本文主要介紹通過讓 awstats 對(duì)日志統(tǒng)計(jì)的結(jié)果生成靜態(tài)頁面,然后通過 Nginx 輸出以達(dá)到統(tǒng)計(jì) Nginx 訪問日志的效果,其中還包括如何讓 Nginx 自動(dòng)切割日志文件。


          配置 Nginx 自動(dòng)切割日志

          跟 Apache HTTP Server(以下稱 Apache)不同的是,Apache 可以將日志輸出通過管道的方式進(jìn)行重新定向,依此來進(jìn)行自動(dòng)的日志切割。Nginx 在現(xiàn)今版本上還沒能跟 Apache 一樣,通過%YY等參數(shù)按日期分批創(chuàng)建日志,但是通過給 nginx 進(jìn)程發(fā)送一個(gè)特定的信號(hào),可以使 nginx 重新生成日志文件。我們可以定期執(zhí)行一個(gè) Shell 腳本來切換日志,重新命名或轉(zhuǎn)移,具體的腳本如下:

          # mv  /opt/nginx/logs/access.log /opt/nginx/logs/access_`date +%Y%m%d`.log
                      # killall –s USR1 nginx	#使用USR1參數(shù)通知Nginx進(jìn)程切換日志文件
                      

          將以上腳本內(nèi)容保存為文件名為 logcron.sh 存到自定的目錄中,例如 /opt/nginx/sbin/logcron.sh

          使用 Crontab 讓該腳本程序在每天晚上 11 點(diǎn) 59 分自動(dòng)執(zhí)行,即可做到按天創(chuàng)建日志。


          安裝和配置 Awstats

          安裝之前,必須確認(rèn)你的服務(wù)器上 Perl 的環(huán)境已經(jīng)就緒。

          查看當(dāng)前環(huán)境 Perl 版本的命令是 perl –version

          我們還需要對(duì) Nginx 的日志格式做個(gè)小修改,不然 awstats 將無法進(jìn)行統(tǒng)計(jì)。

          例子如下(加粗部分):

          # vi /opt/nginx/conf/nginx.conf
                      server {
                      listen       80;
                      server_name  localhost;
                      location ~ ^/web/ {
                      root   /data/web;
                      index  index.html;
                      error_log off;
                      charset gb2312;
                      }
                      log_format  new_log	#格式代稱 (注意,如果有多個(gè)虛擬主機(jī),代稱不能一樣)
                      '$remote_addr - $remote_user [$time_local] $request '
                      '"$status" $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
                              access_log  logs/access.log new_log;	#日志生成路徑
                      }
                      

          下載最新版本的 awstats 包,下載地址請(qǐng)見文章最后的參考資料。把下載后的 tar 包解壓到任意目錄中,例: /usr/local/awstats 。然后執(zhí)行 tools 目錄中的 awstats_configure.pl 配置向?qū)В瑒?chuàng)建一個(gè)新的統(tǒng)計(jì)。

          -----> Check for web server install
                      Enter full config file path of your Web server.
                      Example: /etc/httpd/httpd.conf
                      Example: /usr/local/apache2/conf/httpd.conf
                      Example: c:\Program files\apache group\apache\conf\httpd.conf
                      Config file path ('none' to skip web server setup):
                      #> none  #因?yàn)槲覀冞@里用的是 Nginx,所以寫 none,跳過。
                      

          回車

          Your web server config file(s) could not be found.
                      You will need to setup your web server manually to declare AWStats
                      script as a CGI, if you want to build reports dynamically.
                      See AWStats setup documentation (file docs/index.html)
                      -----> Update model config file '/usr/local/awstats/wwwroot/cgi-bin/awstats.model.conf'
                      File awstats.model.conf updated.
                      -----> Need to create a new config file ?
                      Do you want me to build a new AWStats config/profile
                      file (required if first install) [y/N] ?
                      #> y	#y 創(chuàng)建一個(gè)新的統(tǒng)計(jì)配置
                      

          回車

          -----> Define config file name to create
                      What is the name of your web site or profile analysis ?
                      Example: www.mysite.com
                      Example: demo
                      Your web site, virtual server or profile name:
                      #> www.moabc.net		#統(tǒng)計(jì)網(wǎng)站的域名 例:
                      www.moabc.net
                      

          回車

          -----> Define config file path
                      In which directory do you plan to store your config file(s) ?
                      Default: /etc/awstats
                      Directory path to store config file(s) (Enter for default):
                      #>
                      

          使用默認(rèn)直接回車,接下來便會(huì)出現(xiàn)以下的提示

          ----> Add update process inside a scheduler
                      Sorry, configure.pl does not support automatic add to cron yet.
                      You can do it manually by adding the following command to your cron:
                      /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.moabc.net
                      #回頭把該命令填入crontab 按指定時(shí)間執(zhí)行
                      Or if you have several config files and prefer having only one command:
                      /usr/local/awstats/tools/awstats_updateall.pl now
                      Press ENTER to continue...		回車?yán)^續(xù)
                      A SIMPLE config file has been created: /etc/awstats/awstats.www.moabc.net.conf
                      #新配置文件所在的路徑
                      You should have a look inside to check and change manually main parameters.
                      You can then manually update your statistics for 'www.moabc.net' with command:
                      > perl awstats.pl -update -config=www.moabc.net
                      You can also build static report pages for 'www.moabc.net' with command:
                      > perl awstats.pl -output=pagetype -config=www.moabc.net
                      Press ENTER to finish...
                      

          回車完成向?qū)В酉聛硇薷?www.moabc.net 的統(tǒng)計(jì)配置

          #vi /etc/awstats/awstats.www.moabc.net.conf

          找到統(tǒng)計(jì)的日志文件的路徑

          LogFile="/var/log/httpd/mylog.log"

          改為

          LogFile="/opt/nginx/logs/access_%YYYY-0%MM-0%DD-0.log

          對(duì)應(yīng)上邊 Nginx 日志切割程序的所生成的目錄存放結(jié)構(gòu),要注意 Awstats 的年月日格式的跟 Nginx 的寫法有所不同。我們現(xiàn)在執(zhí)行統(tǒng)計(jì)的順序是:

          Nginx 產(chǎn)生日志 –> 日志切割 –> Nginx 繼續(xù)產(chǎn)生日志 –> 另存切割日志 –> 交由Awstats統(tǒng)計(jì) –> 生成結(jié)果

          在本文中 Awstats 所統(tǒng)計(jì)的日志,是已切下來的那部分。也能調(diào)轉(zhuǎn)順序,先統(tǒng)計(jì)完了再切。不過這比較容易造成統(tǒng)計(jì)的遺漏。配置修改完成后,保存退出。然后我們可以開始試一下手動(dòng)執(zhí)行。

          1. 先執(zhí)行日志切割腳本 logcron.sh 把 Nginx 的日志切下來。
          2. 然后執(zhí)行 Awstats 日志更新程序開始統(tǒng)計(jì)分析。
          # /opt/nginx/sbin/logcron.sh
                      # /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.moabc.net
                      Create/Update database for config "/etc/awstats/awstats.www.moabc.net.conf"
                      by AWStats version 6.7 (build 1.892)
                      From data in log file "/opt/nginx/logs/access_20080804.log"...
                      Phase 1 : First bypass old records, searching new record...
                      Direct access after last parsed record (after line 450421)
                      Jumped lines in file: 450421
                      Found 450421 already parsed records.
                      Parsed lines in file: 120
                      Found 0 dropped records,
                      Found 0 corrupted records,
                      Found 0 old records,
                      Found 120 new qualified records.
                      

          看到以上顯示,證明日志切割和 Awstats 都已經(jīng)運(yùn)行無誤了。統(tǒng)計(jì)分析完成后,結(jié)果還在 Awstats 的數(shù)據(jù)庫中。在 Apache 上,可以直接打開 Perl 程序的網(wǎng)頁查看統(tǒng)計(jì)。但本文開始時(shí)已經(jīng)提到,Nginx 對(duì) Perl 支持并不好,所以我們要換個(gè)方法,利用 awstats 的工具將統(tǒng)計(jì)的結(jié)果生成靜態(tài)文件,具體的步驟如下:

          • 首先在 webroot 目錄下創(chuàng)建一個(gè)文件夾。例:/data/webroot/awstats
          • 然后讓 Awstats 把靜態(tài)頁面生成到該目錄中
          # mkdir  /data/webroot/awstats
                      # /usr/local/awstats/tools/awstats_buildstaticpages.pl -update  \
                      -config=www.moabc.net -lang=cn -dir=/data/admin_web/awstats  \
                      -awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl
                      

          上述命令的具體意思如下:

          • /usr/local/awstats/tools/awstats_buildstaticpages.pl Awstats 靜態(tài)頁面生成工具
          • -update -config=www.moabc.net 更新配置項(xiàng)
          • -lang=cn 語言為中文
          • -dir=/data/admin_web/awstats 統(tǒng)計(jì)結(jié)果輸出目錄
          • -awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl Awstats 日志更新程序路徑。

          接下來,只需在nginx.conf 中,把該目錄配置上去即可。例子如下:(加粗部分):

          server {
                      listen       80;
                      server_name  localhost;
                      location ~ ^/web/ {
                      root   /data/web;
                      index  index.html;
                      error_log off;
                      charset gb2312;
                      }
                      location ~ ^/awstats/ {	    # html 靜態(tài)頁面目錄
                      root   /data/webroot/awstats;
                      index  index.html;
                      access_log off;
                      error_log off;
                      charset gb2312; #最好把默認(rèn)編碼改成 gb2312避免瀏覽器因自動(dòng)編碼出現(xiàn)亂碼的情況
                      }
                      location ~ ^/icon/ {             # 圖標(biāo)目錄
                      root   /usr/local/awstats/wwwroot;
                      index  index.html;
                      access_log off;
                      error_log off;
                      charset gb2312;
                      }
                      }
                      

          用瀏覽器查看到統(tǒng)計(jì)的詳細(xì)結(jié)果 http://youhostname/awstats/awstats.www.moabc.net.html

          至此,使用 awstats 已能完全支持 Nginx 的日志統(tǒng)計(jì)。


          配置 Awstats 自動(dòng)運(yùn)行

          為了讓整個(gè)日志的統(tǒng)計(jì)過程自動(dòng)完成,我們需要設(shè)置 crontab 計(jì)劃任務(wù),讓 Nginx 日志切割以及 Awstats 自動(dòng)運(yùn)行,定時(shí)生成結(jié)果頁面。

          #vi /etc/crontab
                      11 59 * * * /opt/nginx/sbin/logcron.sh			#半夜11:59  進(jìn)行日志切割
                      00 1 * * * /usr/local/awstats/tools/awstats_buildstaticpages.pl  \
                      -update -config=www.moabc.net -lang=cn -dir=/data/admin_web/awstats \
                      -awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl
                      #凌晨00:01  Awstats進(jìn)行日志分析
                      :wq保存退出
                      #crontab /etc/crontab	指定cron所執(zhí)行的配置檔路徑
                      


          保護(hù)日志統(tǒng)計(jì)結(jié)果頁面

          一般站長(zhǎng)都不愿隨便讓人知道自己站的真實(shí)流量,所以要把 Awstats 統(tǒng)計(jì)結(jié)果頁面進(jìn)行密碼保護(hù)。Nginx 使用的是跟 Apache 一樣的密碼加密格式,這里需要用到 apache 自帶的工具 htpasswd。

          如果你在本機(jī)上默認(rèn)裝有 Apache,這你就只需在它的程序目錄下運(yùn)行

          例:

          #/usr/local/apache2/bin/htpasswd -c admin.pass admin #用戶名為admin
                      New password:			輸入密碼
                      Re-type new password:		重復(fù)輸入
                      Adding password for user admin	創(chuàng)建成功
                      然后把 admin.pass 這個(gè)密碼包找個(gè)的地方藏起來.
                      修改 nginx.conf 在 location 中加入(加粗部分):
                      server {
                      listen       80;
                      server_name  localhost;
                      location ~ ^/web/ {
                      root   /data/web;
                      index  index.html;
                      error_log off;
                      charset gb2312;
                      }
                      location ~ ^/awstats/ {	    # html 靜態(tài)頁面目錄
                      root   /data/admin_web;
                      index  index.html;
                      access_log off;
                      error_log off;
                      charset gb2312;
                      auth_basic     "admin"; #用戶名
                           /opt/ngx/conf/admin.pass; #密碼包路徑
                      }
                      location ~ ^/icon/ {             # 圖標(biāo)目錄
                      root   /usr/local/awstats/wwwroot;
                      index  index.html;
                      access_log off;
                      error_log off;
                      charset gb2312;
                      }
                      }
                      修改 Nginx 配置完畢后,執(zhí)行命令 killall –s HUP nginx 讓 Nginx 重新加載配置即可。
                      


          總結(jié)

          盡管跟 Apache HTTP Server 相比較而言,Nginx 的功能是比較弱的,但是我們依然可以利用一些技巧來規(guī)避這些弱點(diǎn),Nginx 的設(shè)計(jì)者肯定也是充分考慮到這個(gè)問題。現(xiàn)在也越來越多的第三方開發(fā)的模塊在逐漸的擴(kuò)展 Nginx 的功能。但是從應(yīng)用本身的角度而言,Nginx 更傾向于卓越的性能,而非大而全的功能,因而在一些附加方面的功能,我們也不能對(duì)之要求過高。


          參考資源


          作者簡(jiǎn)介

          劉柄成一直使用 J2EE/J2ME 從事移動(dòng)互聯(lián)網(wǎng)方面的開發(fā)。DLOG4J 的作者,您可以通過 Java 自由人網(wǎng)站來跟他聯(lián)系,網(wǎng)址是:http://www.javayou.com ,另外他的郵件地址是 javayou@gmail.com。

          范綽耘,服務(wù)器軟硬件技術(shù)架構(gòu)、開源軟件的熱衷者,現(xiàn)任職廣州市摩網(wǎng)信息技術(shù)有限公司系統(tǒng)管理員,您可以通過開源中國社區(qū)網(wǎng)站 http://www.oschina.net 來聯(lián)系我。

          posted @ 2011-02-25 18:28 小馬歌 閱讀(523) | 評(píng)論 (0)編輯 收藏
           

          nginx下實(shí)現(xiàn)了WrodPress的永久鏈接rewrite。簡(jiǎn)單的方法,修改nginx.conf文件:


          location / {
          if (-f $request_filename/index.html){
          rewrite (.*) $1/index.html break;
          }
          if (-f $request_filename/index.php){
          rewrite (.*) $1/index.php;
          }
          if (!-f $request_filename){
          rewrite (.*) /index.php;
          }
          }

          輸入killall -HUP nginx     重啟nginx就可以了。

          posted @ 2011-02-18 11:57 小馬歌 閱讀(161) | 評(píng)論 (0)編輯 收藏
           

          PHP使用ImageMagick代替GD庫

          ImageMagick模塊我們使用DSO動(dòng)態(tài)編譯加載的方式,這樣避免重新編譯安裝php
          [root@cgstest ImageMagick-6.6.0-0]# mkdir /usr/local/ImageMagick
          wget http://ftp.nluug.nl/ImageMagick/ImageMagick-6.6.0-0.tar.gz
          //注意,我之前使用最新版本ImageMagick-6.6.6-10 ,結(jié)果編譯總是出錯(cuò),壇子上看到有人與我同樣問題,原因是gcc版本太低,生產(chǎn)服務(wù)器上不能輕易變動(dòng),有時(shí)候新版本不一定是適合的,所以我降低版本后編譯成功。
          安裝ImageMagick-6.6.0-0 
          [root@cgstest ImageMagick-6.6.0-0]# ./configure LDFLAGS="-L/usr/lib" CPPFLAGS="-I/usr/include" --prefix=/usr/local/ImageMagick/ --enable-shared --enable-lzw
          make && make install

          wget http://www.magickwand.org/download/php/MagickWandForPHP-1.0.8.tar.gz
          安裝MagickWandForPHP-1.0.8
          [root@cgstest MagickWandForPHP-1.0.8]#/usr/local/php/bin/phpize
          [root@cgstest MagickWandForPHP-1.0.8]# ./configure --with-magickwand=/usr/local/ImageMagick --with-php-config=/usr/local/php/bin/php-config
          make && make install
           

          wget http://pecl.php.net/get/imagick-3.0.1.tgz
          安裝imagick-3.0.1
          //This extension requires ImageMagick version 6.2.4+ and PHP 5.1.3+. 注意版本的需求
          [root@cgstest imagick-3.0.1]# /usr/local/php/bin/phpize
          [root@cgstest imagick-3.0.1]# ./configure --with-imagick=/usr/local/ImageMagick/ --with-php-config=/usr/local/php/bin/php-config
          make && make install
          Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/

          配置php.ini ,增加以下內(nèi)容
          extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/"
          extension = imagick.so
          extension = magickwand.so

          重啟apache,測(cè)試查看phpinfo.php是不是已經(jīng)加載上了呢。

          ImageMagick處理過的效果顯示http://www.imagemagick.org/image/examples.jpg 

          posted @ 2011-02-14 13:17 小馬歌 閱讀(827) | 評(píng)論 (0)編輯 收藏
          僅列出標(biāo)題
          共95頁: First 上一頁 55 56 57 58 59 60 61 62 63 下一頁 Last 
           
          主站蜘蛛池模板: 四川省| 大冶市| 沁水县| 环江| 昭通市| 潜山县| 庆城县| 嘉兴市| 宁乡县| 萨迦县| 探索| 勃利县| 平湖市| 九台市| 宿松县| 新乡市| 南阳市| 鹰潭市| 含山县| 景宁| 宣威市| 驻马店市| 新泰市| 鄂州市| 高邑县| 洱源县| 罗源县| 梁河县| 义乌市| 宜川县| 浑源县| 涟源市| 曲周县| 宿州市| 开封县| 班戈县| 昌黎县| 望都县| 西城区| 连南| 哈巴河县|