隨記yii

系統管理
1、文件同步備份
a、磁盤分配情況
b、同步方案
c、巨大數量的文件複製
Linux(CentOS)掛載移動硬盤,實現文件拷貝、備份
d、linux系統掛載移動硬盤,用來備份數據
2、cron
2-1、遠程執行程序(通過腳本)
3、防火牆,(命令行配置)
4、端口更改
ssh
ftp
桌面
5、遠程桌面
6、磁盤管理 LVM
7、網絡配置

1、mysql安裝、備份,命令行操作
select * from jj_index_updateloglist where u_for_id=110916\G;
2、apache http (Web站點,其他域名(用以分流))
以apache作爲入口,兩個後端apache作爲分流作用,並且使用其他域名(考濾分流)
2-1、apache的一些配置(對web的一些管理)
3、php及插件安裝
4、tomcat
5、ftp服務器
6、memcahe及 memcacheDB


1、下載準備各種軟件

32位
64位

centos
apache-https
tomcat
java
rsync
php
mysql


1、snmpd
2、linux watchdog
使用watchdog 構建高可用性的 Linux 系統及應用
本文首先介紹 Linux 內核對硬件、軟件 watchdog 的支持;然後通過一個開源項目watchdog daemon介紹如何在一個系統監控應用中加入 watchdog 的使用以提高系統的可用性


1、
pdf文件轉html


2、mapreduce 的研究


1、hadoop 啓動腳本的研究,是一種比較好的部署與遠程控操控機器的方法,可以借鑑


2011-12-08
plupload 上傳組件的使用,主頁:http://www.plupload.com/example_jquery_ui.php
0、一開始,最好只限制“增加文件”按鈕
1、增加第一文件後,按妞改寫成“續繼增加文件” ok
2、文件個數限制 ok
3、文件名重複限制 這個可能要看swf代碼了
4、點開始上傳時,觸發一個事件,調出填寫文件的詳細信息
5、“確定”按鈕,post填寫的信息到服務端 <input type="hidden" id="uploader_count" name="uploader_count" value="?">
6、點擊上傳後,如果是大文件,沒有任何提示,需加上提示
7、點擊上傳後,即要觸發填寫上傳的文件詳細信息輸入框顯示,需要改動jquery.plupload.queue.js 即每加入一文件都需要及生成一個input(在一個新的form中)
在全部文件上傳完畢後,“提交”按鈕可用
並且具體提交時需檢證文件上傳狀態,假某個文件沒有上傳成功,則提交時需刪該元素(即用js的方式刪除該input標記)

8、文件上傳成功後返回的id在哪裏能反映
9、返回來的id怎樣與原來生成的input對應呢
response返回來的值希望包括原始文件名,數據庫id號,這樣前端通過返回來的文件名與input匹配,提交時,根據id再進行一次更新就ok了

10、上傳文件時,最好能把用戶的id傳到服務器端,這樣用戶上傳的文檔在沒有提交時而出現問題,能得到保存到 。可以加上參數,與文件一起上傳到服務端
這樣就能很好的滿足要求了
11、解決中文問題,做如下處理
//$fileName = preg_replace('/[^\w\._]+/', '', $fileName);
$fileName= mb_convert_encoding($fileName, "GBK", "UTF-8");

12、上傳等待提示,因爲大文件需要較長時間

13、分類的處理

14、創建文件夾成功時,返回的代碼,用其他方式處理
<script type="text/javascript">
alert("創建成功!");
document.getElementById("addfloder0").value = "";
on_addFolder(false,'0');
</script>

<script type="text/javascript">
document.getElementById("addfloderSpan0").style.display = "none";

var lengthArray = document.getElementsByName("addToFolderSelect");
if(lengthArray != null && lengthArray.length>0){
for(var j = 0 ; j < lengthArray.length; j++){
var iLength = lengthArray[j].options.length ;
var option = lengthArray[j];

if (newFolderName == "2323"){
option[iLength] = new Option("2323",137340);
if(option.id == 'addToFolderSelect0'){
option.value=137340;
selectflot("0");
}
}

if (newFolderName == "dddd"){
option[iLength] = new Option("dddd",113511);
if(option.id == 'addToFolderSelect0'){
option.value=113511;
selectflot("0");
}
}

if (newFolderName == "eeeeee"){
option[iLength] = new Option("eeeeee",136752);
if(option.id == 'addToFolderSelect0'){
option.value=136752;
selectflot("0");
}
}

}
}
</script>


