異世界


2014年12月29日 星期一

Razor 語法與 MVC





Node.js 是 Ryan Dahl 基於 Google 的 V8 引擎於 2009 年釋出的一個 JavaScript 開發平台,主要聚焦於 Web 程式的開發,通常用被來寫網站。
但是,要開發網站就勢必要把「 HTML, CSS, Web」等等技術扯進來,這對那些單純想用 JavaScript 做為第一門語言的學習者而言,勢必是非常困擾的。有鑑於此,我們將撰寫一系列用 Node.js 學基礎 JavaScript 語法的文章,以便讓初學者也能透過 Node.js 這個環境學會 JavaScript 語言。

2014年12月22日 星期一

MySql 按日期進行統計

今天的紀錄筆數 : SELECT COUNT(*) FROM `log` WHERE (to_days(now()) - to_days(`time`) =0);

昨天的紀錄筆數 : SELECT COUNT(*) FROM `log` WHERE (to_days(now()) - to_days(`time`) =1);

前天的紀錄筆數 : SELECT COUNT(*) FROM `log` WHERE (to_days(now()) - to_days(`time`) =2);

  • 統計各CH 的 Event 次數,
  • ( SELECT `ChName`, 
        SUM( IF((to_days(now()) - to_days(`time`) =1),1 ,0 ) ) as yesterday, 
        SUM( IF((to_days(now()) - to_days(`time`) =2),1 ,0 ) ) as today_2, 
        SUM( IF((to_days(now()) - to_days(`time`) =3),1 ,0 ) ) as today_3,
        SUM( IF((to_days(now()) - to_days(`time`) =4),1 ,0 ) ) as today_4, 
        SUM( IF((to_days(now()) - to_days(`time`) =5),1 ,0 ) ) as today_5, 
        SUM( IF((to_days(now()) - to_days(`time`) =6),1 ,0 ) ) as today_6, 
        SUM( IF((to_days(now()) - to_days(`time`) =7),1 ,0 ) ) as today_7 
      FROM `log` WHERE `ChName`="CTV" and `AlarmOnOff`="1" )
    UNION
    ( SELECT `ChName`, 
        SUM( IF((to_days(now()) - to_days(`time`) =1),1 ,0 ) ) as yesterday, 
        SUM( IF((to_days(now()) - to_days(`time`) =2),1 ,0 ) ) as today_2, 
        SUM( IF((to_days(now()) - to_days(`time`) =3),1 ,0 ) ) as today_3,
        SUM( IF((to_days(now()) - to_days(`time`) =4),1 ,0 ) ) as today_4, 
        SUM( IF((to_days(now()) - to_days(`time`) =5),1 ,0 ) ) as today_5, 
        SUM( IF((to_days(now()) - to_days(`time`) =6),1 ,0 ) ) as today_6, 
        SUM( IF((to_days(now()) - to_days(`time`) =7),1 ,0 ) ) as today_7 
      FROM `log` WHERE `ChName`="PTS" and `AlarmOnOff`="1"  )
    UNION
    ( SELECT `ChName`, 
        SUM( IF((to_days(now()) - to_days(`time`) =1),1 ,0 ) ) as yesterday, 
        SUM( IF((to_days(now()) - to_days(`time`) =2),1 ,0 ) ) as today_2, 
        SUM( IF((to_days(now()) - to_days(`time`) =3),1 ,0 ) ) as today_3,
        SUM( IF((to_days(now()) - to_days(`time`) =4),1 ,0 ) ) as today_4, 
        SUM( IF((to_days(now()) - to_days(`time`) =5),1 ,0 ) ) as today_5, 
        SUM( IF((to_days(now()) - to_days(`time`) =6),1 ,0 ) ) as today_6, 
        SUM( IF((to_days(now()) - to_days(`time`) =7),1 ,0 ) ) as today_7 
      FROM `log` WHERE `ChName`="FTV" and `AlarmOnOff`="1" )
    UNION
    ( SELECT `ChName`, 
        SUM( IF((to_days(now()) - to_days(`time`) =1),1 ,0 ) ) as yesterday, 
        SUM( IF((to_days(now()) - to_days(`time`) =2),1 ,0 ) ) as today_2, 
        SUM( IF((to_days(now()) - to_days(`time`) =3),1 ,0 ) ) as today_3,
        SUM( IF((to_days(now()) - to_days(`time`) =4),1 ,0 ) ) as today_4, 
        SUM( IF((to_days(now()) - to_days(`time`) =5),1 ,0 ) ) as today_5, 
        SUM( IF((to_days(now()) - to_days(`time`) =6),1 ,0 ) ) as today_6, 
        SUM( IF((to_days(now()) - to_days(`time`) =7),1 ,0 ) ) as today_7 
      FROM `log` WHERE `ChName`="HiHd" and `AlarmOnOff`="1" )
    UNION
    ( SELECT `ChName`, 
        SUM( IF((to_days(now()) - to_days(`time`) =1),1 ,0 ) ) as yesterday, 
        SUM( IF((to_days(now()) - to_days(`time`) =2),1 ,0 ) ) as today_2, 
        SUM( IF((to_days(now()) - to_days(`time`) =3),1 ,0 ) ) as today_3,
        SUM( IF((to_days(now()) - to_days(`time`) =4),1 ,0 ) ) as today_4, 
        SUM( IF((to_days(now()) - to_days(`time`) =5),1 ,0 ) ) as today_5, 
        SUM( IF((to_days(now()) - to_days(`time`) =6),1 ,0 ) ) as today_6, 
        SUM( IF((to_days(now()) - to_days(`time`) =7),1 ,0 ) ) as today_7 
      FROM `log` WHERE `ChName`="TTV" and `AlarmOnOff`="1" )
    UNION
    ( SELECT `ChName`, 
        SUM( IF((to_days(now()) - to_days(`time`) =1),1 ,0 ) ) as yesterday, 
        SUM( IF((to_days(now()) - to_days(`time`) =2),1 ,0 ) ) as today_2, 
        SUM( IF((to_days(now()) - to_days(`time`) =3),1 ,0 ) ) as today_3,
        SUM( IF((to_days(now()) - to_days(`time`) =4),1 ,0 ) ) as today_4, 
        SUM( IF((to_days(now()) - to_days(`time`) =5),1 ,0 ) ) as today_5, 
        SUM( IF((to_days(now()) - to_days(`time`) =6),1 ,0 ) ) as today_6, 
        SUM( IF((to_days(now()) - to_days(`time`) =7),1 ,0 ) ) as today_7 
      FROM `log` WHERE `ChName`="CTS" and `AlarmOnOff`="1" )
     

 




