為了安全,也要兼顧編輯器切換管理 開發時不必管目錄名稱的事, 只是在部署的時候,才修改應用目錄和tp目錄的名字就行了.
為了提高tp的加載效率, 始終給app和tp以絕對路徑.就是以 realpath來定位
realpath返回的就是 一個絕對路徑, 在lx中是以 斜杠 根樹開始的. 參數可以是文件名, 也可以是目錄名稱. 返回結果: 如果是文件的話, 末尾會帶文件名, 如果是目錄的話,即使參數末尾帶斜杠, 也會刪除結尾的斜杠.
所以, 如果定義 THINK_PATH的話, 末尾要加上/ define('THINK_PATH', realpath('./Think').'/');
vim的f 和 t鍵的區別: f是正好調到指定的字符 上, 而t: to 是跳轉到指定字符的前面
0和^的區別: 0是第一個字符,不管是不是空白字符; ^是跳轉到第一個非空白字符. 跳到行的最后 就只有一個符號了$
在vim中, 除了對行的操作外, 將 操作命令 y,d,c,x 等和 跳轉條件 f, t等 相結合, 操作就不只是以行為單位了, 可以想到哪里就操作到哪里. 比如 dt)
...
vim中,字的含義, 一個英文單詞是一個字, 連續的多個漢字也只能算一個字. 文本的單位 有 字w, 行j k等這些, 既是文本 的單位, 同時 也是vim的跳轉命令.
所以, 像 操作命令 d, c,y, x 等 和 文本內容的單位比如 w j k 等符號之間的位置關系: 應該是: 操作命令+倍數+單位: 比如: d2w, d4j, y2w等等,
而不是: 倍數+單位+操作命令, 比如 : 4wd: 因為如前所說, 4w它是已經是一個命令了, 會向后跳轉4個字, 這時命令就已經執行了, 再到d的時候, 其實也就只有一個 單字符 d命令了, 這個肯定就不是原來的本意了.
非常重要的一個思維就是, html中的結構, 盡量不要用手工符號 比如 br等 去調整, 而是要用 "語義化的標簽" 去組織 內容. 比如p, span, div, 字體大小等方面,盡量不要用 font size之類的, 而是用 h1, h2...
chmod的格式: chmod [who] [+-=] [mode] 文件1 文件2...
一般來說, 文件/目錄的創建者, 自動成為所有者, 自動具有 "讀寫執行" 的權限
- chmod默認只是對當前文件或目錄(只一層目錄), 修改訪問mode. 要對目錄下的子目錄遞歸修改權限, 要使用 -R或 --recursive
- 可以一次性的 修改多個文件或目錄, 而不必使用多個相同的命令來修改,這樣更快 chmod +x file1 file2 dir1
- who可以是多個用戶的組合,比如: ug+x
- 可以在一個命令中設置多個不同用戶的權限, 中間用逗號分隔, 比如: g+w, o+x
- 訪問模式還可以用 除了加號減號外, 還可以用等號.
=u =g
, 等, 表示跟所有者, 組的權限相同.
[root@localhost html]# chmod o+w Honda Public -R
一般來說, 文件在本地(控制臺) 訪問, 讀寫, 編輯 都是以 owner的身份進行的, 只是在以 網絡/web/localhost的 方式 訪問時是以other(比如apache)身份訪問的.
要讓apche能夠訪問web根站點以下所有目錄(解決linux寫權限問題), 只是要求從 html目錄(localhost網站根) 開始->到其下 所有子目錄的訪問權限 能被apache所 "讀 + 寫"就行了, 不必要求從/var/www/ 的所有逐級目錄都被apache所讀寫.
- 父目錄下, 可以存放 和父目錄所有者不同的 其他所有者的文件或子目錄.
==================================
查看apache httpd載入了哪些模塊, 使用httpd -M
命令
查看到已經載入了 rewrite_module
然后在 html根目錄設置: AllowOverride All.
在tp的入口文件設置 define('DIR_SECURE_FILENAME', 'deny.htm')
以及deny內容的時候, 并不會自動 關閉apache的目錄列表顯示功能, 這個設置 只是在目錄下生成對應的deny.htm文件和寫入內容. 要禁止顯示目錄列表, 還的要自己在httpd.conf中設置:
兩種設置方法:
是設置
<IfModule dir_module> DirectoryIndex index.php index.html (在這里加入deny.htm文件, 當訪問目錄時,如果下面沒有其他index文件, 就會顯示這個deny.htm文件的內容 Access Denied)</IfModule>
這個對于 所有的目錄都適用 是最簡單有效的方法另一種方式就是設置 某個目錄的Options, 去掉Indexes索引(顯示功能): 不寫Indexes, 或者在前面加減號-Indexes.
<Directory '/var/www/html/Foo'>Options FollowSymLinks
</Directory>// 默認情況下, 上面的Foo下面的子目錄都不能索引列表顯示了, 比如: html/Foo/Bar/ . 但是如果你又顯式的 規定了其他子目錄的Indexes權限, 那么根據權限重寫, 覆蓋的原理, 下面的這個Common目錄又可以列表顯示了.<Directory '/var/www/html/Foo/Common'>Options Indexes FollowSymLinks</Directory>
注意 jk 等 "行" 的倍數和 w b等 "字"的倍數的不同, 因為 j k本身就要向上/下一行了,所以, 如果 2j, y2j 將會 復制 3行...
關于分頁類的使用
分頁類, 頁碼的顯示, 是一個包含鏈接的字符串, 這個頁碼字符串要用 $page->show()
方法生成并傳遞到模板
頁碼中的字符串, 可以用類的 setConfig方法去設置
分頁類的作用有兩個: 一個是生成(通常在顯示內容下方)的頁碼鏈接字符串; 二個是 根據limit決定 傳遞到模板的數據記錄范圍.
主要有三步: 初始化類new \Think\Page($count, 10);
寫分頁字符串; 寫limit連貫方法. 其中 limit的參數不能寫死了, 因為這個要被修改的.$limit=$page->firstRow . ',' . $page->listRow
這兩個page對象的兩個屬性.
page類用到了類似ajax的思想: 將單擊 產生的 頁碼號傳遞到php后臺的操作方法中, 操作方法根據頁號($_GET['page']), 從數據庫中查詢對應的內容, 在返回給前段的ajax程序, 最后顯示.
在 模板中 的函數 U方法 生成url地址時 中, 要使用 原生的php語法, 不能再用模板語法了, 比如數組只能使用中括號, 不能使用點號語法, 和模板輸出. 又比如: success和error方法的 跳轉 地址就是用 U方法生成的
通常在實際開發中, 除非特別需要, 都要盡量保持系統的默認值. 不必去費不必要的精力去改一些不必要的默認值.
mysql中, 無法刪除test數據庫?
- 如果是非事務型的還是MyISAM執行效率好,對于一般的項目,那還是MyISAM比較給力了。
- 摘抄自: http://www.wo81.com/tec/db/mysql/2014-05-12/214.html
別的數據庫的frm,myd,myi文件直接拷貝過來即可打開,數據也都有,這意味著只要這些文件在,數據就不會丟失。(其中frm是表的結構信息, myd是表的數據記錄信息, myi是表的索引信息. 因此, 要移植/導入數據庫, 就將這三個文件拷過來. )不過貌似只有frm文件的表拷貝過來是打不開的。
請不要在數據庫文件夾下面創建文件或者目錄。否則會 刪除數據庫失敗..empty文件時wampserver安裝時自動創建的,可能是為了讓用戶不要刪除test庫才創建的吧。
數據庫中的db.opt是記錄數據庫所用的 默認字符集和校驗規則.
在mysql的數據庫中, 只有一個單詞使用 下劃線,就是 auto_increment, 其他都不使用下劃線,比如 primary key.
單獨使用命令來設置主鍵: alter table foo_table add constraint pk_foo primary key(id, name);
url編碼?
根據rfc的規定, 在url中只能包含字母\數字,和一些特殊符號(包括 .-_'$?&*等,只有單引號沒有雙引號), 但是這些特殊符號只能是在網址中,不是說在 查詢字符串(傳參中), 如果這些特殊符號在query string中, 就要對它們進行編碼處理
rfc沒有對編碼做統一的規定, 而是讓瀏覽器自己來做決定,所以就比較混亂. 比如ie和ff就有很多不一樣的地方.
可以通過js腳本來對url做統一的處理, 即: 不讓瀏覽器有插手的機會, 讓js來處理(漢字和特殊字符). 主要包括兩個函數:
encodeURI() 和 decodeURI()
使用模板包含include需要注意的事項?
被包含的模板文件本身, 并不會自動調用對應的控制器方法, 也就是說, 被包含的其他模板文件中的變量賦值需要在當前操作中完成. 比如: 在foo1.html中包含foo2.html
<include file="action/foo2" />
如果要在foo2.html中輸出變量 {$bar}, 那么這個$bar變量需要在foo1對應的操作中去完成。模板包含的時候, 還可以傳遞變量, 在被包含的模板中使用 傳參變量時, 用 [title] 中括號的方式。 是不是只能傳遞title和keywords參數,其他任意參數都可以嗎?
由于模板解析的特點, 總是從入口模板開始解析的, 如果被包含的 外部模板有所更新 , 這種更新并不會自動表現在入口模板中, 入口模板引擎并不會重新編譯, 除非你在調試模式下, 或者緩存已經過期. 所以, 如果在部署模式下, 修改了被包含的 外部模板文件后, 要把模塊的緩存目錄清空, 否則改變不會生效.
雜項
trim不但能過濾(去掉 空白字符), 而且還可以在 第二個參數 $charlist 中指定要 過濾 / 去除掉的 其他字符列表. 注意這些字符列表 表示的字符 只能是 兩邊 靠邊的字符或字符組合, 對中間的字符沒有影響,比如: echo trim('hello world', 'hld'
將輸出 "ello wor" 中間的ll不會被刪除. 這個用法在刪除字符串兩端的{} 符號比較有效
guid和uuid的區別?
uuid是osf "軟件基金會"統一規定的標準,而guid是ms對uuid的一種實現
uuid是用 4個橫線對 32個字節(32個16進制字符)的分隔得到的 36個字節.
php的date函數的特殊用法?
date是一種時間格式函數, 本身并沒有時間. 是把時間戳格式化為更易讀的日期和時間.
通常date函數, 需要傳入 一個時間戳 作為第二個參數 比如
date('ymd', $time);
. 但是它 的格式是:date('日期時間格式', [時間戳]);
所以, 這個時間戳是一個 可選參數, 是可以省略的. 如果省略,就是代表的 當前時刻的時間戳. 而在很多時候, 我們處理的就是 當前時刻的時間戳. 所以, 可以看到 date('Y-m-d')的用法.更重要的是, 日期格式, 不一定是我們常用的 y-m-d, 有的時候, 我們只需要 當前的年份, 月份,或日期中的一個數字, 這就要使用 date的單字符, 單字母(沒有數字)格式, 比如: date('Y'),date(m,和d都是兩位數字,比如05 月份, 08日期. 表示星期, date('w')返回星期幾的數, 而date('l') (注意是L的小寫, 不是數字1)則返回星期的英文單詞比如Wednesday.
再比如 自動版權年份:
@ 2010-<?php echo date('Y') ?>
===========================================
編寫Page類進行分頁的實例:
mysql中的信息顯示用show命令, 后面 要跟 關鍵字 , 不能跟函數, 如果要用函數, 需要用 select語句
- select version();
- show engines; 可以看出默認的是innoDB引擎
- show errors;
- show warnings; 顯示最后一條執行的sql語句的錯誤或警告, 注意都要用復數.
顯示錯誤和警告? - show variables;
- show status;
關于null和空字符串的區別? 這個是在php和mysql中多次遇到的問題了: null就是沒有, 就是根本不存在 null=not existing, 比如主鍵用
auto_increment的int, 你不想輸入, 那么就用null. 但是你不能用 '', 因為這兩個數據類型都不一樣. 空''字符串是string, 用來給int類型
的主鍵賦值, 肯定會產生warning.
這個警告是發生在 mysql 5.X以上的版本.
null可以給任何數據類型的 字段, 比如 int, 比如 char... ,任何類型的 變量賦值! 比如表示一個字段不為空, 就是 not null.
可以同時插入多個記錄, 但是在多個values 之間 要用 逗號進行分割!
生成xhtml類型的網頁, emmet使用的縮略詞是 html:xt, 注意是 xt, 表示 是html向xml過渡的類型, 即xml -trans, 所以是xt, 但不是xh, 要生成html5的網頁, 可以寫 html:5, 或者直接寫一個! 都可以.
表格本身也有一些有用的/ 直接的 屬性, 包括: 顏色 bgcolor, bordercolor, cellspacing, cellpadding (單元格的外邊距和內邊距).
page類的show方法, 返回的是, 分頁字符串:
return "<div>{$page_str}</div>
public function page(){header('Content-type: text/html; charset=utf8');$count= M('user')->count(); $rowPerPage=4;$page = new \Think\Page($count, $rowPerPage);$limit= $page->firstRow .','.$page->listRows; $data = M('user') -> order('id desc') -> limit($limit) ->select();$page->setConfig('first', 'fff');$page->setConfig('last', 'eeee');$page->setConfig('theme', '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% , <font color="red"> %HEADER%, 共 %TOTAL_PAGE%頁 </font>');$p = $page->show();$this->assign('data', $data);$this->assign('page', $p);$this->display();}'DB_TYPE' => 'mysql', // 數據庫類型'DB_HOST' => '127.0.0.1', // 服務器地址'DB_NAME' => 'test', // 數據庫名'DB_USER' => 'root', // 用戶名'DB_PWD' => '', // 密碼'DB_PORT' => '3306', // 端口'DB_PREFIX' => 'think_', // 數據庫表前綴'DB_PARAMS' => array(), // 數據庫連接參數 'DB_DEBUG' => TRUE, // 數據庫調試模式 開啟后可以記錄SQL日志'DB_FIELDS_CACHE' => true, // 啟用字段緩存'DB_CHARSET' => 'utf8', // 數據庫編碼默認采用utf8'DB_DEPLOY_TYPE' => 0, // 數據庫部署方式:0 集中式(單一服務器),1 分布式(主從服務器)'DB_RW_SEPARATE' => false, // 數據庫讀寫是否分離 主從式有效'DB_MASTER_NUM' => 1, // 讀寫分離后 主服務器數量'DB_SLAVE_NO' => '', // 指定從服務器序號{__NOLAYOUT__}<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /><title>page分頁</title>
</head>
<body><table width="80%" border="1" cellspacing="0" bgcolor="#eff" align="center"><tr><th>id</th><th>username</th><th>age</th><th>addr</th></tr><foreach name="data" item="u"><tr><td>{$u.id}</td><td>{$u.username}</td><td>{$u['age']}</td><td>{$u.addr}</td></tr></foreach></table>{$page}</body>
</html>