• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Error

            C++博客 首頁 新隨筆 聯系 聚合 管理
              217 Posts :: 61 Stories :: 32 Comments :: 0 Trackbacks

            #

            If you define NOMINMAX, because you prefer the STL version, then you may get problems while including gdiplus.h, which uses the min/max macro. As solution you need to include the STL headers and use "using namespace std" before you include the gdiplus.h.

            In example:

            #define NOMINMAX 
            // Include C++ headers
            #include <algorithm>
            using namespace std;

            // Include Windows headers
            #include <windows.h>
            #include <gdiplus.h>

            不能直接在工程中添加NOMINMAX,必須這么處理才能OK
            posted @ 2015-05-18 11:55 Enic 閱讀(729) | 評論 (0)編輯 收藏

            把WriteMiniDump的多線程保護去掉就正常了,太奇葩了把
            posted @ 2015-05-15 04:55 Enic 閱讀(3174) | 評論 (2)編輯 收藏

            // 本質上來說就是自己設置了UnhandleExceptionFilter后,C運行庫或者其他什么別的函數也調用了,所以自己設置的就無效了,解決方案就是HOOK SET函數,讓別人無法取代自己

            很多 C/C++ 程序會設置自己的 Unhandled Exception Filter 用于捕獲 Unhandled exceptions 并輸出一些信息(例如,創建 mini-dump 或者輸出調用棧到日志文件中)。

            從 VC++2005 開始出于安全因素微軟改變了 CRT 的行為。在以下情況下 CRT 不會通知被注冊的 Unhandled Exception Filter:

            1. 調用了 abort() 并且設置 abort 的行為為 _CALL_REPORTFAULT(Release 版本默認使用此設置)
            2. Security Checks 失敗時,具體來說就是檢查到一些會引發安全問題的堆棧溢出時不會通知被注冊的 Unhandled Exception Filter,會引發安全問題的堆棧溢出包括:覆蓋了函數的返回值,覆蓋了 Exception handler 的地址,覆蓋了某些類型的參數。關于編譯器的 Security Checks 的內容,詳細參考:http://msdn.microsoft.com/en-us/library/Aa290051(注意,此文章談到的是 Visual Studio .NET 2003,其中 _set_security_error_handler 函數在 VC++2005 以及以上版本已經無法使用)
            3. 如果沒有調用 _set_invalid_parameter_handler 設置 Invalid parameter handler 時,檢查到了非法的參數

            CRT 是通過何種方式使得我們注冊的 Unhandled Exception Filter 不被調用的?答案在 CRT 的代碼中:

            1. /* 代碼來源于 gs_report.c */
            2. /* Make sure any filter already in place is deleted. */
            3. SetUnhandledExceptionFilter(NULL);
            4. UnhandledExceptionFilter(&ExceptionPointers);

            CRT 通過調用 SetUnhandledExceptionFilter 并傳遞參數 NULL 來清除用戶注冊的 Unhandled Exception Filter。如果期望用戶注冊的 Unhandled Exception Filter 總是被調用那么應該避免 CRT 中相關的清理代碼。做法之一就是修改 CRT 代碼并且編譯為靜態庫(微軟的 VC++ Libraries 開發 Lead Martyn Lovell 在 https://connect.microsoft.com/feedback/ViewFeedback.aspx?FeedbackID=101337&SiteID=210 談到過有關的問題),這里并不建議使用此做法。另外一種做法則是改變 SetUnhandledExceptionFilter 的行為,使得 CRT 對 SetUnhandledExceptionFilter 的調用不起任何作用(更加詳細的論述可以參考《Windows 核心編程》相關章節)。

            1. // 無法得知此代碼來源于
            2. #ifndef _M_IX86
            3. #error "The following code only works for x86!"
            4. #endif
            5.  
            6. // 此函數一旦成功調用,之后對 SetUnhandledExceptionFilter 的調用將無效
            7. void DisableSetUnhandledExceptionFilter()
            8. {
            9. void* addr = (void*)GetProcAddress(LoadLibrary("kernel32.dll"),
            10. "SetUnhandledExceptionFilter");
            11.  
            12. if (addr)
            13. {
            14. unsigned char code[16];
            15. int size = 0;
            16.  
            17. code[size++] = 0x33;
            18. code[size++] = 0xC0;
            19. code[size++] = 0xC2;
            20. code[size++] = 0x04;
            21. code[size++] = 0x00;
            22.  
            23. DWORD dwOldFlag, dwTempFlag;
            24. VirtualProtect(addr, size, PAGE_READWRITE, &dwOldFlag);
            25. WriteProcessMemory(GetCurrentProcess(), addr, code, size, NULL);
            26. VirtualProtect(addr, size, dwOldFlag, &dwTempFlag);
            27. }
            28. }

            只需要在注冊 Unhandled Exception Filter 之后調用 DisableSetUnhandledExceptionFilter() 函數,那么之后所有對 SetUnhandledExceptionFilter 的調用都將無效,自然 CRT 也無法通過調用 SetUnhandledExceptionFilter 來清除用戶注冊的 Unhandled Exception Filter。

            posted @ 2015-05-15 02:17 Enic 閱讀(2624) | 評論 (0)編輯 收藏

            之前自己設計Ref類型遇到new出來的地址,和Ref的this指針一致的情況,soui的這套做法一定程度避免了
            如果有普通的單根繼承直接使用: public 
            TObjRefImpl<IRef>
            如果是多根繼承可以指定析構類型 :public TObjRefImpl2<TDeleteType>
            但是多重繼承兩個Ref類還是沒有解決,原則上應該勁量不再非接口是上使用多重繼承


              1
             template<class T>
              2 class TObjRefImpl :  public T
              3 {
              4 public:
              5     TObjRefImpl():m_cRef(1)
              6     {
              7     }
              8 
              9     virtual ~TObjRefImpl(){
             10     }
             11 
             12     //!添加引用
             13     /*!
             14     */
             15     virtual long AddRef()
             16     {
             17         return InterlockedIncrement(&m_cRef);
             18     }
             19 
             20     //!釋放引用
             21     /*!
             22     */
             23     virtual long Release()
             24     {
             25         long lRet = InterlockedDecrement(&m_cRef);
             26         if(lRet==0)
             27         {
             28             OnFinalRelease();
             29         }
             30         return lRet;
             31     }
             32 
             33     //!釋放對象
             34     /*!
             35     */
             36     virtual void OnFinalRelease()
             37     {
             38         delete this;
             39     }
             40 protected:
             41     volatile LONG m_cRef;
             42 };
             43 
             44 template<class T,class T2>
             45 class TObjRefImpl2 :  public TObjRefImpl<T>
             46 {
             47 public:
             48     virtual void OnFinalRelease()
             49     {
             50         delete static_cast<T2*>(this);
             51     }
             52 };
             53 
             54 //CAutoRefPtr provides the basis for all other smart pointers
             55 template <class T>
             56 class CAutoRefPtr
             57 {
             58 public:
             59     CAutoRefPtr() throw()
             60     {
             61         p = NULL;
             62     }
             63     CAutoRefPtr(_In_ int nNull) throw()
             64     {
             65         (void)nNull;
             66         p = NULL;
             67     }
             68     CAutoRefPtr(_In_opt_ T* lp) throw()
             69     {
             70         p = lp;
             71         if (p != NULL)
             72         {
             73             p->AddRef();
             74         }
             75     }
             76 
             77     CAutoRefPtr(const CAutoRefPtr & src) throw()
             78     {
             79         p=src.p;
             80         if(p)
             81         {
             82             p->AddRef();
             83         }
             84     }
             85 
             86     ~CAutoRefPtr() throw()
             87     {
             88         if (p)
             89         {
             90             p->Release();
             91         }
             92     }
             93 
             94     T* operator->() const throw()
             95     {
             96         return p;
             97     }
             98 
             99     operator T*() const throw()
            100     {
            101         return p;
            102     }
            103     T& operator*() const
            104     {
            105         return *p;
            106     }
            107     //The assert on operator& usually indicates a bug.  If this is really
            108     //what is needed, however, take the address of the p member explicitly.
            109     T** operator&() throw()
            110     {
            111         SASSERT(p==NULL);
            112         return &p;
            113     }
            114     bool operator!() const throw()
            115     {
            116         return (p == NULL);
            117     }
            118     bool operator<(_In_opt_ T* pT) const throw()
            119     {
            120         return p < pT;
            121     }
            122     bool operator!=(_In_opt_ T* pT) const
            123     {
            124         return !operator==(pT);
            125     }
            126     bool operator==(_In_opt_ T* pT) const throw()
            127     {
            128         return p == pT;
            129     }
            130 
            131     T* operator=(_In_opt_ T* lp) throw()
            132     {
            133         if(*this!=lp)
            134         {
            135             if(p)
            136             {
            137                 p->Release();
            138             }
            139             p=lp;
            140             if(p)
            141             {
            142                 p->AddRef();
            143             }
            144         }
            145         return *this;
            146     }
            147 
            148     T* operator=(_In_ const CAutoRefPtr<T>& lp) throw()
            149     {
            150         if(*this!=lp)
            151         {
            152             if(p)
            153             {
            154                 p->Release();
            155             }
            156             p=lp;
            157             if(p)
            158             {
            159                 p->AddRef();
            160             }
            161         }
            162         return *this;    
            163     }
            164 
            165     // Release the interface and set to NULL
            166     void Release() throw()
            167     {
            168         T* pTemp = p;
            169         if (pTemp)
            170         {
            171             p = NULL;
            172             pTemp->Release();
            173         }
            174     }
            175 
            176     // Attach to an existing interface (does not AddRef)
            177     void Attach(_In_opt_ T* p2) throw()
            178     {
            179         if (p)
            180         {
            181             p->Release();
            182         }
            183         p = p2;
            184     }
            185     // Detach the interface (does not Release)
            186     T* Detach() throw()
            187     {
            188         T* pt = p;
            189         p = NULL;
            190         return pt;
            191     }
            192     HRESULT CopyTo(_Deref_out_opt_ T** ppT) throw()
            193     {
            194         if (ppT == NULL)
            195             return E_POINTER;
            196         *ppT = p;
            197         if (p)
            198         {
            199             p->AddRef();
            200         }
            201         return S_OK;
            202     }
            203 
            204 protected:
            205     T* p;
            206 };
            struct IObjRef
            {
                virtual long AddRef() = 0;

                virtual long Release() = 0;
                
                virtual void OnFinalRelease() =0;
            };


            posted @ 2015-05-14 10:07 Enic 閱讀(329) | 評論 (0)編輯 收藏

            使用ThinkPHP開發的過程中應該盡量遵循下列命名規范:

            • 類文件都是以.class.php為后綴(這里是指的ThinkPHP內部使用的類庫文件,不代表外部加載的類庫文件),使用駝峰法命名,并且首字母大寫,例如 DbMysql.class.php
            • 類的命名空間地址和所在的路徑地址一致,例如 Home\Controller\UserController類所在的路徑應該是 Application/Home/Controller/UserController.class.php
            • 確保文件的命名和調用大小寫一致,是由于在類Unix系統上面,對大小寫是敏感的(而ThinkPHP在調試模式下面,即使在Windows平臺也會嚴格檢查大小寫);
            • 類名和文件名一致(包括上面說的大小寫一致),例如 UserController類的文件命名是UserController.class.php, InfoModel類的文件名是InfoModel.class.php, 并且不同的類庫的類命名有一定的規范;
            • 函數、配置文件等其他類庫文件之外的一般是以.php為后綴(第三方引入的不做要求);
            • 函數的命名使用小寫字母和下劃線的方式,例如 get_client_ip
            • 方法的命名使用駝峰法,并且首字母小寫或者使用下劃線“_”,例如 getUserName_parseType,通常下劃線開頭的方法屬于私有方法;
            • 屬性的命名使用駝峰法,并且首字母小寫或者使用下劃線“_”,例如 tableName_instance,通常下劃線開頭的屬性屬于私有屬性;
            • 以雙下劃線“__”打頭的函數或方法作為魔法方法,例如 __call 和 __autoload
            • 常量以大寫字母和下劃線命名,例如 HAS_ONE和 MANY_TO_MANY
            • 配置參數以大寫字母和下劃線命名,例如HTML_CACHE_ON
            • 語言變量以大寫字母和下劃線命名,例如MY_LANG,以下劃線打頭的語言變量通常用于系統語言變量,例如 _CLASS_NOT_EXIST_
            • 對變量的命名沒有強制的規范,可以根據團隊規范來進行;
            • ThinkPHP的模板文件默認是以.html 為后綴(可以通過配置修改);
            • 數據表和字段采用小寫加下劃線方式命名,并注意字段名不要以下劃線開頭,例如 think_user 表和 user_name字段是正確寫法,類似 _username 這樣的數據表字段可能會被過濾。

            特例:在ThinkPHP里面,有一個函數命名的特例,就是單字母大寫函數,這類函數通常是某些操作的快捷定義,或者有特殊的作用。例如:A、D、S、L 方法等等,他們有著特殊的含義,后面會有所了解。

            由于ThinkPHP默認全部使用UTF-8編碼,所以請確保你的程序文件采用UTF-8編碼格式保存,并且去掉BOM信息頭(去掉BOM頭信息有很多方式,不同的編輯器都有設置方法,也可以用工具進行統一檢測和處理),否則可能導致很多意想不到的問題。

            開發建議

            在使用ThinkPHP進行開發的過程中,我們給出如下建議,會讓你的開發變得更輕松:

            • 遵循框架的命名規范和目錄規范;
            • 開發過程中盡量開啟調試模式,及早發現問題;
            • 多看看日志文件,查找隱患問題;
            • 養成使用I函數獲取輸入變量的好習慣;
            • 更新或者環境改變后遇到問題首要問題是清空Runtime目錄;
            posted @ 2015-04-25 18:59 Enic 閱讀(213) | 評論 (0)編輯 收藏

            所有路徑常量都必須以“/”結尾
            THINK_PATH 框架目錄
            APP_PATH 應用目錄
            RUNTIME_PATH 應用運行時目錄(可寫)
            APP_DEBUG 應用調試模式 (默認為false)
            STORAGE_TYPE 存儲類型(默認為File)
            APP_MODE 應用模式(默認為common)
            一般部署目錄如下:
            www  WEB部署目錄(或者子目錄)
            ├─index.php       應用入口文件
            ├─Apps            應用目錄
            ├─Public          資源文件目錄
            ├─Runtime         運行時目錄
            └─Think           框架目錄
            Application
            ├─Common         應用公共模塊
            │  ├─Common      應用公共函數目錄
            │  └─Conf        應用公共配置文件目錄
            ├─Home           默認生成的Home模塊
            │  ├─Conf        模塊配置文件目錄
            │  ├─Common      模塊函數公共目錄
            │  ├─Controller  模塊控制器目錄
            │  ├─Model       模塊模型目錄
            │  └─View        模塊視圖文件目錄
            ├─Runtime        運行時目錄
            │  ├─Cache       模版緩存目錄
            │  ├─Data        數據目錄
            │  ├─Logs        日志目錄
            │  └─Temp        緩存目錄
            ├─Module         模塊目錄
            │  ├─Conf        配置文件目錄
            │  ├─Common      公共函數目錄
            │  ├─Controller  控制器目錄
            │  ├─Model       模型目錄
            │  ├─Logic       邏輯目錄(可選)
            │  ├─Service     Service目錄(可選)
            │  ... 更多分層目錄可選
            │  └─View        視圖目錄
            控制器類的命名方式是:控制器名(駝峰法,首字母大寫)+Controller
            控制器文件的命名方式是:類名+class.php(類文件后綴)
            默認的歡迎頁面其實就是訪問的Home模塊下面的Index控制器類的index操作方法 我們修改默認的index操作方法如下:
            posted @ 2015-04-25 18:57 Enic 閱讀(115) | 評論 (0)編輯 收藏

            httpd.cfg末尾添加這樣一行:
            # Virtual hosts
            Include conf/extra/httpd-vhosts.conf
            然后在這個文件中配置vhosts信息:
            監聽端口:
            Listen 81
            文件權限:
            <Directory "E:/PHP/LeanThinkPHP/">
            Options Indexes FollowSymLinks Includes ExecCGI
            AllowOverride All
            Require all granted
            </Directory>
            服務器文檔地址:
            DocumentRoot "E:/PHP/LeanThinkPHP/"
            這樣可以跑起來了,其他的東西以后再去具體看文檔
            http://httpd.apache.org/docs/2.4/vhosts/


            目前理解添加一個新的網站需要的事情:
            1.打開監聽端口
            2.使用<Directory/>設置目錄權限
            3.使用<VirtualHost/>設置網站相關信息
            posted @ 2015-04-25 18:34 Enic 閱讀(330) | 評論 (0)編輯 收藏

            Apache服務器的安裝與配置

            文檔:http://httpd.apache.org/docs/2.4/

            指令:http://httpd.apache.org/docs/2.4/mod/core.html

            一、配置文件

            語法

            * 主配置文件httpd.conf,更改只有重啟服務才會生效
            * 配置中一行一個命令,如果要多行一個命令,則最后以\結束,且與該行最后個字符無其它字符或者空白
            * 每行注釋以#開頭,會被忽略,一行命令符后不能再接注釋
            * 空行空白字符在配置文件中被忽略
            * 配置文件錯誤檢測可以通過 Test Configuration來完成(httpd.exe -w -t -f "D:\Software\GreenSoft\Apache\conf\httpd.conf" -d "D:\Software\GreenSoft\Apache\.")


            模塊

            Related Modules Related Directives
            --------------------------------------------
            mod_so <IfModule>
            LoadModule

            * httpd基于模塊化,編譯配置時,默認會把基本的功能模塊加載到服務器內核。
            * 對于動態加載的模塊可以通過LoadModule指令在任何時候完成。
            * <IfModule>可用于條件加載
            * Dos命令 httpd.exe -l 可以查看已經加載的模塊

            * httpd.exe支持的參數指令

            -D name : define a name for use in <IfDefine name> directives
            -d directory : specify an alternate initial ServerRoot
            -f file : specify an alternate ServerConfigFile
            -C "directive" : process directive before reading config files
            -c "directive" : process directive after reading config files
            -n name : set service name and use its ServerConfigFile
            -k start : tell Apache to start
            -k restart : tell running Apache to do a graceful restart
            -k stop|shutdown : tell running Apache to shutdown
            -k install : install an Apache service
            -k config : change startup Options of an Apache service
            -k uninstall : uninstall an Apache service
            -w : hold open the console window on error
            -e level : show startup errors of level (see LogLevel)
            -E file : log startup errors to file
            -v : show version number
            -V : show compile settings
            -h : list available command line options (this page)
            -l : list compiled in modules
            -L : list available configuration directives
            -t -D DUMP_VHOSTS : show parsed settings (currently only vhost settings)
            -S : a synonym for -t -D DUMP_VHOSTS
            -t -D DUMP_MODULES : show all loaded modules
            -M : a synonym for -t -D DUMP_MODULES
            -t : run syntax check for config files
            -T : start without DocumentRoot(s) check

             

            指令作用范圍


            Related Modules Related Directives
            -----------------------------------------
            <Directory>
            <DirectoryMatch>
            <Files>
            <FilesMatch>
            <Location>
            <LocationMatch>
            <VirtualHost>

            * 指令范圍標簽可以指定指令生效的范圍,其可以嵌套
            * 可以通過在<VirtualHost>標簽中放置多個指令以同時支持多個虛擬主機站點
            * 節點配置參見:http://httpd.apache.org/docs/2.4/sections.html

             

            .htaccess文件

            * httpd通過在站點目錄里面放置.htaccess文件允許配置分散
            * .htaccess的語法與主配置文件一致,對于該配置文件的變更只要請求過來會立即生效
            * 可以在.htaccess中放置的指令見:http://httpd.apache.org/docs/2.4/mod/directive-dict.html#Context
            * 如果有權限配置主配置,則應避免使用.htaccess文件方式來配置,這種方式影響服務器性能
            1)配置.htaccess文件后,httpd會查找每個目錄的.htaccess文件,不管你實際有沒有使用
            2)文檔被請求的時候,.htaccess文件每次都會被加載

            3)httpd會在多層目錄中查找.htaccess文件,以應用完整的指令。
            4).htaccess中地址重寫指令中的正則表達式在每次請求的時候重新編譯。
            5)安全問題,用戶在修改.htaccess使管理員對配置的管理失控。只有設置AllowOverride指令才可以使用戶使用指定的指令。

             


            * 在.htaccess中配置指令與在主配置中配置Dirctory塊可以達到相同效果,但是后者有更好的性能。

            Contents of .htaccess file in /www/htdocs/example
            AddType text/example .exm

            等價于:

            Section from your httpd.conf file

            <Directory /www/htdocs/example>
            AddType text/example .exm
            </Directory>


            * 禁用.htaccess可以用指令 AllowOverride None

             

            二、Apache目錄結構

            根目錄
            |-- bin 程序命令目錄
            |-- build
            |-- cgi-bin
            |-- conf 配置文件目錄
            |-- error
            |-- htdocs 編譯安裝時站點目錄
            |-- icons
            |-- include
            |-- lib 
            |-- logs 默認日志文件存放包括錯誤日志(error_log)和訪問日志(access_log) tail -f access_log可以隨時看訪問記錄, 里面httpd.pid還會記錄主進程號
            |-- man
            |-- manual
            |-- modules 模塊目錄 例如PHP MEMCACHE編譯后的模塊在這里面

             

            Bin目錄
            |-- ab apache http服務器性能壓力測試工具,類似的jmeter loadrunner webbench
            |-- apachectl apache的啟動命令
            |-- apr-1-config
            |-- apu-1-config
            |-- apxs apache服務器編譯和安裝擴展的工具,在進行DSO方式模塊編譯時會用到例如編譯PHP時就用到:--with-apxs2=/usr/local/apache/bin/apxs
            |-- checkgid
            |-- dbmmanage
            |-- envvars
            |-- envvars-std
            |-- htcacheclean 清理磁盤緩存區的命令,一般少用
            |-- htdbm
            |-- htdigest
            |-- htpasswd 建立更新基本認證文件 例如配置nagio監控時候會用到
            |-- httpd 為apache的控制命令程序,apachectl執行的時候會調用到httpd
            |-- httxt2dbm
            |-- logresolve


            Conf目錄
            |-- extra 輔助apache配置文件
            | |-- httpd-autoindex.conf
            | |-- httpd-dav.conf dav支持配置
            | |-- httpd-default.conf apache相關服務配置 如超時時間 保持連接時間
            | |-- httpd-info.conf
            | |-- httpd-languages.conf 語言支持
            | |-- httpd-manual.conf
            | |-- httpd-mpm.conf 服務器池管理,如apache模式配置 連接等
            | |-- httpd-multilang-errordoc.conf
            | |-- httpd-ssl.conf 支持SSL加密配置
            | |-- httpd-userdir.conf
            | |-- httpd-vhosts.conf 虛擬機配置文件
            |-- httpd.conf 主配置文件
            |-- magic
            |-- mime.types
            |-- original

             

            三、httpd.conf主配置文件常見配置


            ServerRoot "/usr/local/apache2.2.22" apache安裝目錄
            Listen 80 apache端口 
            <IfModule !mpm_netware_module>
            <IfModule !mpm_winnt_module>
            User daemon apache運行用戶
            Group daemon apache運行組
            </IfModule>
            </IfModule>
            ServerAdmin you@example.com 管理員郵箱
            DocumentRoot "/usr/local/apache2.2.22/htdocs" 站點目錄,注意最后不要加/線

            <Directory /> 根目錄權限
            Options FollowSymLinks 可以使用符號鏈接
            AllowOverride None
            Order deny,allow
            Deny from all
            </Directory>
            <Directory "/usr/local/apache2.2.22/htdocs"> 目錄權限 注意Indexes的作用是允許瀏覽目錄
            Options Indexes FollowSymLinks
            AllowOverride None 禁止用戶對目錄配置文件.htaccess修改,一般為none
            Order allow,deny
            Allow from all 
            </Directory>

            <IfModule dir_module>
            DirectoryIndex index.html 站點目錄首頁文件多個文件用空格隔開
            </IfModule>

            <FilesMatch "^\.ht"> 防止WEB用戶查看以.ht開頭的隱藏文件
            Order allow,deny
            Deny from all
            Satisfy All
            </FilesMatch>

            ErrorLog "logs/error_log" 錯誤日志
            LogLevel warn 警告級別
            <IfModule log_config_module>
            LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 復合日志格式
            LogFormat "%h %l %u %t \"%r\" %>s %b" common 常規日志格式
            <IfModule logio_module>
            LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio 復合日志格式
            </IfModule>
            CustomLog "logs/access_log" common 默認訪問日志格式
            </IfModule>

            <IfModule alias_module>
            ScriptAlias /cgi-bin/ "/usr/local/apache2.2.22/cgi-bin/" CGI別名配置
            </IfModule>
            <IfModule cgid_module>
            </IfModule>

            <Directory "/usr/local/apache2.2.22/cgi-bin"> CGI權限訪問路徑
            AllowOverride None
            Options None
            Order allow,deny
            Allow from all
            </Directory>
            DefaultType text/plain 定義不能確定MIME類型時候使用默認MIME類型,如果服務主要包含text或HTML ,text/plain是一個好選擇

            <IfModule mime_module>
            TypesConfig conf/mime.types
            AddType application/x-compress .Z 允許信息在傳輸中使用mosaic/x 2.1+解壓信息 但不是所有瀏覽器都支持
            AddType application/x-gzip .gz .tgz
            </IfModule>

            <IfModule ssl_module>
            SSLRandomSeed startup builtin
            SSLRandomSeed connect builtin
            </IfModule>

             

            四、虛擬主機http_vhost.conf配置文件

            NameVirtuaHost *:80 表示基于名稱的虛擬主機 *:80表示監聽本機所有IP的80端口上提供HTTP服務,*可以設置為具體IP
            <VirtualHost *:80>
            serveradmin 管理員郵箱
            servername 域名
            serveralias 別名 可以設置多個域名指向同一個站點
            errorlog 錯誤日志
            customlog 訪問日志
            </VirtualHost>


            虛擬主機的配置是局部優先原則,也就是http_vhost.conf配置了,那么就不會從主配置文件http.conf中讀取了


            五、修改Apache默認站點目錄

            1、文檔路徑更改 
            DocumentRoot "D:/Software/GreenSoft/Apache/htdocs" 
            改成
            DocumentRoot "E:/wwwroot/Apache"

            2、目錄更改
            <Directory "D:/Software/GreenSoft/Apache/htdocs">
            改成
            <Directory "E:/wwwroot/Apache">

             


            六、配置多站點方式

            方式一 拷貝配置文件,安裝新服務
            1、將httpd.conf復制一個新的文件httpdNew.conf
            2、將httpdNew.conf中的偵聽端口改成未使用的自定義的端口。 Listen:8111
            3、將httpdNew.conf中的網站目錄 DocumentRoot "原絕對路徑" 改成 DocumentRoot "新絕對路徑"
            4、將httpdNew.conf中的權限設置 <Directory "原絕對路徑" > 改成 <Directory "新絕對路徑" >
            5、安裝新服務。Dos下進到Apache安裝目錄下的Bin目錄,輸入命令 httpd.exe -k install -n "服務名" -f "X:\Apache安裝目錄根目錄\conf\httpdNew.conf"
            6、啟動新服務。輸入命令 httpd -k start


            方式二 添加新端口,新虛擬目錄的方式
            1、httpd.conf在之前偵聽端口的基礎上,加上新偵聽端口 Listen 8333.這樣Apache有多個偵聽端口
            2、httpd.conf中加入虛擬主機支持。加入指令:NameVirtualHost *
            3、找到<VirtualHost> definition注釋所在位置。加入指令:
            <VirtualHost localhost:8333>
            ServerName localhost
            DocumentRoot "虛擬站點新絕對路徑"
            </VirtualHost>

             

            方式三 建立虛擬主機方式
            1、修改虛擬主機配置文件 X:\Apache安裝目錄根目錄\conf\extra\httpd-vhosts.conf文件.加入配置:
            <VirtualHost 127.0.1.1:8222>
            DocumentRoot "虛擬站點新絕對路徑"
            ServerName url.com
            ErrorLog "虛擬站點新絕對路徑/error.log"
            </VirtualHost>

            2、修改主配置文件X:\Apache安裝目錄根目錄\conf\httpd.conf。去掉#Include conf/extra/httpd-vhosts.conf前面的#號
            3、修改主配置文件X:\Apache安裝目錄根目錄\conf\httpd.conf。加目錄權限:
            <Directory "虛擬站點新絕對路徑">
            Options Indexes FollowSymLinks MultiViews ExecCGI
            AllowOverride All
            Order allow,deny
            Allow from all
            </Directory>
            4、重啟對應的Apache服務

             

            七、配置Apache支持Url重寫

            1、加載重寫模塊。httpd.conf中找到#LoadModule rewrite_module modules/mod_rewrite.so,去掉#號
            2、httpd.conf中找到AllowOverride None,改成 AllowOverride All (All表示整臺服務器上都支持URL規則重寫)
            3、httpd.conf加入
            <Directory "站點絕對路徑">
            Options FollowSymLinks
            AllowOverride All
            </Directory>
            4、重啟Apache服務器并啟動服務
            5、在URL重寫的網站目錄下放一個.htaccess文件,文件名是.htaccess。如無此文件或此文件中沒定義任何關于URL重寫的規則,則重寫不會生效。
            6、在.htaccess中通過正則表達式映射需要偽靜態的頁面。URL正則表達式如下:
            RewriteEngine on
            RewriteRule index.html index.php
            RewriteRule (\d+).htmlinfo\.php\?infoid=1
            效果為:www.abc.cn/info/info.php?infoid=100 映射為 www.abc.cn/info/100.html


            可用于以下用途:
            1、http錯誤的自定義頁。格式 ErrorDocument 錯誤代碼 /目錄名/名.擴展名
            ErrorDocument 404 /errors/notfound.html
            ErrorDocument 401 "你權限訪問該頁面!"

            2、拒絕某IP的訪問
            order allow,deny 
            deny from 210.10.56.32 
            deny from 219.5.45. 
            deny from www.baidu.com
            allow from all

            3、保護.htaccess文檔
            4、Url轉向(文檔遷移,目錄更改,顯示友好易記的url)。格式:
            Redirect /舊目錄/舊文檔名 新文檔名
            Redirect 舊目錄 新目錄

            5、更改默認主頁
            DirectoryIndex 新的缺省名
            DirectoryIndex filename.html index.cgi index.pl default.htm

            6、反盜鏈
            RewriteEngine on 
            RewriteCond %{ HTTP_REFERER } !^RewriteCond [NC] 
            RewriteRule .(gif&line;jpg)- [F]  RewriteRule .(gif&line;jpg) http://www.mydomain.com/替代名 [R,L]

             

            八、配置反盜鏈
            1、參見 配置Apache支持Url重寫 節,配置Apache支持url重寫
            2、在站點的.htaccess文件中加入
            RewriteEngine on
            #允許空“HTTP_REFERER”的訪問
            RewriteCond %{HTTP_REFERER} !^[NC]RewriteCond http://nobing.cn/no.png [R,NC,L]

            說明:
            R 就是轉向的意思
            NC 指的是不區分大小寫
            L 的作用是指明本次轉向到此結束,后續的轉向不受先前判斷語句的影響

            多個擴展名用|分隔

             


            九、配置緩存

            LoadModule cache_module modules/mod_cache.so 
            LoadModule mem_cache_module modules/mod_mem_cache.so 
            <IfModule mod_cache.c> 
            #默認緩存有效期(秒)
            CacheDefaultExpire 3600 
            CacheMaxExpire 86400 
            CacheLastModifiedFactor 0.1 

            #禁止緩存某些特定的URL 
            CacheDisable /local_files 
            #使用特定的存儲類型緩存某些特定的URL 
            CacheEnable mem /manual 
            CacheEnable fd /images 
            CacheEnable disk / 
            <IfModule mod_mem_cache.c> 
            CacheEnable mem / 
            MCacheSize 8192 
            MCacheMaxObjectCount 10000 
            MCacheMinObjectSize 1 
            MCacheMaxObjectSize 51200 
            #MCacheRemovalAlgorithm LRU 
            </IfModule> 
            </IfModule>

             

            posted @ 2015-04-25 18:10 Enic 閱讀(158) | 評論 (0)編輯 收藏

            <iomapi>

            o<<setfill('0')<<"sssss"<<setw(4)<<a;
                 cerr<<o.str().c_str();
            posted @ 2015-04-08 16:35 Enic 閱讀(120) | 評論 (0)編輯 收藏

            1.定義一個類:
            local MyApp = class("MyApp", cc.mvc.AppBase)

            2.構造函數:
            ctor: 構造方法

            3.調用基類構造函數:
            MyApp.super.ctor(self)

            4.enterScene場景跳轉:
            1)函數原型在AppBase中: enterScene(sceneName, args, transitionType, time, move)
              函數可以接收四個參數,lua語法允許少寫參數,默認為nil
              sceneName是要跳轉的場景名
              args是傳給該場景的構造參數,args需要是一個table
              transitionType是場景切換的過度動畫類型
              time是過度時間
              more是過度效果附加參數
            2)實際調用會執行到如下代碼:
              // 在Lua中字符串連接操作符是兩個點 (`..´)
              // lua的require將會把.轉義成路徑分割符?轉義成模塊名
              local scenePackageName = self.packageRoot .. ".scenes." .. sceneName
              local sceneClass = require(scenePackageName)
              local scene = sceneClass.new(unpack(checktable(args)))
            3)可以通過enterScene將指定的參數傳遞到指定場景的構造函數
              self:endterScene("MainScene", {“你好”, “cocos”})
              MainScene:ctor(arg1, arg2)
             
            5.不一樣的類定義?
            local MainScene = class("MainScene", function()    
             return display.newScene("MainScene")
            end)
            這片代碼是定義一個名為MainScene的場景類,并且賦值給local變量
            1.display.newScene("MainScene")實際會調用底層代碼創建一個沒有名字的場景
            2.NodeEvent可以控制一組事件是否開啟監聽
            3.MainScene的最后一行是return MainScene,所以需要引用這個場景的時候值需要:
              local MainScene = require("app.scenes.MainScene");

             
             
             
            Q1.“類定義”的兩種寫法具體的意義和區別是什么?

            Q2.require會不會讓被require的腳本重新執行一次,如果是return了模塊中的lcoal變量,是不是每次返回的都將是同一個值?

            posted @ 2015-04-06 16:56 Enic 閱讀(313) | 評論 (1)編輯 收藏

            僅列出標題
            共22頁: First 2 3 4 5 6 7 8 9 10 Last 
            国产成人精品久久亚洲高清不卡| 亚洲国产精品嫩草影院久久| 国产精品一久久香蕉产线看| 久久国产精品久久久| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 色老头网站久久网| 2021久久精品免费观看| 午夜精品久久久久久久| 精品久久777| 久久中文字幕视频、最近更新| 亚洲伊人久久成综合人影院 | 久久精品9988| 欧美麻豆久久久久久中文| 欧美亚洲国产精品久久| 99久久国产热无码精品免费| 激情久久久久久久久久| 久久精品国产亚洲αv忘忧草 | 丁香狠狠色婷婷久久综合| 久久综合成人网| 国产亚洲精久久久久久无码| 精品水蜜桃久久久久久久| 久久香综合精品久久伊人| 国产毛片久久久久久国产毛片| 久久久久久精品免费免费自慰| 国产精品久久免费| 亚洲午夜精品久久久久久app| 大伊人青草狠狠久久| 日韩人妻无码一区二区三区久久99 | 国内精品久久久久久久亚洲| 国产aⅴ激情无码久久| 国产999精品久久久久久| 日日躁夜夜躁狠狠久久AV| 久久综合狠狠综合久久97色| 国产成人精品白浆久久69| 怡红院日本一道日本久久| 久久久久久久久久久久中文字幕 | 国产精品美女久久久久| 亚洲精品国产综合久久一线| 曰曰摸天天摸人人看久久久| 久久久久99精品成人片试看| 久久久久久免费视频|