還要解決的問題
15、當刪除文件時,需要把編輯的div去除 ok
16、提交時,判斷文件還沒有上傳完成,如果沒有一個文件上傳成功,則不允許提交 ok

17、修改上傳失敗與成功的狀態到具體(即與顯示文件那裏一致)
18、對於上傳失敗的文件,也需要把編輯的div去除
19、界面的進一步調整,最好能把上傳

20、當選擇文件時,一次性選擇多個文件時,還會選到重複的文件(需要改進) ok
21、展開與收縮時,實際文件名的處理 ok
22、服務端對多input name='name' 的處理 ok
23、上傳數量控制,vip會員可以一次性上傳5-10個,普通會員只能上傳2個 ok
24、提示上傳成功的,上傳失敗的(接受了id的表示上傳成功,否則沒有id的表示上傳失敗)
25、文件在服務器上傳成功後,傳回json格式的數據,檢查code值,然後重改plupload jquery.plupload.queue.js中的div部分
其回返回廖li 的id,需據此修改狀態


26、上傳等待提示,因爲大文件需要較長時間(做適當提示)


讀寫分離作爲重點

1、mysql配置最大內存
2、php配置最大內存
3、apache配置最大內存
4、yii處理多個從數據庫
5、yii與apc apc(可緩存代碼)
6、Redis
a\Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類keyvalue存儲的不足,在部分場合可以對關係數據庫起到很 ...
相對於Memcache的區別
b\支持的數據類型多樣化。支持字符串、列表、集合、有序集合、Hash數組這幾種數據類型。

c\可以靈活的指定key存儲在哪臺服務器上
7、rest webservice 的使用
9、Lighttpd+Squid+Apache搭建高效率Web服務器
靜態文件的處理
探索出一個,能根據訪問時生成靜態頁面,而且能夠處理比較大的請求數據的架構

10、靜態頁面與廣告
11、fastdfs_module_apache與c的lur(緩存系統)
12、nginx 的使用

13、靜態面,nginx,apache,fastdfs_module_nginx,fastdfs 的使用
安裝nginx 及寫一個nginx module
fastdfs的最新版安裝瞭解

apache和nginx擴展模塊在下載文件時支持斷線續傳

反向代理 負載均衡 動靜分離

負載均衡雙機高可用

靜態頁面使用rewrite重定向 ,解決yii靜態頁面的處理問題(能否訪問時生成靜態頁面),即如下流程

1\訪問域名網址 ,是否存在靜態頁,不存(或不命中)則訪問後端apache yii應用
2\生成靜態頁
3\如果重新訪問yii應用,則nginx會檢測如果存在靜態頁,則直接訪問靜態頁


14、分兩步以更多步
a\用nginx apache搭起基本應用
b\加入fastdfs 與nginx集羣

8、c語言加密算法


2011-12-14
1、php的頁面靜態化策略
http://www.google.com.hk/search?q=php+yii+%E9%9D%99%E6%80%81%E9%A1%B5%E9%9D%A2&hl=zh-CN&newwindow=1&safe=strict&biw=1069&bih=685&prmd=imvns&tbs=clir:1,clirtl:en,clirt:en+php+yii+static+page&sa=X&ei=Ol_oTte8C4KZiQf059TKCA&ved=0CHEQ_wEwCg
a、http://translate.google.com.hk/translate?hl=zh-CN&langpair=en%7Czh-CN&u=http://www.yiiframework.com/wiki/22/how-to-display-static-pages-in-yii/
2、php性能較好的前端框架


