»¶ÓÄú·ÃÎÊÎÒ°®IT¼¼ÊõÍø£¬½ñÌìС±àΪÄã·ÖÏíµÄ±à³Ì¼¼ÊõÊÇ£º¡¾¡¶PHPÉè¼ÆÄ£Ê½½éÉÜ¡·µÚ¾ÅÕ ¹Û²âģʽ¡¿£¬ÏÂÃæÊÇÏêϸµÄ·ÖÏí£¡
¡¶PHPÉè¼ÆÄ£Ê½½éÉÜ¡·µÚ¾ÅÕ ¹Û²âģʽ
Ò»Ð©ÃæÏò¶ÔÏóµÄ±à³Ì·½Ê½£¬ÌṩÁËÒ»ÖÖ¹¹½¨¶ÔÏó¼ä¸´ÔÓÍøÂ绥Á¬µÄÄÜÁ¦¡£µ±¶ÔÏóÃÇÁ¬½ÓÔÚÒ»Æðʱ£¬ËüÃǾͿÉÒÔÏ໥Ìṩ·þÎñºÍÐÅÏ¢¡£
ͨ³£À´Ëµ£¬µ±Ä³¸ö¶ÔÏóµÄ״̬·¢Éú¸Ä±äʱ£¬ÄãÈÔÈ»ÐèÒª¶ÔÏóÖ®¼äÄÜ»¥ÏàͨÐÅ¡£µ«ÊdzöÓÚ¸÷ÖÖÔÒò£¬ÄãÒ²Ðí²¢²»Ô¸ÒâÒòΪ´úÂë»·¾³µÄ¸Ä±ä¶ø¶Ô´úÂë×ö´óµÄÐ޸ġ£Ò²Ðí£¬ÄãÖ»Ïë¸ù¾ÝÄãµÄ¾ßÌåÓ¦Óû·¾³¶ø¸Ä½øÍ¨ÐÅ´úÂë¡£»òÕߣ¬ÄãÖ»Ïë¼òµ¥µÄÖØÐ¹¹ÔìͨÐÅ´úÂëÀ´±ÜÃâÀàºÍÀàÖ®¼äµÄÏ໥ÒÀÀµÓëÏ໥´ÓÊô¡£
ÎÊÌâ
µ±Ò»¸ö¶ÔÏóµÄ״̬·¢Éú¸Ä±äʱ£¬ÄãÈçºÎ֪ͨÆäËû¶ÔÏó£¿ÊÇ·ñÐèÒªÒ»¸ö¶¯Ì¬·½°¸¨D¨DÒ»¸ö¾ÍÏñÔÊÐí½Å±¾µÄÖ´ÐÐÒ»Ñù£¬ÔÊÐí×ÔÓÉÁ¬½ÓµÄ·½°¸£¿
½â¾ö·½°¸
¹Û²âģʽÔÊÐíÒ»¸ö¶ÔÏó¹Ø×¢ÆäËû¶ÔÏóµÄ״̬£¬²¢ÇÒ£¬¹Û²âģʽ»¹Îª±»¹Û²âÕßÌṩÁËÒ»ÖÖ¹Û²â½á¹¹£¬»òÕß˵ÊÇÒ»¸öÖ÷ÌåºÍÒ»¸ö¿ÍÌå¡£Ö÷Ì壬Ҳ¾ÍÊDZ»¹Û²âÕߣ¬¿ÉÒÔÓÃÀ´ÁªÏµËùÓеĹ۲âËüµÄ¹Û²âÕß¡£¿ÍÌ壬Ҳ¾ÍÊǹ۲âÕߣ¬ÓÃÀ´½ÓÊÜÖ÷Ìå״̬µÄ¸Ä±ä
¹Û²â¾ÍÊÇÒ»¸ö¿É±»¹Û²âµÄÀࣨҲ¾ÍÊÇÖ÷Ì⣩ÓëÒ»¸ö»ò¶à¸ö¹Û²âËüµÄÀࣨҲ¾ÍÊÇ¿ÍÌ壩µÄÐ×÷¡£²»ÂÛʲôʱºò£¬µ±±»¹Û²â¶ÔÏóµÄ״̬±ä»¯Ê±£¬ËùÓÐ×¢²á¹ýµÄ¹Û²âÕß¶¼»áµÃµ½Í¨Öª¡£
¹Û²âģʽ½«±»¹Û²âÕߣ¨Ö÷Ì壩´Ó¹Û²âÕߣ¨¿ÍÌ壩ÖÖ·ÖÀë³öÀ´¡£ÕâÑù£¬Ã¿¸ö¹Û²âÕß¶¼¿ÉÒÔ¸ù¾ÝÖ÷ÌåµÄ±ä»¯·Ö±ð²ÉÈ¡¸÷×ԵIJÙ×÷¡££¨¹Û²âģʽºÍPublish/SubscribeģʽһÑù£¬Ò²ÊÇÒ»ÖÖÓÐЧÃèÊö¶ÔÏó¼äÏ໥×÷ÓõÄģʽ¡££©
¹Û²âģʽÁé»î¶øÇÒ¹¦ÄÜÇ¿´ó¡£¶ÔÓÚ±»¹Û²âÕßÀ´Ëµ£¬ÄÇЩ²éѯÄÄЩÀàÐèÒª×Ô¼ºµÄ״̬ÐÅÏ¢ºÍÿ´ÎʹÓÃÄÇЩ״̬ÐÅÏ¢µÄ¶îÍâ×ÊÔ´¿ªÏúÒѾ²»´æÔÚÁË¡£ÁíÍ⣬һ¸ö¹Û²âÕß¿ÉÒÔÔÚÈκκÏÊʵÄʱºò½øÐÐ×¢²áºÍÈ¡Ïû×¢²á¡£ÄãÒ²¿ÉÒÔ¶¨Òå¶à¸ö¾ßÌåµÄ¹Û²âÀ࣬ÒÔ±ãÔÚʵ¼ÊÓ¦ÓÃÖÐÖ´Ðв»Í¬µÄ²Ù×÷¡£
ʵÀý´úÂë
¾ÙÀýÀ´Ëµ£¬Äã¿ÉÒÔʹÓù۲âģʽΪÄãµÄPHP½Å±¾À´´´½¨Ò»¸ö¸üÁé»îµÄ¼Ç¼´íÎóµÄ¾ä±ú¡£ÒòΪ£¬Ä¬ÈϵĴíÎó¼Ç¼¾ä±úÒ²ÐíÖ»»áÔÚÆÁÄ»ÉÏÏÔʾһЩ³ö´íÐÅÏ¢£¬µ«ÊÇÔöÇ¿ºóµÄ¾ä±ú»¹¿ÉÒÔ½«³ö´íÐÅϢд½øÒ»¸öÈÕÖ¾ÎļþÖУ¬»ò½«³ö´íÐÅϢд½øÏµÍ³ÈÕÖ¾Ö®ÖУ¬»ò½«³ö´íÐÅϢͨ¹ýµç×ÓÓʼþ·¢ËͳöÈ¥£¬»òÀûÓÃÉùÒô±¨¸æ³ö´íÐÅÏ¢¡£ÄãÉõÖÁ»¹¿ÉÒÔ¹¹ÔìÒ»ÖÖÓм¶±ðµÄ±¨´í·½°¸£¬Ö»ÔÊÐíÏòÄÇЩÒѾΪ¾ßÌåµÄ³ö´íÐÅÏ¢×¢²á¹ýµÄ¹Û²âÕß±¨¸æ¡£´ÓÒ»°ãµÄ¾¯¸æÐÅÏ¢µ½ÏñÊý¾Ý¿âʧÁéÖ®ÀàµÄÑÏÖØ³ö´íÐÅÏ¢¶¼¿ÉÒÔ±¨¸æ¡£
ÏÂÃæ£¬ÎÒÃÇÓù۲âģʽÀ´ÎªPHP´´½¨Ò»ÏµÁеÄÀàÀ´ÊµÏÖ¸Õ²ÅËù˵µÄÄÇЩ¹¦ÄÜ¡£Ð½¨Ò»¸öÃûΪErrorHandlerµÄÀ࣬Ëü¾ÍÊǹ۲âģʽµÄÖ÷Ì壬Ҳ¾ÍÊDZ»¹Û²âÕß¡£ÔÙ½¨ÁíÍâÁ½¸öÃûΪFileErrorLoggerºÍEmailErrorLoggerµÄÀà,ËüÃÇÊǹ۲â¿ÍÌ壨¼´¹Û²âÕߣ©¡£FileErrorLoggerÀཫ³ö´íÐÅϢдÈëÈÕÖ¾Îļþ£¬EmailErrorLoggerÀàÀûÓõç×ÓÓʼþ·¢Ëͳö´íÐÅÏ¢¡£ÔÚUMLÖУ¬¿ÉÒÔ±íʾÈçÏ£º
ΪÁËʵÏÖÒÔ¹Û²âģʽΪ»ù´¡µÄ´íÎó¼Ç¼¾ä±ú£¬Ê×ÏÈÎÒÃÇ×¢Òâµ½×÷Ϊ¹Û²âÕßµÄFileErrorLoggerÀàºÍEmailErrorLoggerÀàʲôҲ²»ÄÜ×ö¡£ÄÇô£¬FileErrorLoggerÀàÊÇÈçºÎÏòÒ»¸öÎļþд³ö´íÐÅÏ¢£¬EmailErrorLoggerÀàÓÖÈçºÎ·¢Ë͵ç×ÓÓʼþµÄ£¿½ÓÏÂÀ´£¬ÈÃÎÒÀ´¿´¿´ÓÃÀ´ÊµÏÖ¹Û²âģʽµÄ¼¼Êõϸ½Ú£¬È»ºó£¬ÔÙ¼¯Öо«Á¦À´¿´¿´¸ÃģʽµÄÖ÷Ìå¨D¨DErrorHandlerµÄϸ½Ú¡£×îºó£¬ÔÙдһЩ´íÎó´¦Àíº¯ÊýÀ´µ÷ÓÃÕâ¸öErrorHandlerÀà¡£
×îºóÓÃÏÂÃæµÄÕâÒ»¶Î´úÂëÀ´±íʾ£º
| //PHP4 $eh=&getErrorHandlerInstance(); $eh->attach(newEmailErrorLogger(‘jsweat_php@yahoo.com’)); $eh->attach(newFileErrorLogger(fopen(‘error.log’,’w’))); set_error_handler(‘observer_error_handler’); //...later trigger_error(‘thisisanerror’); |
ErrorHandlerÀàÊÇÒ»ÖÖµ¥¼þģʽ£¨²Î¿¼µÚ4Õ£ºTheSingletonPattern£©¡£Ëü¿ÉÒÔͨ¹ýº¯ÊýAttach()À´×¢²á¸÷ÖÖ´íÎóÐÅÏ¢¹Û²âÕߣ¬¶øset_error_handler()º¯Êý¾ÍÊÇÒ»¸öÖ¸ÏòErrorHandlerÀàµÄº¯Êý¡£×îºó£¬µ±Ò»¸ö´íÎóÐÅÏ¢±»´¥·¢ºó£¬ËùÓеĹ۲âÕß¶¼»áµÃµ½Í¨Öª¡£
ΪÁËʹÕâ´Î¹Û²âµÄ²Ù×÷ÉúЧ£¬ÄãµÄ²âÊÔ±ØÐëÄÜÖ¤Ã÷ËùÓеÄÕâЩ²Ù×÷£¨½«´íÎóÐÅϢдÈëÈÕÖ¾£¬ÀûÓõç×ÓÓʼþ·¢ËÍ´íÎóÐÅÏ¢£©¶¼Äܵõ½Ö´ÐУ¬²¢ÇÒÄÜÕý³£¹¤×÷¡£¼ò¶øÑÔÖ®£¬ÈÃÎÒÃÇÀ´¿´¿´Ò»ÏµÁмòµ¥µÄ²âÊÔ¡££¨ºÍÕâ¸öʵÀýÓÐ¹ØµÄÆäËû¸ü¶àʵÀý£¬¿ÉÒÔÔÚ±¾Ê鸽´øµÄÔ´´úÂëÖÐÕÒµ½£©
ÕâÀïÓÐFileErrorLoggerÀàÁªºÏ²âÊÔµÄÒ»²¿·Ö´úÂ룺ËüÓÃÀ´²âÊÔµ±FileErrorloggerÀ౻ij¸ö¶ÔÏóʵÀý»¯Ê±£¬ÊÇ·ñ¾ßÓÐÏòÒ»¸öÎļþдÈÕÖ¾µÄÄÜÁ¦¡£
| classFileErrorLoggerTestCaseextendsUnitTestCase{ var$_fh; var$_test_file=‘test.log’; functionsetup(){ @unlink($this->_test_file); $this->_fh=fopen($this->_test_file,‘w’); } functionTestRequiresFileHandleToInstantiate(){} functionTestWrite(){ $content=‘test’.rand(10,100); $log=&newFileErrorLogger($this->_fh); $log->write($content); $file_contents=file_get_contents($this->_test_file); $this->assertWantedPattern(‘/’.$content.’$/’,$file_contents); } functionTestWriteIsTimeStamped(){} } |
ÔÚÕâ¸ö²âÊÔÖУ¬setup()º¯Êý´´½¨ÁËÒ»¸öÎļþÖ¸Õ룬ָÏòÒ»¸öÃûΪ“test.log”µÄÐÂÎļþ¡£²¢ÇÒ£¬½«¸ÃÖ¸Õë±£´æÔÚ±äÁ¿$_fhÖУ¬Õâ¸ö¿ÉдµÄÎļþÖ¸Õ뽫×÷Ϊһ¸ö±äÁ¿´«µÝ¸øFileErrorlogger¶ÔÏóµÄʵÀý£¬½øÐвâÊÔ¡£±äÁ¿$contentµÄÖµ½«´«µÝ¸øº¯Êýwrite()£¬²¢ÇÒ£¬ÔÚ´æ´¢½áÊøºó£¬»¹½«ÓÃÀ´±»¼ì²é$contentµÄÖµÊÇ·ñȷʵ±»ÕýȷдÈëtest.logÎļþÖС£
£¨Õâ¸ö²âÊÔÒªÇóPHP±ØÐë¾ßÓÐÏòÄǸöн¨µÄtest.logÖÐдÊý¾ÝµÄȨÏÞ¡££©
ÏÂÃæµÄһЩ´úÂëÒ²Ðí¿ÉÒÔ°ïÖúFileErrorLoggerÀàͨ¹ý²âÊÔ¡£
|
classFileErrorLogger{ Ò»¸öÀàËÆµÄ²âÊÔ´úÂë¿ÉÒÔʹEmailErrorLoggerÀàÉúЧ¡£ classEmailErrorLoggerTestCaseextendsUnitTestCase{ |
| classEmailErrorLogger{ var$_addr; var$_subject; functionEmailErrorLogger($addr, $subject=’ApplicationErrorMessage’){ $this->_addr=$addr; $this->_subject=$subject; } functionmail($msg){ mail($this->_addr ,$this->_subject ,date(‘Y-m-dH:i:s:‘).$msg); } } |
ÄãÊÇÔõÑùÈ·¶¨EmailErrorLoggerÀàÄÜÕæÕý·¢Ë͵ç×ÓÓʼþµÄÄØ£¿Êǵģ¬Äã¿ÉÒÔ´ò¿ªÄãµÄÊÕ¼þÏ䣬¿´¿´ÆäÖÐÊÇ·ñÓÐÐÂÓʼþ£¬¾ÍÖªµÀÁË¡£µ«ÊÇ£¬ÄǾͲ»ÊÇÒ»¸öÈ«×Ô¶¯µÄ²âÊÔÁË¡£»òÕß˵£¬Õâ¸ö²âÊÔ¾ÍÖ»ÊÇαģʽµÄÒ»¸ö²»´íµÄÌæ´ú·½°¸¡££¨ÖÁÓÚÈçºÎ´´½¨Ò»¸ö¿ØÖÆÓʼþµÄÀ࣬½«×÷Ϊһ¸öÁ·Ï°Áô¸ø¶ÁÕߵġ£ÏêϸÐÅÏ¢£¬Çë²Î¿¼µÚ6ÕÂTheMockObjectPattern»ò²Î¿¼FakeMailÏîÄ¿http://sf.net/projects/fakemail/.£©
ÓÐÁ˺ÏÊʶøÕýÈ·µÄ¹Û²âÕߣ¬ÎÒÃǾͿÉÒÔÔÚ¹Û²âģʽÏ£¬´Óº¯Êýattach()¿ªÊ¼¼ÌÐø²âÊÔErrorHandlerÀà¡£
| classObserver{ functionupdate(){ die(‘abstractmethod’); } } Mock::Generate(‘Observer’); classErrorHandlerTestCaseextendsUnitTestCase{ functionTestAttach(){ $eh=&newErrorHandler; $observer=&newMockObserver($this); $observer->expectOnce( ‘update’ ,array(‘*’));//array(&$eh) $eh->attach($observer); $eh->notify(); $observer->tally(); } functionTestDetach(){} } |
ÔÚÕâ´Î²âÊÔÖУ¬Ò»¸ö¼òµ¥µÄ¹Û²âÀà±»´´½¨³öÀ´£¬×÷ΪËùÓй۲âÕߵĽӿڡ£ÎªÁ˲âÊÔº¯Êýattach()£¬Ò»¸ö»ùÓÚÕâ¸ö¹Û²âÀàµÄαģʽ±»´´½¨³öÀ´£¬²¢ÇÒºÍErrorHandler²âÊÔʵÀý¹ØÁªÔÚÒ»Æð¡£È»ºó£¬µ±¹«¹²º¯Êýnotify()±»µ÷ÓÃʱ£¬Î±Ä£Ê½½«Ö¤Êµupdate()º¯ÊýÔø¾±»µ÷Óùý¡£
Çë×¢Òâ¸Õ²ÅÌá¼°µÄµÄÔÚÄ£Äâ¹Û²âÖÐËù´´½¨µÄº¯Êýarray(&$eh)ÖеIJÎÊý¡£ÔÚÀíÏë״̬ÖУ¬ÄǸö²âÊÔÓ¦¸Ã¿ÉÒÔͨ¹ýµÄ¡£È»¶ø£¬ÓÉÓÚPHPÓïÑÔµÄÏÞÖÆ£¬Õ⽫²úÉúÒ»¸öÖÂÃü´íÎ󣺓NestingLevelTooDeep¨D¨DÑ»·ÒÀÀµ£¿”¡£ÎªÁ˱ÜÃâ³öÏÖÄÇÑùµÄÎÊÌ⣬´úÂëÖбØÐëʹÓüòµ¥²âÊÔÏ“WildCard”¹¦ÄÜ£¬ÒÔ±ãÔÊÐíËùÓвÎÊý¶¼ÄÜÏñÔ¤ÆÚµÄÄÇÑù´«µÝ¡£
NestingLevelTooDeep
ÒòΪErrorHandlerÔÚÊý×é$_observerÖаüº¬Éæ¼°µ½Ä£Äâ¹Û²âµÄ²ÎÊý£¬±¾À´Ô¤ÆÚÊÇÒª½«Ëü´«µÝ¸øÄ£Äâ¹Û²âµÄ¡£ËùÒÔ£¬PHP²úÉúÒ»¸ö“NestingLevelTooDeep”´íÎó¡£¶øÑ»·ÒÀÀµ¾ÍÏñÒ»¸ö³õ¼¶µÄPHPÎÊÌ⣬ÉõÖÁ¿ÉÒÔÔÚÒ»¸ö¼òµ¥µÄPHP»·¾³Öз¢ÏÖËü¡££¨Çë²Î¿¼http://bugs.php.net/bug.php?id=31449.£©
ErrorHandler¿ªÊ¼Ó¦¸ÃÏñÏÂÃæÕâÑù¹¹Ô죺
| classErrorHandler{ var$_observers=array(); functionattach(&$observer){ $this->_observers[]=&$observer; } functionnotify(){ foreach(array_keys($this->_observers)as$key){ $observer=&$this->_observers[$key]; $observer->update($this); } } |
¸ù¾ÝÉÏÃæµÄ´úÂ룬Äã±ØÐëÔÚÿһ¸ö¾ßÌåµÄ¹Û²âÕßÖÐÌí¼ÓÒ»¸öupdate()º¯Êý¡£ÔÚÿ¸öʵÀýÖУ¬update()º¯ÊýÐèÒªÖªµÀÈçºÎ´Ó±»¹Û²âÕßErrorHandlerÀàÖлñÈ¡ÐÅÏ¢£¬½ø¶øÖ´ÐÐ×ÔÉíµÄÏàÓ¦¹¦ÄÜ¡£ÕâÀïÊÇÌí¼ÓµÄ´úÂë¡£
|
classFileErrorLogger{ |
ÁíÍ⣬Èç¹ûÄ㲻ϲ»¶¸Ãģʽ϶ÔÏóÓë¶ÔÏóÖ®¼äµÄÁ¬½Ó·½Ê½£¬Äã¿ÉÒÔ¸ü¸Äupdate()º¯ÊýÈÃËüÀ´·¢ËÍÒ»¸öÐÅÏ¢£¨ÀàËÆÓÚ±¾ÀýÖеĴíÎóÐÅÏ¢Êý×é»òÕß¼¸¸öÐÅÏ¢¶ÔÏó£©À´±ÜÃâÒýÓÃ×Ô¼º¡£
ÕâÀïÊÇÒ»¸öȫеÄErrorHandler£¬²»½ö×öÁË×îеÄÐ޸IJ¢ÇÒ»¹°üº¬detach()º¯Êý£º
|
classErrorHandler{ |
ÏÖÔÚ£¬»Øµ½±¾ÕµÄÔʼĿ±êÖУ¬ÈÃÎÒÃÇ¿´¿´ÈçºÎÔÚÒ»¸öÕæÕýµÄPHP½Å±¾ÖÐÓ¦ÓÃErrorHandler¡£ÎªÁËÔÚÒ»¸öPHPÓ¦ÓÃÖаüº¬¹Û²âÕߣ¬Äã±ØÐëʵÀý»¯ErrorHandlerÀ࣬²¢È·ÈϺ¯Êýset_error_handler()ʹÓÃÍêÈ«ÏàͬµÄ²ÎÊý¡£ÕâÌýÆðÀ´¾ÍÏñ×î½üµÄÒ»¸öÎÊÌ⣺µ¥¼þģʽ¡£
ÈÃÎÒÃÇ×÷Ò»¸öFactory()º¯Êý£¬ËüÊÇÒ»¸ö¼òµ¥µÄPHPº¯Êý£¬¿ÉÒÔ·µ»ØErrorHandlerµÄµ¥Ì¬ÊµÀý¡£
| function&getErrorHandlerInstance(){ static$instance=array(); if(!$instance)$instance[0]=&newErrorHandler(); return$instance[0]; } |
ÏÖÔÚ£¬ÈÃÎÒÃÇдһ¸ö´íÎó¼Ç¼¾ä±ú¹¦ÄÜÀ´»ñÈ¡µ¥Ì¬ErrorHandler£¬¸Ä±äËüµÄ״̬À´·´Ó³´íÎ󣬲¢ÇÒ֪ͨ“¹Û²âÕß”¡£
| functionobserver_error_handler( $errno,$errstr,$errfile,$errline,$errcontext){ $eh=&getErrorHandlerInstance(); $eh->setState(array( ‘number’=>$errno ,’msg’=>$errstr ,’file’=>$errfile ,’line’=>$errline ,’context’=>$errcontext )); } |
Ò²ÐíÄã»á×¢Òâµ½ÕâÀﲢûÓÐErrorHandler::notify()º¯Êý¡£ÎªÊ²Ã´ÄØ£¿ÒòΪErrorHandler²»ÂÛºÎʱ£¬Ö»Òª×´Ì¬Ò»¸Ä±ä¾Í»á×Ô¶¯·¢³ö֪ͨ¡£
|
classErrorHandler{ |
ÕâÖ֓ĬÈÏ֪ͨ”µÄ·½·¨£¬ÓÐÀûÓбס£µ«ÏȽøÖ®´¦ÔÚÓÚ¿Í»§¶Ë´úÂë²»ÐèÒª°üº¬Í¨ÖªµÄ´¥·¢´úÂë¡£
µ±È»£¬Èç¹ûÖ÷Ìå¶ÔÏóµÄ״̬Óкü¸´¦±ä»¯£¬ËùÓеı䶯¶¼¶ÔÓ¦²»Í¬µÄº¯Êý£¬Äã¾Í¿ÉÒÔÑ¡ÔñÈÿÍÌå´úÂëÇ¿ÖÆµ÷ÓÃnotify()º¯Êý¡£
×Ô´ÓÄãÄÜÕýȷʹÓÃÕâЩ¸¨Öú¹¤¾ßºó£¬Äã¸øErrorHandlerÌí¼ÓµÄÁíÒ»ÖÖÀàÐ͵ļǼ·½Ê½¾Í»á±äµÃÏ൱µÄÈÝÒ×£¿ÄãÏÖÔÚÖ»ÐèÒªÓµÓÐÏòϵͳÖÐдÈÕÖ¾µÄȨÏÞ¡£ÉÔ΢²éÒ»ÏÂPHPÊÖ²á(http://www.php.net/syslog)£¬Äã¾Í¿ÉÒÔÕÒµ½Ò»Ð©·Ç³£ÓÐÓõĺ¯ÊýÀ´½¨Á¢ÈÕ־ϵͳ¡£ÕâЩ¿ÉÒÔºÜÈÝÒ׵ı»·â×°µ½Ò»¸öеÄÀàÀÒÔ±ãºÍErrorHandlerÁªºÏʹÓá£
| classSyslogErrorLogger{ functionSyslogErrorLogger($msg){define_syslog_variables();openlog($msg,LOG_ODELAY,LOG_USER); } functionlog($msg){ syslog(LOG_WARNING,$msg); } functionupdate(&$error_handler){ $error=$error_handler->getState(); $this->log($error[‘msg’]); } } |
×¢£º´íÎóÈÕÖ¾µÄÓô¦
ÈÕÖ¾ÊǷdz£ÓÐÓõĨD¨DÈç¹ûÓÐÈËʹÓÃËüÃǵϰ¡£µ«ÊÇ£¬Èç¹ûûÓÐÈËʹÓÃÈÕÖ¾£¬ÄÇô¼Ç¼ÈÕÖ¾µÄ´úÂë¾ÍÊÇÒ»¶ÑÎÞÓõĴúÂë
Èç¹ûÏëÖªµÀ¸üÏêϸµÄÆÀ¼Û£¬Çë²é¿´
http://www.lastcraft.com/blog/index.php?p=4
½áÂÛ
¹Û²âģʽÊǷdz£ÓÐÓõġ£ÕâÀïµÄÀý×ÓÊÇÍêÈ«¾²Ì¬µÄ££¹Û²âÕß¿ÉÒÔÔڽű¾µÄ³õʼ»¯½×¶Î±»ÅäÖÃÇÒ±»Éú³É¡£ÒªÏëչʾ¹Û²âģʽµÄÁé»îÐÔ£¬×îºÃÊÇÔÚÒ»¸ö¸ü¼Ó¶¯Ì¬µÄÓ¦ÓÃÖУ£ÄãÐèÒª¸ù¾Ý½Å±¾ÖÐµÄÆäËûÊÂÇéÀ´Ìí¼Ó»òɾ³ý¹Û²âÕß¡£ÒÔ³£¼ûµÄ“Éú´æÊ±¼ä”»òÕß˵¸ÃPHP½Å±¾µÄÔÊÐíÖ´ÐÐʱ¼ä´ò¸ö±È·½£¬µ±Í¬Ò»¸ö½Å±¾ÔÚ²»Í¬µÄÇé¿öÏÂÖ´ÐÐʱ£¬¾Í¿ÉÒÔ¸ù¾Ý²»Í¬µÄ¹Û²âÕß·Ö±ðÅäÖ㬶ø²»ÐèÒª¶¯Ì¬¸Ä±äÒ»¸ö½Å±¾µÄÁ÷³Ì¡£Õâ¾ÍºÍͨ¹ýÑÓ³¤½Å±¾Ö´ÐÐʱ¼äµÄPHP-GTK¿âÓкܴó²»Í¬¡£
ÒÔÉÏËù·ÖÏíµÄÊǹØÓÚ¡¶PHPÉè¼ÆÄ£Ê½½éÉÜ¡·µÚ¾ÅÕ ¹Û²âģʽ£¬ÏÂÃæÊDZà¼ÎªÄãÍÆ¼öµÄÓмÛÖµµÄÓû§»¥¶¯£º
¡¡¡¡Ïà¹ØÎÊÌ⣺ÊÇËдµÄ24ÖÖÉè¼ÆÄ£Ê½½éÉÜÓë6´óÉè¼ÆÔÔò
¡¡¡¡´ð£º¡¶Design Patterns: Elements of Reusable Object-Oriented Software¡·£¨¼´ºóÊö¡¶Éè¼ÆÄ£Ê½¡·Ò»Ê飩£¬ÓÉ Erich Gamma¡¢Richard Helm¡¢Ralph Johnson ºÍ John Vlissides ºÏÖø£¨Addison-Wesley£¬1995£©¡£Õ⼸λ×÷Õß³£±»³ÆÎª"ËÄÈË×飨Gang of Four£©... >>Ïêϸ
¡¡¡¡Ïà¹ØÎÊÌ⣺PHPÓÐÄļ¸ÖÖÉè¼ÆÄ£Ê½£¿
¡¡¡¡´ð£ºPHP Ò»°ãÓÐÎåÖÖ³£¼ûµÄÉè¼ÆÄ£Ê½ ¹¤³§Ä£Ê½ ¹¤³§Ä£Ê½ ÊÇÒ»ÖÖÀ࣬Ëü¾ßÓÐΪÄú´´½¨¶ÔÏóµÄijЩ·½·¨¡£Äú¿ÉÒÔʹÓù¤³§Àà´´½¨¶ÔÏ󣬶ø²»Ö±½ÓʹÓà new¡£ÕâÑù£¬Èç¹ûÄúÏëÒª¸ü¸ÄËù´´½¨µÄ¶ÔÏóÀàÐÍ£¬Ö»Ðè¸ü¸Ä¸Ã¹¤³§¼´¿É¡£Ê¹Óøù¤³§µÄËùÓдúÂë»á×Ô¶¯¸ü¸Ä¡£ ÀýÈç... >>Ïêϸ
¡¡¡¡Ïà¹ØÎÊÌ⣺½éÉܼ¸¸öÄã±È½ÏÊìϤµÄÉè¼ÆÄ£Ê½,²¢¼òµ¥½éÉÜËüÃÇÊÇÈç...
¡¡¡¡´ð£ºÈçºÎ×öºÃ¼ô¼ÄØ£¿Ôڴ˱ÊÕß̸̸×Ô¼ºµÄ¹Ûµã£º¼ô¼¾ÍÊǽ«²»·ûºÏÖ÷ÌâµÄ²¿·Öɾ³ý²¢ÕâÀﻹ½éÉܼ¸¸ö¹ý¶ÉЧ¹ûµÄ²é¿´¼¼ÇÉ£ºÔÚTransitionsÃæ°åµÄ´°¿Ú¿ØÖƲ˵¥ÖУ¬Ñ¡Ôñ >>Ïêϸ
- ÆÀÂÛÁÐ±í£¨ÍøÓÑÆÀÂÛ½ö¹©ÍøÓѱí´ï¸öÈË¿´·¨£¬²¢²»±íÃ÷±¾Õ¾Í¬ÒâÆä¹Ûµã»ò֤ʵÆäÃèÊö£©
-
