十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
今天有一個朋友問我thinkphp的這個問題,剛好百度搜索到你這個問題。已經(jīng)解決。就幫你解答一下這個問題。
創(chuàng)新互聯(lián)建站是專業(yè)的壽縣網(wǎng)站建設公司,壽縣接單;提供網(wǎng)站設計制作、網(wǎng)站設計,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行壽縣網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
首先我嘗試在入口文件封裝一個加密函數(shù),我用php des 加密,然后在配置文件config.php調(diào)用。然后在控制器里面使用,打印配置文件:dump(C());//輸出所有的配置文件信息, 雖然能看到正確的數(shù)據(jù)用戶名和密碼,但是會報錯。失敗告終。
我說一下我的解決方法。很簡單。
1:把配置文件里面的用戶名,密碼,數(shù)據(jù)庫名瞎寫一寫,別人看到你的代碼的配置文件看到的就是錯誤的數(shù)據(jù)庫名和密碼了。比如:
'DB_NAME' = 'SB', // 數(shù)據(jù)庫名
'DB_USER' = 'ni_da_ye', // 用戶名
'DB_PWD' = 'da_da_bi', // 密碼
在每個控制器文件里面。加入一段代碼。
比如你的IndexController.class.php文件。加下面的代碼。
/* 初始化方法*/
public function __construct(){
parent::__construct();
C("DB_NAME",decrypt('712349721937491237'));//數(shù)據(jù)庫名,
C('DB_USER',decrypt('712349721937491237'));//用戶名
C('DB_PWD',decrypt('712349721937491237'));//密碼
}
看清楚了嗎?
decrypt()這個函數(shù)就是我封裝的一個加密函數(shù),親自測試沒有錯誤??赡軙奚恍┬阅?。但是保證了用戶名,密碼,數(shù)據(jù)庫名沒有泄露。甚至你都可以把數(shù)據(jù)庫連接地址也加密一下。希望能幫到你。
PHP加密函數(shù)可以考慮用des,aes這些可逆加密。別用什么md4,md5.
一般情況下,MYSQL在更新操作會自動加表鎖。不需要顯式加鎖。除非是數(shù)據(jù)要求嚴格的邏輯寫順序。
執(zhí)行查詢語句(SELECT)前,會自動給涉及的所有表加讀鎖,在執(zhí)行更新操作 (UPDATE、DELETE、INSERT等)前,會自動給涉及的表加寫鎖,這個過程并不需要用戶干預,因此,用戶一般不需要直接用LOCK TABLE命令給MyISAM表顯式加鎖。
不需要加密,也無法加密。可以這么說,如果數(shù)據(jù)庫和程序是在同一服務器,及數(shù)據(jù)庫的地址是localhost,那么無需加密,因為加密了數(shù)據(jù)庫并不能自己解密,而且只要網(wǎng)站或者服務器不被攻下,沒有加密的必要。
數(shù)據(jù)庫和php程序在不同的服務器,就是說你在操作數(shù)據(jù)庫的時候需要遠程操作,這樣的話需要傳輸數(shù)據(jù)庫賬號密碼,可以在本地加密后傳輸,然后在數(shù)據(jù)庫服務器進行解密后,用原始的賬號密碼去操作數(shù)據(jù)庫。
--------------------------------------------------------一般來說,如果你擔心服務器被攻下,那么你加密數(shù)據(jù)庫賬號密碼是多余的,因為人家下載你的源碼一看就知道鳥。
/**********************************************
*file?lock
*@author?Zeal?
Li
*
***********************************************/
/*
*lock_thisfile:獲得獨享鎖
*@param?$tmpFileStr?用來作為共享鎖文件的文件名(可以隨便起一個名字)
*@param?$locktype?鎖類型,缺省為false(非阻塞型,也就是一旦加鎖失敗則直接返回false),設置為true則會一直等待加鎖成功才返回
*@return?如果加鎖成功,則返回鎖實例(當使用unlock_thisfile方法的時候需要這個參數(shù)),加鎖失敗則返回false.
*/
function?
lock_thisfile($tmpFileStr,$locktype=false){
if($locktype?==?
false)
$locktype?=?LOCK_EX|LOCK_NB;
$can_write?=?0;
$lockfp?=?@fopen($tmpFileStr.".lock","w");
if($lockfp){
$can_write?=?@flock($lockfp,$locktype);
}
if($can_write){
return?$lockfp;
}
else{
if($lockfp){
@fclose($lockfp);
@unlink($tmpFileStr.".lock");
}
return?false;
}
}
/**?
*unlock_thisfile:對先前取得的鎖實例進行解鎖
*@param?$fp?lock_thisfile方法的返回值
*@param?$tmpFileStr?
用來作為共享鎖文件的文件名(可以隨便起一個名字)
*/
function?
unlock_thisfile($fp,$tmpFileStr){
@flock($fp,LOCK_UN);
@fclose($fp);
@fclose($fp);
@unlink($tmpFileStr.".lock");
}
?
?php
//?使用舉例
$tmpFileStr?=?"/tmp/mylock.loc";
//?等待取得操作權限,如果要立即返回則把第二個參數(shù)設為false.
$lockhandle?=?
lock_thisfile($tmpFileStr,true);
if($lockhandle){
//?
在這里進行所有需要獨占的事務處理。
//?...?...
//?事務處理完畢。
unlock_thisfile($lockhandle,$tmpFileStr);
}
?
你的問題是:
1. 很多文件,想多進程處理,以提高效率,縮短總處理時間
2. 這些進程只需要讀文件,不需要寫
3. 對每個文件,只要有一個進程處理過它就可以了,沒有多個進程都必須處理它的需求
你的需求其實是分治,將文件分為多個組(不一定要在文件系統(tǒng)上新建目錄),然后分而治之,這種情況不需要用鎖.
鎖不是用于這種場景的,鎖用于下面這種場景:
1. 文件file.txt里面記錄了user1的銷售額和user2的銷售額,user1+user2的銷售總額
2. 進程php1負責寫入user1的數(shù)據(jù),進程php2負責寫入user2的數(shù)據(jù),兩個進程各讀出銷售總額顯示給user1,user2
建議你這樣解決:
1. 啟動多個PHP進程(nohup php your_script.php your_dir )
2. 每個PHP進程賦予一個序號(假設4個進程,那就0,1,2,3),可以通過對進程自身的pid模運算取余數(shù)得到,也可以在啟動進程的時候通過命令行傳入,隨你了
3. 每個進程在處理文件前先對文件名做crc32()運算,模一下進程總數(shù): crc32(file_name) % 4, 取模結果與此進程的序號相等就讀取內(nèi)容并處理,不相等就跳過
php將密碼存入數(shù)據(jù)庫,可以分內(nèi)常見的4種方式:
1、直接md5加密存到到數(shù)據(jù)庫
2、md5兩次存到數(shù)據(jù)庫
3、對需要加密的字符串和一個常量 進行混淆加密
4、生成一個隨機的變量存到數(shù)據(jù)庫中,然后對需要加密的字符串和這個隨機變量加密
?php$str="admin"; //需要加密的字符串$str2="php"; //增加一個常量混淆 $pass1=md5($str);$pass2=md5(md5($str));$pass3=md5($str.$str2);echo $pass1."br".$pass2."br".$pass3;?
輸出:
第四種
$str="admin"; //需要加密的字符串$encrypt=$row['encrypt']; // 生成的 隨機加密字符串 存到數(shù)據(jù)庫中$pass4=md5($str.$encrypt);// 8db2ec7e9636f124e56f7eb4d7b7cc7e