網站建設中利用PHP自動執行任務代碼自動生成靜態頁面
網站建設中利用PHP自動執行任務代碼是很有用的,如讓程序定期自動生成靜態頁面等。如果您是PHP程序員,學習Javascript、Ajax、DIV+CSS、這些都是很有必要的。
1.在某個固定的時間執行的PHP代碼:
//計劃執行時間
if($job=="cron"){
check_method();
//查詢數據庫的下一個時間是否小於現在的時間
if($maxrecord["deltemptime"]<$nowtime["timestamp"]){
$crondb = array();
//day爲0爲每日 week周 minute時間斷 hour什麼時侯開始
$rt["cron"] = array("day"=>"0","week"=>$config["cron_week"],"m"=>$config["cron_minute"],"hour"=>$config["cron_hour"]);
$crondb[] = $rt;
}
foreach ($crondb AS $key => $cron_val){
//設置了允許分鐘段
if (!empty($config["cron_minute"])){
$m = explode(" ", $config["cron_minute"]);
$m_now = intval(local_date("i",$nowtime["timestamp"]));
if (!in_array($m_now, $m)) {//不包含此分鐘的跳出
continue;
}
}
$next_time = get_next_time($cron_val["cron"]);
$DB->query("UPDATE `maxrec` SET `deltemptime`={$next_time}");
}
exit;
}
>
2.隔時生成首頁的PHP代碼:
set_time_limit(0);
$baseCmsUrl = "http://www.kz27.com";//你網站的根網址,結束不要加 /
$dmPageName = "index.php";//動態主頁的名稱
$stPageName = "index.html";//生成靜態主頁的名稱
$mkTime = 3600;//你希望多長時間更新一次,單位是秒
//下面是執行的代碼
$tureStFile = dirname(__FILE__)."/".$stPageName;
$ftime = @filemtime($tureStFile);
if(!file_exists($tureStFile) || ($ftime < time()-$mkTime))
{
$body = file_get_contents($baseCmsUrl."/".$dmPageName);
$fp = fopen($tureStFile, "w");
fwrite($fp, $body);
fclose($fp);
}
>
將上面代碼保存爲task.php
在經常訪問的頁面調用:
深圳英文外貿網站建設應該避免的5個誤區
如何讓客戶信任企業的網站
到底什麼是網絡營銷,企業和個人如何做網絡營銷
深圳網站優化之圖片ALT標籤的應用
深圳網站設計:如何做到簡約而不簡單
專業網站建設必不可少的重網站環節-網站策劃
3.PHP自動執行任務,關掉頁面或瀏覽器也會自動定時執行:
ignore_user_abort();


怎樣在Yii Framework中顯示靜態頁
在web應用中,我們經產更需要顯示靜態頁,如“關於我們”等,這些文件通常是靜態頁,通常有如下幾種處理方法:

1.把獨立的html文件存在Web服務器能直接訪問的目錄下。這種方案的缺點是很難維護網頁佈局以及和動態頁的連接.

2.可以自己寫action賴渲染view文件處理每一個靜態頁,這樣解決了layout問題,但是爲每一個頁寫一個單獨的action,特別是這個action僅僅處理一個靜態文本,非常麻煩。

3.使用Yii內置的一個CViewAction來服務所有這些頁。

下面就介紹第三種方法:
首先,建立以個controller類如DocController,覆蓋actions方法
public function actions()
{
return array(
'page'=>array(
'class'=>'CViewAction',
),
);
}

根據官方指南,以上代碼聲明瞭一個外部action類CViewAction.

然後,生成目錄protected/views/site/pages.

最後,在該目錄下存儲一個文件叫about.php,內容爲:"about this site" ,此時這些頁將使用應用的默認佈局文件。因此該文件僅僅描述本頁相關內容。

http://www.yourhost.com/index.php?r=doc/page&view=about

如果有很多靜態頁,可以將其放在子目錄裏,假設有一個有靜態頁在protected/views/site/pages/help/contact.php:

http://www.yourhost.com/index.php?r=site/page&view=help.contact

當然,我們也可以定製CViewAction的行爲,察看API文檔瞭解更多有關於CViewAction


二、配置rsync服務
  配置一個簡單的rsync服務並不複雜,你需要修改或建立一些配置文件。
  1.rsyncd.conf
  # vi /etc/rsyncd.motd
  rsyncd.con是rsync服務的主要配置文件,它控制rsync服務的各種屬性,下面給出一個