image



function WeeklyReport(){
    $sql = "CALL `getLog7Day`();";
    $result = SqlCommand($sql);
    showTable($result);
  
    //釋放查詢結果所佔用的記憶體
    mysql_free_result($result);
}

 





以下資料聲明:

聲明:原創文章,轉載時必須以超鏈接的形式註明作者和原始出處。 作者:YoviSun
標題:MySql按日期進行統計(前一天、本週、某一天)
鏈接:http://www.yovisun.com/mysql-date-statistics.html




在mysql數據庫中,常常會遇到統計當天的內容。

例如,在user表中,日期字段為:log_time


  • 統計當天

sql語句為:



select  *  from user where date (log_time) = curdate();    

curdate() 表示當天日期

 


  • 統計前一天

如果表示前一天的數據,則不能使用curdate()-1,因為當日期為月初時,curdate()-1 日期就不是上一個月的月末日期。

例如:今天是6月1日,理論上curdate()-1為5月31日,但是curdate()-1得到不是5月31日,而是6月0日。那麼統計前一天的日期就不能使用curdate()-1了,mysql數據庫又有一個新方法統計前一天的數據。

統計前一天的日誌sql語句:

 

select  *  from  bean  where date (log_time) = date_sub(curdate(),interval 1  day );  

 

括號中為當天時間的前一天,如果統計前幾天就將括號中的'1'改成相應的天數。如果要算月或年,直接將day改為month或year即可

 


  • 統計本週

要求: 統計從昨天開始統計前7天的日誌包括昨天

select  *  from user where date (log_time) >= date_sub(curdate(),interval 7  day ) and date (log_time) <= date_sub(curdate(),interval 1  day )  


在網上找的使用week統計一周信息,只能統計到5天的信息,不符合要求,所以改用這種方法。

 


  • 統計某一天

統計歷史某一天的日誌,將date_sub(curdate(),interval 0 day)函數中的curdate()替換為某一天的日期
比如:要統計2012-05-25日期的信息


date_sub('2012-05-25',interval 0 day) 


關於 date_sub() 函數的例子:

今天是2013年5月20日。

