- 影片連結
- http://www.youtube.com/watch?v=KhPGeiL6kB8
- 120*90px
- http://img.youtube.com/vi/KhPGeiL6kB8/default.jpg
- 480*360px
- http://img.youtube.com/vi/KhPGeiL6kB8/0.jpg
- 120*90px
- http://img.youtube.com/vi/KhPGeiL6kB8/1.jpg
- http://img.youtube.com/vi/KhPGeiL6kB8/2.jpg
- http://img.youtube.com/vi/KhPGeiL6kB8/3.jpg
2011-08-28
取得 YouTube 縮圖
取得 YouTube 的影片縮圖(thumbnail)
把下面的“KhPGeiL6kB8”換成 YouTube 的影片 ID 即可
Labels:
Google:YouTube
2011-05-16
用 PHP 處理 dBase III (*.dbf)
這個六、日幫朋友處理一個舊系統的 dBase III 資料庫,主要是將地址裡的台北市替換為新北市。
近九萬筆的資料,手動一筆筆的輸入肯定要花上不少時間。用程式取代的方式,實際執行的時間不過1分鐘,反而大部份的時間都花在連接 dBase III 資料庫上。
最近的 PHP 版本已不再內附 dBase 函式庫,而不知為何,試了前幾個 PHP 版本的 dBase 都沒有辨法正常運作,最後還是得自行編譯才解決這個問題。
Labels:
PHP
2011-05-15
在 Windows 上編譯 PHP (2011-05-16)
這次是為了 dBase 為編的。
- PHP 5.3.6
- Windows 7 32bit
- Visual C++ 2010 Express
- Microsoft Windows SDK for Windows 7 and .NET Framework 4
- GNU Bison 把裡面 share 目錄複製至 C:\php-sdk\deps 下
- re2c 需要 0.13.4 以上版本
- 執行開始程式集 Microsoft Windows SDK v7.1 下的 Windows SK 7.1 Command Prompt
- SetEnv /Release /x86 /win7
- 建立一個工作目錄:C:\php-sdk
- 下載原始碼後解壓至 C:\php-sdk\php-5.3.6 ,並跳至該目錄。
- 建立一個工作目錄:C:\php-sdk
- 到 PECL 下載 dBase 放至 C:\php-sdk\php-5.3.6\ext 裡
- cscript win32\build\buildconf.js
- cscript configure.js --enable-object-out-dir=.. --disable-all --enable-cli --enable-dbase
nmakenmake install安裝至 C:\php 需要編 cli 才行
Labels:
PHP
2011-05-11
HTML/XHTML Document Type 的選擇
最優先推薦的是:
XHTML 1.0 Strict
HTML 4.01 Strict
如果有框架頁的需求,可以利用嵌入的方式取代,如 PHP include()。
XHTML 1.0 Strict
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"如果是考量相容性為主的話,可以選擇:
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
HTML 4.01 Strict
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"不論選擇何者,撰寫符合嚴格標準的文件,可以在利用程式(不論是後端 PHP 或前端的 Javascript )處理文件時,省事許多。
"http://www.w3.org/TR/html4/strict.dtd">
如果有框架頁的需求,可以利用嵌入的方式取代,如 PHP include()。
Labels:
HTML
2011-05-07
使FILTER_VALIDATE_REGEXP
使用 FILTER_VALIDATE_REGEXP 時要注意,可能要在頭尾加上 ^ 和 $ 才會傳回預期的結果,例如:
將其改為
$filter = array(
'user-id-old' => array(
'filter' => FILTER_VALIDATE_REGEXP,
'options' => array('regexp' => '/[a-zA-Z][a-zA-Z0-9_]*/')
)
);
將其改為
'/^[a-zA-Z][a-zA-Z0-9_]*$/'
Labels:
PHP,
Regular Expression
2011-05-06
PHP 檔案上傳
在 php.ini 中與檔案上傳有相關的設定:
PHP會自動建立 $_FILES 對應每一個檔案欄位,以
PHP 處理檔案上傳順序,應該是有先檢查 HTTP Header 看是否超過 MAX_FILE_SIZE。
關於 <form> 和 <input> 的 accept 屬性,在其中填入逗點分隔的 MIME Media Types,可以幫助使用者篩選檔案類型,但沒有強制效果。目前已知 Google Chrome 和 Opera 有支援,IE 和 Firefox 沒有。
- file_uploads
- 是否允許檔案上傳
- upload_max_filesize
- 上傳時單一檔案大小上限
- upload_tmp_dir
- 上傳的檔案一定會先傳到這個暫存目錄,所以要注意移動檔案到不同磁碟分割區時效率。
- post_max_size
- 用 HTTP 的 POST 方法傳送表單資料量的上限(HTML <form method="POST">),檔案上傳的量也包含在其中
- max_file_uploads
- 同時可上傳的檔案數量上限
- PHP > 5.2.12
- max_input_time
- 允許程式分析外來資料($_POST $_GET)的時間上限
- max_execution_time
- 允許程式執行的時間上限
- 會與上一項設定一樣,影嚮大檔案及低頻寬時,參見 Connection handling
PHP會自動建立 $_FILES 對應每一個檔案欄位,以
<input name="userfile" type="file"/> 為例,其中將會有下列屬性:- $_FILES['userfile']['name']
- $_FILES['userfile']['type']
- $_FILES['userfile']['size']
- $_FILES['userfile']['tmp_name']
- $_FILES['userfile']['error']
- UPLOAD_ERR_OK
- UPLOAD_ERR_INI_SIZE
- 當要傳的檔案大於 upload_max_filesize 的值時。
- UPLOAD_ERR_FORM_SIZE
- 當要傳的檔案大於表單隱藏欄位 MAX_FILE_SIZE 的值時。
- UPLOAD_ERR_PARTIAL
- UPLOAD_ERR_NO_FILE
- UPLOAD_ERR_NO_TMP_DIR
- UPLOAD_ERR_CANT_WRITE
- UPLOAD_ERR_EXTENSION
PHP 處理檔案上傳順序,應該是有先檢查 HTTP Header 看是否超過 MAX_FILE_SIZE。
Content-Length: 104858220 Content-Disposition: form-data; name="MAX_FILE_SIZE" PHP Warning: POST Content-Length of 3148440 bytes exceeds the limit of 2097152 bytes in Unknown on line 0
關於 <form> 和 <input> 的 accept 屬性,在其中填入逗點分隔的 MIME Media Types,可以幫助使用者篩選檔案類型,但沒有強制效果。目前已知 Google Chrome 和 Opera 有支援,IE 和 Firefox 沒有。
Labels:
PHP
Portable SQL
如果想達成符合標準 ANSI SQL,並應用至可各種不同的 DBMS 的 SQL 查詢的話,只能實作非常基本的功能,並將大部份功能的交給應用層來處理。
下列資訊以 SQLite 、 MySQL 、 PostgreSQL 資料庫為主。
下列資訊以 SQLite 、 MySQL 、 PostgreSQL 資料庫為主。
- 共同支援的資料型別
- 文字
- CHAR
- VARCHAR 65536
- TEXT
- 數字
- INT
- BIGINT (非標準 MySQL、PostgreSQL 都有支援)
- 日期時間
- DATETIME 用文字取代,依 ISO 8601 分析為時間日期
- PostgreSQL 不支援
- TIMESTAMP 用整數 INT 或 BIGINT 取代,代表 1970-01-01T00:00:00 GMT 至今的秒數(或毫秒數)
- MySQL 的 DATETIME 與 TIMESTAMP 只精確到秒數
- 預設值 MySQL 、 SQLite 、 PostgreSQL 都使用 CURRENT_TIME、 CURRENT_DATE 、 CURRENT_TIMESTAMP 等常數
- AUTO INCREMENT
- MySQL 用關鍵字 AUTO_INCREMEN
- SQLite 用關鍵字 AUTOINCREMEN
- PostgreSQL 用 serial 資料型別
- 替代方式
- 整數 自行撰寫下一值的函式
- 文字 用 uniqid() 這類的函式
- 內建函式
- 將計算交給應用層處理
- 註解
- ANSI SQL 使用雙短線 (--CommentSomething)
- 字串註記
- ANSI SQL 使用雙引號 ("Keyword")
- 分頁
- 本篇討論的三個 DBMS 都支援非標準的 LIMIT 語法,參見 Select (SQL) - Wikipedia, the free encyclopedia
/* page size = 10, page offset = 20*/ SELECT * FROM table 20, 10; SELECT * FROM table LIMIT 10 OFFSET 20;
Labels:
SQL
Subscribe to:
Comments (Atom)