rsyncd.conf文件的例子:
  #先定義整體變量
  secrets file = /etc/rsyncd.secrets
  motd file = /etc/rsyncd.motd
  read only = yes
  list = yes
  uid = nobody
  gid = nobody
  hosts allow = 192.168.100.90 #哪些電腦可以訪問rsync服務
  hosts deny = 192.168.100.0/24 #哪些電腦不可以訪問rsync服務
  max connections = 2
  log file = /var/log/rsyncd.log
  pid file = /var/run/rsyncd.pid
  lock file = /var/run/rsync.lock
  #再定義要rsync目錄
  [terry]
  comment = Terry 's directory from 192.168.100.21
  path = /home/terry
  auth users = terry,rsync
  [test]
  comment = test rsync
  path = /home/test
  在上面的配置文件中,限定了192.168.100.0/24這個子網中,只有192.168.100.90的機器可以來訪問這臺rsync服務器的rsync服務。配置文件的後面部分定義了兩個rsync的目錄,terry目錄是隻有知道terry、rsync兩個賬號的人才能使用的,而text目錄是無需賬號就可以訪問的。rsync在定義目錄時還提供了一些其它選項,可以作更嚴格的控制。

  2.rsyncd.secrets
  # vi /etc/rsyncd.secrets
  rsyncd.secrets是存儲rsync服務的用戶名和密碼的,它是一個明文的文本文件,下面給出一個rsyncd.secrets文件的例子:
  terry:12345
  rsync:abcde
  因爲rsyncd.secrets存儲了rsync服務的用戶名和密碼,所以非常重要,因此文件的屬性必須
設爲600,只有所有者可以讀寫:
  # chmod 600 /etc/rsyncd.secrets

  3.rsyncd.motd
  # vi /etc/rsyncd.motd
  rsyncd.motd記錄了rsync服務的歡迎信息,你可以在其中輸入任何文本信息,如:
  Welcome to use the rsync services!

  4.services
  # vi /etc/services
  services並不是rsync的配置文件,這一步也可以不做。而修改了services文件的好處就在於
系統知道873端口對就的服務名爲rsync。修改services的方法就是確保services中有如下兩行,
沒有的話就自行加入:
  rsync  873/tcp  # rsync
  rsync  873/udp  # rsync
  5./etc/xinetd.d/rsync
  # vi /etc/xinetd.d/rsync
  建立一個名爲/etc/xinetd.d/rsync文件,輸入以下內容:
  service rsync
  {
    disable = no
    socket_type  = stream
    wait      = no
    user      = root
    server     = /usr/local/rsync/bin/rsync
    server_args  = --daemon
    log_on_failure += USERID
  }
  保存後,就可以運行rsync服務了。輸入以下命令:
  # /etc/rc.d/init.d/xinetd reload
  這樣rsync服務就在這臺機器上(192.168.100.21)運行起來了,接下來就是如何來使用它了。

  三、rsync命令的用法
  在配置完rsync服務器後,就可以從客戶端發出rsync命令來實現各種同步的操作。rsync有很
多功能選項,下面就對介紹一下常用的選項:
  rsync的命令格式可以爲:
  1. rsync [OPTION]... SRC [SRC]... [USER@]HOST : DEST]
  2. rsync [OPTION]... [USER@]HOST:SRC DEST]
  3. rsync [OPTION]... SRC [SRC]... DEST]
  4. rsync [OPTION]... [USER@]HOST::SRC [DEST]
  5. rsync [OPTION]... SRC [SRC]... [USER@]HOST :: DEST]
  6. rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

  rsync有六種不同的工作模式:
  1. 拷貝本地文件;當SRC和DES路徑信息都不包含有單個冒號":"分隔符時就啓動這種工作模式。
  2.使用一個遠程shell程序(如rsh、ssh)來實現將本地機器的內容拷貝到遠程機器。當DST
路徑地址包含單個冒號":"分隔符時啓動該模式。
  3.使用一個遠程shell程序(如rsh、ssh)來實現將遠程機器的內容拷貝到本地機器。當SRC