date_sub('2012-05-25',interval 1 day)表示2012-05-24
date_sub('2012-05-25',interval 0 day)表示2012-05-25
date_sub('2012-05-25', interval -1 day)表示2012-05-26
date_sub('2012-05-31',interval -1 day)表示2012-06-01
date_sub(curdate(),interval 1 day)表示2013-05-19
date_sub( curdate(),interval -1 day)表示2013-05-21
date_sub(curdate(),interval 1 month)表示2013-04-20
date_sub(curdate(),interval -1 month)表示2013-06-20
date_sub( curdate(),interval 1 year)表示2012-05-20
date_sub(curdate(),interval -1 year)表示2014-05-20

2014年10月18日 星期六

Browser-開發人員工具

免費的網頁視覺編輯器:

 http://www.pagebreeze.com/

image

image

 

FireFox 瀏覽器進行 Debug

資料參考 : http://blog.yslifes.com/archives/699

當程式人員或網頁設計師在開發網頁時都會遇到一個問題,就是debug不易,不過自從Firefox大行其道後,這個問題被FireBug解決了,使用FireBug可以很方便的知道網頁那裡出了問題,可以直接修改CSS及html dom內容,還可以知道整個網頁到底傳輸了什麼內容及資訊等等,可說是十分好用,Microsoft在其後釋出的Internet Explorer及Google的Browser也都支援了類似的功能,不過更新的頻率並不像FireBug那麼高。

More…

 

IE8 : 可以由上方工具列的工具->開發者工具 來啟動(或F12)
Goolgle Chrome : 可以從右上角的文件按鈕->開發人員選項->開發人員工具 來啟動
FireFox FireBug :

image

image

image

2014年10月4日 星期六

XAMPP : 設定 phpMyAdmin 登入密碼

參考 : http://blog.xuite.net/kchin/technic/4847839

安裝好 XAMPP 進入 phpMyAdmin 發現root 沒有密碼保護,訊息如下:

設定檔內有關設定 (root登入及沒有密碼) 與預設的 MySQL 權限戶口相同。 MySQL 伺服器在這預設的設定運行的話會很容易被入侵,您應更改有關設定去防止安全漏洞。

1. 進入 "使用者" | "編輯權限" | "修改密碼"

PS: 三個使用者為 root 的都要修改

image

image

2. 修改 C:\xampp\phpMyAdmin\config.inc.php

2.1 auth_type = ‘http’

/* Authentication type and info */

$cfg['Servers'][$i]['auth_type'] = 'http';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = true;
$cfg['Lang'] = '';


登入畫面如下:



image







2.1 auth_type = ‘kookie’



/* Authentication type and info */

$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = true;
$cfg['Lang'] = '';



登入畫面如下(個人較喜好該方式)



image

PHP 開發環境

一年多前也不知怎地莫名奇妙地就把一個 PHP + Apache + MySql 的專案搞定了。生疏了那麼久,忽然接了個有 SNMP 的 PHP 網站專案,卻連 Debug 環境都沒建起來 傷心。哎! 沒作筆記的下場… 慘! 花了幾天爬文,終於建成…… 微笑

 

開發環境:

1. OS :  Win7 64bit

2. XAMPP : 開發環境,下載點: https://www.apachefriends.org/index.html

image

3. IDE : PHP Development Tools (PDT) ,下載點: https://www.eclipse.org/downloads/index-developer.php

image

安裝完成後的設定:

1. XAMPP :

image

image

http.ini 設定文件

     網站根目錄 : DocumentRoot "C:/xampp/htdocs"

     網站服務Port : Listen 80
    

php.ini 設定文件: ( 無法 debug 最重要的原因就在這裡) 設定完成,需存檔並重啟 Appche

[XDebug]
zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
xdebug.profiler_append = 0
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 0
xdebug.profiler_output_dir = "C:\xampp\tmp"
xdebug.profiler_output_name = "cachegrind.out.%t-%s"
xdebug.remote_enable = 0
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "127.0.0.1"
xdebug.trace_output_dir = "C:\xampp\tmp"

xdebug.auto_trace = On 
xdebug.show_exception_trace = On 
xdebug.remote_autostart = On 
xdebug.remote_enable = On 
xdebug.collect_vars = On 
xdebug.collect_return = On 
xdebug.collect_params = On 

2. Eclipse :

Workspace 一定要指向 網站根目錄

image

image

image

設定Debug

image

image

image

image

image

設定中斷點

image

進入 Debug

image

image

單步執行:

image

變數監視:

image

執行結果

image

image

phpinfo 顯示xdebug 設定狀態