地址路徑包含單個冒號":"分隔符時啓動該模式。
  4. 從遠程rsync服務器中拷貝文件到本地機。當SRC路徑信息包含"::"分隔符時啓動該模式。
  5. 從本地機器拷貝文件到遠程rsync服務器中。當DST路徑信息包含"::"分隔符時啓動該模式。
  6. 列遠程機的文件列表。這類似於rsync傳輸,不過只要在命令中省略掉本地機信息即可。
  下面以實例來說明:
  # rsync -vazu -progress [email protected]:/terry/ /home
  v詳細提示
  a以archive模式操作,複製目錄、符號連接
  z壓縮
  u只進行更新,防止本地新文件被重寫,注意兩者機器的時鐘的同時
  -progress指顯示
  以上命令是保持客戶機192.168.100.90上的/home/terry目錄和rsync服務器上的terry目錄同
步。該命令執行同步之前會要求你輸入terry賬號的密碼,這個賬號是我們前面在rsyncd.secrets
文件中定義的。如果想將這條命令寫到一個腳本中,然後定時執行它的話,可以使用--password-file
選項,具體命令如下:
  # rsync -vazu -progress --password-file=/etc/rsync.secret
  [email protected]:/terry/ /home
  要使用--password-file選項,就得先建立一個存放密碼的文件,這裏指定爲/etc/rsync.secret。
其內容很簡單,如下:
  terry:12345
  同樣要修改文件屬性如下:
  # chmod 600 /etc/rsyncd.secrets

  四、利用rsync保持Linux服務器間的文件同步實例
  現在假設有兩臺Linux服務器A(192.168.100.21)和B(192.168.100.90),服務器A中的
/home/terry和服務器B中的/home/terry這兩個目錄需要保持同步,也就是當服務器A中文件發生
改變後,服務器B中的文件也要對應去改變。
  我們按上面的方法,在服務器A上安裝rsync,並將其配置爲一臺rsync服務器,並將/home/terry
目錄配置成rsync共享出的目錄。然後在服務器B上安裝rsync,因爲B只做客戶端,所以無需配置。
然後在服務器B,建立以下腳本:
  #!/bin/bash
  /usr/loca/rsync/bin/rsync -vazu -progress --delete
  --password-file=/etc/rsync.secret [email protected]:/terry/ /home
  將這個腳本保存爲AtoB.sh,並加上可執行屬性:
  # chmod 755 /root/AtoB.sh
  然後,通過crontab設定,讓這個腳本每30分鐘運行一次。執行命令:
  # crontab -e
  輸入以下一行:
  0,30 * * * * /root/AtoB.sh
  保存退出,這樣服務器B每個小時的0分和30分時都會自動運行一次AtoB.sh,AtoB.sh是負責
保持服務器B和服務器A同步的。這樣就保證了服務器A的所有更新在30鍾後,服務器B也一樣取
得了和服務器A一樣的最新的資料。

  五、其它應用
  rsync除了同步文件及目錄之外,還可以利用它來實現對遠程網站的遠程備份。如果再結合腳本和Crontab就能實現定時自動遠程備份。其可以實現與商業化的備份和鏡象產品的類似效果,但完全免費。

附:rsync有六種不同的工作模式:
  1. 拷貝本地文件;當SRC和DES路徑信息都不包含有單個冒號":"分隔符時就啓動這種工作模式。
  2.使用一個遠程shell程序(如rsh、ssh)來實現將本地機器的內容拷貝到遠程機器。當DST
路徑地址包含單個冒號":"分隔符時啓動該模式。
  3.使用一個遠程shell程序(如rsh、ssh)來實現將遠程機器的內容拷貝到本地機器。當SRC
地址路徑包含單個冒號":"分隔符時啓動該模式。
  4. 從遠程rsync服務器中拷貝文件到本地機。當SRC路徑信息包含"::"分隔符時啓動該模式。
  5. 從本地機器拷貝文件到遠程rsync服務器中。當DST路徑信息包含"::"分隔符時啓動該模式。
  6. 列遠程機的文件列表。這類似於rsync傳輸,不過只要在命令中省略掉本地機信息即可