image

//--------------------------------------------

以下是其他網友的文章

一、安裝xdebug模塊

1、www.xdebug.org下載相應版本php的模塊文件,保存下載後的文件到php的ext目錄,可以自己修改文件的名稱,如保存成:php_xdebug.dll

2、修改php.ini,增加如下信息

複製代碼代碼如下:

[Xdebug] 
zend_extension_ts="c:/webserver/php5/ext/php_xdebug.dll" 
xdebug.auto_trace=on 
xdebug.collect_params=on 
xdebug.collect_return=on 
xdebug.trace_output_dir="c:/webserver/php5 /debuginfo" 
xdebug.profiler_enable=on 
xdebug.profiler_output_dir="c:/webserver/php5/debuginfo"
 


參數解釋:


zend_extension_ts="c:/webserver/php5/ext/php_xdebug.dll" 
;加載xdebug模塊。這裡不能用extension=php_xdebug.dll的方式加載,必須要以zend的方式加載,否則安裝上後,phpinfo是顯示不出xdebug這個項的。
xdebug.auto_trace=on; 
;自動打開“監測函數調用過程”的功模。該功能可以在你指定的目錄中將函數調用的監測信息以文件的形式輸出。此配置項的默認值為off。
xdebug.collect_params=on; 
;打開收集“函數參數”的功能。將函數調用的參數值列入函數過程調用的監測信息中。此配置項的默認值為off。
xdebug.collect_return=on 
;打開收集“函數返回值”的功能。將函數的返回值列入函數過程調用的監測信息中。此配置項的默認值為off。
xdebug.trace_output_dir=”c:\Temp\xdebug” 
;設定函數調用監測信息的輸出文件的路徑。
xdebug.profiler_enable=on 
;打開效能監測器。
xdebug.profiler_output_dir=”c:\Temp\xdebug”; 
;設定效能監測信息輸出文件的路徑。


還有一些更為具體的參數設定,詳見:http://www.xdebug.org/docs-settings.php


3、重啟apache


這樣,在本地運行php的時候,會在所設定的目錄裡產生一些調試信息的文件:
函數調用過程監測信息文件的文件名 ​​格式:trace.××××××.xt。這個文件可以直接查看,裡麵包含了函數運行的時間,函數調用的參數值,返回值,所在的文件和位置等信息。內容格式還是相對直觀的。
效能監測文件的文件名 ​​格式:cachegrind.out.××××××××。
這個文件也可以直接查看,不過信息格式不易被人類所理解,
所以我們需要接下來的一個軟件。

二、安裝wincachegrind


由於效能監測文件:cachegrind.out.××××××××文件的內容不易被人類所理解,所以我們需要一個工具來讀取它。windows下就有一款這樣的軟件:wincachegrind。
1、到http://sourceforge.net/projects/wincachegrind/下載安裝wincachegrind
2、安裝運行後,點擊Tools->options,設定你的working folder(php.ini裡xdebug.profiler_output_dir的值)
這樣就可以比較直觀的查看效能監測文件的信息了。
詳細出處參考:http://www.jb51.net/article/24199.htm

 

 

說道PHP代碼調試,對於有經驗的PHPer,通過echo、print_r、var_dump函數,或PHP開發工具zend studio、editplus可解決大部分問題,但是對於PHP入門學習的童鞋來說有一定的難度,而且僅僅通過上述這些PHP調試手段,也很難準確發現PHP性能方面的問題,Xdebug是一個非常有用的PHP調試工具。

Xdebug作為PHP調試工具,提供了豐富的調試函數,也可將Xdebug安裝配置為zend studio、editplus調試PHP的第三方插件,通過開啟自動跟踪(auto_trace)和分析器功能,可以直觀的看到PHP源代碼的性能數據,以便優化PHP代碼。今天和大家分享PHP調試工具Xdebug安裝以及配置方面的基礎知識。

Xdebug在PHP中的安裝配置涉及php.ini配置文件的修改。

Xdebug安裝教程

下載Xdebug

  首先我們需要下載Xdebug,務必根據安裝的PHP版本,選擇合適的Xdebug版本,由於我是在Windows環境下安裝PHP的(請參考Windows 7下安裝配置PHP+Apache+Mysql環境教程 ),所以選擇下載Windows版本的Xdebug2.1.0(5.3 VC6 (32 bit)),下載下來的Xdebug文件為php_xdebug-2.1.0-5.3-vc6.dll,這是由於Xdebug是作為PHP模塊的形式被安裝配置與使用的。