1、cms
2、論壇
3、後臺服務
4、1,2,3的整合

1、手機閱讀器的瞭解及相關要考慮到的問題


其他
要有一個統計策略,就是看的用戶很多的情況下,調整相關信息


對每一項記錄下詳細的操作記錄


2011-12-20

積分

調查問卷

http://xiazaiadmin.dichan.com/gg/diaocha/admin_index.aspx


LVS
hadoop sh 研究
apache
fastdfs的使用情況

可以找到rpm很多包
http://rpmfind.net/linux/rpm2html/search.php?query=apxs&submit=Search+...
與 www.finajar.com 一樣
1、
http default 安裝在哪呢

1.我們得到一個新軟件,在安裝之前,一般都要先查看一下這個軟件包裏有什麼內容,假設這個文件是:Linux-1.4-6.i368.rpm,我們可以用這條命令查看:

  rpm -qpi Linux-1.4-6.i368.rpm

  系統將會列出這個軟件包的詳細資料,包括含有多少個文件、各文件名稱、文件大小、創建時間、編譯日期等信息。

  2.上面列出的所有文件在安裝時不一定全部安裝,就像Windows下程序的安裝方式分爲典型、完全、自定義一樣,Linux也會讓你選擇安裝方式,此時我們可以用下面這條命令查看軟件包將會在系統裏安裝哪些部分,以方便我們的選擇:

  rpm -qpl Linux-1.4-6.i368.rpm

  3.選擇安裝方式後,開始安裝。我們可以用rpm-ivh Linux-1.4-6.i368.rpm命令安裝此軟件。在安裝過程中,若系統提示此軟件已安裝過或因其他原因無法繼續安裝,但若我們確實想執行安裝命令,可以在 -ivh後加一參數“-replacepkgs”:

  rpm -ivh -replacepkgs Linux-1.4-6.i368.rpm

  4.有時我們卸載某個安裝過的軟件,只需執行rpm-e <文件名>命令即可。

  5.對低版本軟件進行升級是提高其功能的好辦法,這樣可以省去我們卸載後再安裝新軟件的麻煩,要升級某個軟件,只須執行如下命令:rpm -uvh <文件名>,注意:此時的文件名必須是要升級軟件的升級補丁

  6.另外一個安裝軟件的方法可謂是Linux的獨到之處,同時也是RMP強大功能的一個表現:通過FTP站點直接在線安裝軟件。當找到含有你所需軟件的站點並與此網站連接後,執行下面的命令即可實現在線安裝,譬如在線安裝Linux-1.4-6.i368.rpm,可以用命令:

  rpm -i ftp://ftp.pht.com/pub/linux/redhat/...-1.4-6.i368.rpm

  7.在我們使用電腦過程中,難免會有誤操作,若我們誤刪了幾個文件而影響了系統的性能時,怎樣查找到底少了哪些文件呢?RPM軟件包提供了一個查找損壞文件的功能,執行此命令:rpm -Va即可,Linux將爲你列出所有損壞的文件。你可以通過Linux的安裝光盤進行修復。

  8.Linux系統中文件繁多,在使用過程中,難免會碰到我們不認識的文件,在Windows下我們可以用“開始/查找”菜單快速判斷某個文件屬於哪個文件夾,在Linux中,下面這條命令行可以幫助我們快速判定某個文件屬於哪個軟件包:

  rpm -qf <文件名>

  9.當每個軟件包安裝在Linux系統後,安裝文件都會到RPM數據庫中“報到”,所以,我們要查詢某個已安裝軟件的屬性時,只需到此數據庫中查找即可。注意:此時的查詢命令不同於1和8介紹的查詢,這種方法只適用於已安裝過的軟件包!命令格式:

  rpm -參數 <文件名>


LoadModule helloworld_module modules/helloworld.so
<Location /helloworld>
SetHandler helloworld
</Location>


LoadModule download_module modules/download.so
<Location /test>
SetHandler download
</Location>


sealbird 發表於 2011-05-24 22:10:12