Xdebug安裝提示:如果你不清楚安裝的PHP版本,你可以通過phpinfo()函數參看,同時Xdebug也提供了phpinfo輸出信息分析工具來幫助你分析如何安裝Xdebug,只要將phpinfo輸出信息複製提交即可,地址:Xdebug phpinfo信息分析地址

安裝Xdebug

  將下載的php_xdebug-2.1.0-5.3-vc6.dll複製到PHP安裝目錄下的ext目錄,此處為C:\php\ext,ext目錄專門用來存放PHP擴展庫DLL文件。

配置php.ini

  安裝Xdebug的最後一步就是配置php.ini文件,打開C:\php目錄下的php.ini配置文件,在末尾添加


   1: [Xdebug] 
   2: zend_extension="c:/php/ext/php_xdebug-2.1.0-5.3-vc6.dll"

最後重啟Apache服務器,通過phpinfo()函數,可以看到 PHP Xdebug配置信息

 

Xdebug配置提示:PHP5.3之前版本配置Xdebug時使用zend_extension_ts,對於PHP5.3以上版本,使用zend_extension。

XDEBUG NOT LOADED AS ZEND EXTENSION信息出現的原因

  出現XDEBUG NOT LOADED AS ZEND EXTENSION的原因是在安裝Xdebug時由於我們將Xdebug的DLL文件複製到了php\ext目錄下,容易以PHP擴展庫的形式加載Xdebug,在php.ini文件中添加了



   1: extension=php_xdebug-2.1.0-5.3-vc6.dll

這是錯誤的Xdebug安裝方式,必須以zend方式加載。

  至此PHP Xdebug的基礎安裝教程就結束了,下面我們需要對Xdebug作一些基礎配置。

Xdebug配置教程

  在安裝完Xdebug後,我們還需要對Xdebug做基礎配置,默認Xdebug的PHP函數自動跟踪(auto_trace)功能、分析器功能並沒有開啟,作為調試PHP代碼的需要,有些Xdebug配置選項最好開啟。

  在此之前我們需要創建Xdebug自動跟踪以及分析器輸出文件的存放目錄,務必確保目錄是可讀寫的,此處我在D:\PHPWeb\下創建了xdebug\trace以及xdebug\profiler目錄。

  最後在php.ini配置文件中完成Xdebug的配置工作,找到


   1: [Xdebug] 
   2: zend_extension="c:/php/ext/php_xdebug-2.1.0-5.3-vc6.dll"



在此之後添加Xdebug配置信息


   1: xdebug.auto_trace=1 
   2: xdebug.collect_params=1 
   3: xdebug.collect_return=1 
   4: xdebug.trace_output_dir="D:/PHPWeb/xdebug/trace" 
   5: xdebug.profiler_enable=1 
   6: xdebug.profiler_output_dir="D:/PHPWeb/xdebug/profiler"


最後保存php.ini,並重啟Aapche服務器即可。

Xdebug部分配置選項說明


   1: xdebug.auto_trace = 1
   2: ;否允許Xdebug跟踪函數調用,跟踪信息以文件形式存儲,默認值為0
   3: llect_params = 1
   4: ;否允許Xdebug跟踪函數參數,默認值為0
   5: ebug.collect_return = 1
   6: ;否允許Xdebug跟踪函數返回值,默認值為0
   7: ebug.profiler_enable = 1
   8: ;開xdebug的性能分析器,以文件形式存儲,這項配置是不能以ini_set()函數配置的,默認值為0
   9: ebug.profiler_output_dir
  10: ;能分析文件的存放位置,默認值為/tmp
  11: ebug.profiler_output_name
  12: ;能分析文件的命名規則,默認值為cachegrind.out.%p
  13: ebug.trace_output_dir
  14: ;數調用跟踪信息輸出文件目錄,默認值為/tmp
  15: ebug.trace_output_name
  16: ;函數調用跟踪信息輸出文件命名規則,默認為trace.%c

特別說明:Xdebug的trace和profiler的輸出文件名 ​​規則是可以更改的,比如將文件名 ​​命名為具體跟踪的PHP執行文件名 ​​、進程ID、隨機數等,非常方便,更多的Xdebug配置選項說明,請參考官網的Xdebug配置選項說明

  至此PHP調試工具Xdebug教程之Xdebug的安裝和配置就介紹完了,今後還將陸續介紹Xdebug如何在zend studio以及editplus中配置使用。