問fastdfs-apache-module增加功能的設想[加防盜鏈功能]
happy_fish100,你好,以前提過一個 地址爲 http://bbs.chinaunix.net/thread-2287944-1-2.html
現在想問一下,能不能在fastdfs-apache-module加入防盜鏈的功能呢[分佈式,鏈接往往暴露在外],等待你的回答.謝謝
sealbird 發表於 2011-05-24 22:17:59

自已先頂起來:lol:
happy_fish100 發表於 2011-05-25 09:24:48

回覆 1# sealbird

已經支持了啊!
通過token的方式來實現的防盜鏈。
看一下配置文件 mod_fastdfs.conf,裏面包含了http.conf,在http.conf中進行防盜鏈相關設置。
sealbird 發表於 2011-05-25 10:07:05

謝謝你及時回覆,可能我沒有說明白,具體如下
1、客戶端用如下鏈接進行訪問服務器端的文件
http://xxx.xx.xx/00/00/wKgAgk1_M36eGCazAAHAC_MLulA790.doc ?filename=540個活動營銷策略.doc&key=adlkfjskdoefrlcvexcvkas
說明:這個key是在客戶端(運用端)用某種算法得到的(即時通過算法求得),而想在fastdfs-apache-module中實現與客戶端(運用端)一樣的算法,而這個算法可以通過配置文件經常調整

再加上 http.conf 中 使用mod_rewrite.so HTTP_REFERER 達到兩級防盜,通過HTTP_REFERER好像有人可以破的,所以想再加一層安全

不知道在fastdfs-apache-module能不能有這個功能
就如下面這個文章中說的那樣子 http://sealbird.iteye.com/admin/blogs/897537
sealbird 發表於 2011-05-26 09:06:39

自已先頂一下
happy_fish100 發表於 2011-05-26 10:19:45

回覆 5# sealbird

目前已經提供帶時效的token機制。
如果還不能滿足你們的需求,你可以根據你們的業務邏輯直接修改擴展模塊代碼,嘿嘿。
sealbird 發表於 2011-05-28 12:10:24

謝謝happy_fish100
頁: [1] 查看完整版本: 問fastdfs-apache-module增加功能的設想[加防盜鏈功能]


有時候,運行 Nginx、PHP-CGI(php-fpm) Web服務的 Linux 服務器,突然系統負載上升,使用 top 命令查看,很多 php-cgi 進程 CPU 使用率接近100%。後來,我通過跟蹤發現,這類情況的出現,跟 PHP 的 file_get_contents() 函數有着密切的關係。

  大、中型網站中,基於 HTTP 協議的 API 接口調用,是家常便飯。PHP 程序員們喜歡使用簡單便捷的 file_get_contents("http://example.com/") 函數,來獲取一個 URL 的返回內容,但是,如果 http://example.com/ 這個網站響應緩慢,file_get_contents() 就會一直卡在那兒,不會超時。

  我們知道,在 php.ini 中,有一個參數 max_execution_time 可以設置 PHP 腳本的最大執行時間,但是,在 php-cgi(php-fpm) 中,該參數不會起效。真正能夠控制 PHP 腳本最大執行時間的是 php-fpm.conf 配置文件中的以下參數:

view plaincopy to clipboardprint?
1.The timeout (in seconds) for serving a single request after which the worker process will be terminated
2.Should be used when 'max_execution_time' ini option does not stop script execution for some reason
3.'0s' means 'off'
4.<value name="request_terminate_timeout">0s</value>
The timeout (in seconds) for serving a single request after which the worker process will be terminated
Should be used when 'max_execution_time' ini option does not stop script execution for some reason
'0s' means 'off'
<value name="request_terminate_timeout">0s</value>  默認值爲 0 秒,也就是說,PHP 腳本會一直執行下去。這樣,當所有的 php-cgi 進程都卡在 file_get_contents() 函數時,這臺 Nginx+PHP 的 WebServer 已經無法再處理新的 PHP 請求了,Nginx 將給用戶返回“502 Bad Gateway”。修改該參數,設置一個 PHP 腳本最大執行時間是必要的,但是,治標不治本。例如改成 <value name="request_terminate_timeout">30s</value>,如果發生 file_get_contents() 獲取網頁內容較慢的情況,這就意味着 150 個 php-cgi 進程,每秒鐘只能處理 5 個請求,WebServer 同樣很難避免“502 Bad Gateway”。

  要做到徹底解決,只能讓 PHP 程序員們改掉直接使用 file_get_contents("http://example.com/") 的習慣,而是稍微修改一下,加個超時時間,用以下方式來實現 HTTP GET 請求。要是覺得麻煩,可以自行將以下代碼封裝成一個函數。

view plaincopy to clipboardprint?
1.<?php
2.$ctx = stream_context_create(array(
3. 'http' => array(
4. 'timeout' => 1 //設置一個超時時間,單位爲秒
5. )
6. )
7.);
8.file_get_contents("http://example.com/", 0, $ctx);
9.?>
<?php
$ctx = stream_context_create(array(
'http' => array(
'timeout' => 1 //設置一個超時時間,單位爲秒
)
)
);
file_get_contents("http://example.com/", 0, $ctx);
?>  當然,導致 php-cgi 進程 CPU 100% 的原因不只有這一種,那麼,怎麼確定是 file_get_contents() 函數導致的呢?

  首先,使用 top 命令查看 CPU 使用率較高的 php-cgi 進程。


top - 10:34:18 up 724 days, 21:01, 3 users, load average: 17.86, 11.16, 7.69
Tasks: 561 total, 15 running, 546 sleeping, 0 stopped, 0 zombie
Cpu(s): 5.9%us, 4.2%sy, 0.0%ni, 89.4%id, 0.2%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 8100996k total, 4320108k used, 3780888k free, 772572k buffers
Swap: 8193108k total, 50776k used, 8142332k free, 412088k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10747 www 18 0 360m 22m 12m R 100.6 0.3 0:02.60 php-cgi
10709 www 16 0 359m 28m 17m R 96.8 0.4 0:11.34 php-cgi
10745 www 18 0 360m 24m 14m R 94.8 0.3 0:39.51 php-cgi
10707 www 18 0 360m 25m 14m S 77.4 0.3 0:33.48 php-cgi
10782 www 20 0 360m 26m 15m R 75.5 0.3 0:10.93 php-cgi
10708 www 25 0 360m 22m 12m R 69.7 0.3 0:45.16 php-cgi
10683 www 25 0 362m 28m 15m R 54.2 0.4 0:32.65 php-cgi
10711 www 25 0 360m 25m 15m R 52.2 0.3 0:44.25 php-cgi
10688 www 25 0 359m 25m 15m R 38.7 0.3 0:10.44 php-cgi
10719 www 25 0 360m 26m 16m R 7.7 0.3 0:40.59 php-cgi

  找其中一個 CPU 100% 的 php-cgi 進程的 PID,用以下命令跟蹤一下:

strace -p 10747

  如果屏幕顯示:

select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)

  那麼,就可以確定是 file_get_contents() 導致的問題了。

fastdfs

現在遇到一個問題,有時候會因爲碰到這樣形式的文件 file.a.b,如果上傳後返回的文件名爲 xxx.b,這樣的話會出現文件不能使用的情況,比如說兩個這樣的文件 sample.part1.rar 和 sample.part2.rar 只有兩個在一起時才能正常解壓,如果用fastdfs上傳後文件名都會改變。下載後不能正常解壓。能不能不讓文件名改變或者後綴名是否可以保存第一個點出現時以後的部分

哈哈。最近剛好實現了主從文件。正在測試階段。
slave文件的文件名根據master文件名生成,生成規則爲:
master文件名去除文件後綴 + slave前綴名 + slave文件後綴名。
例如,master文件名爲:
M00/00/01/wKjReUsKNqEAAAAAAAAADy96xyo28.txt

slave前綴名爲-memo,則slave文件名爲:
M00/00/01/wKjReUsKNqEAAAAAAAAADy96xyo28-memo.txt

參考 http://bbs.chinaunix.net/thread-1948414-1-1.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章