PHP+MySQL+Dreamweaver整合教學(PHPMaker運用設計網站教學):快速設計網站與網頁
總教頭特別企畫【專業整合課程】比傳統的學習的還要快速與實用!


感謝您造訪 PHP程式設計+MySQL資料庫+Dreamweaver整合教學(PHPMaker運用設計網站教學)密訓基地。 你可進入教學詳細內容介紹頁面,詳細瞭解PHP程式設計+MySQL資料庫(PHPMaker運用設計網站教學)及相關技術維護影片教學(完整配套措施),馬上可以設計架站程式與PHP網頁,快速建立MySQL資料庫、自動生成PHP網頁。可對資料庫進行瀏覽、修改、查詢、加入和刪除(整合成我們需要的網站)。

要在網路上經營網站賺大錢,不能只會下載現有的程式來架站(自己設計才能完全符合專業的特殊需求),你不用死背PHP語法,更可以完全不用花錢用購買資料庫(PHPMySQL完全免費!)你可以透過技術學習,讓PHP程式網頁+網路資料庫+Dreamweaver整合教學→讓你快速成為:【動態網站程式設計專家→你能因此賺大錢】!

 PHP程式設計+MySQL資料庫+Dreamweaver整合教學(PHPMaker運用設計網站教學):

http://por.tw/php/new-E_learning/index.php


PHP程式設計+MySQL資料庫+Dreamweaver整合教學(PHPMaker運用教學)密訓基地  總教頭  敬上



瀏覽模式: 普通 | 列表

mysql常見錯誤提示及解決方法

mysql常見錯誤提示及解決方法

130 :檔案格式不正確。(還不是很清楚錯誤的狀況)
145  :檔案無法開啟。
1005:建立表失敗。
1006:建立資料庫失敗。
1007:資料庫已存在,建立資料庫失敗。
1008:資料庫不存在,刪除資料庫失敗。
1009:不能刪除資料庫檔案導致刪除資料庫失敗。
1010:不能刪除資料目錄導致刪除資料庫失敗。
1011:刪除資料庫檔案失敗。
1012:不能讀取系統表中的記錄。
1016:檔案無法開啟,使用後台修復或是使用 phpmyadmin 進行修復。
Quote:
開始=>所有程式=>附件=>指令提示符
  輸入 mysql 所在硬碟盤符
    cd mysql 所在目錄
    cd bin
  輸入 myisamchk -f D:usr/local/mysql/data/bbs/PW_members.MYI
  ps : D:usr/local/mysql/data/bbs 是你論壇資料庫的路徑
    -f 根據具體情況選取,一般也可以選取 -r
    注意你的 系統C盤或放資料庫的硬碟空間是否足夠,一般小於 1G 很容易出現錯誤。
或用mysqlcheck指令進行修復。具體的方法:利用指令行進入mysql/bin目錄,執行
mysqlcheck -o -r phpwind -uroot -p                                                      
其中phpwind是你資料庫的名稱,root是你的資料庫使用者名,然後會提示你輸入密碼。然後就會修復你的資料庫。
1017:伺服器非法關機,導致該檔案損壞。
1020:記錄已被其他使用者修改。
1021:硬碟剩餘空間不足,請加大硬碟可用空間。
1022:關鍵字重複,變更記錄失敗。
1023:關閉時發生錯誤。
1024:讀檔案錯誤。
1025:變更名字時發生錯誤。
1026:寫檔案錯誤。
1030:可能是伺服器不穩定。(具體原因不是很清楚)
1032:記錄不存在。
1036:資料表是唯讀的,不能對它進行修改。
1037:系統記憶體不足,請重啟資料庫或重啟伺服器。
1038:用於排序的記憶體不足,請增大排序緩沖區。
1040:已到達資料庫的最大連線數,請加大資料庫可用連線數。
Quote:
在my.ini 修改max_connections=100為max_connections=1000或更大,重啟mysql
1041:系統記憶體不足。
1042:無效的主電腦名。
1043:無效連線。
1044:資料庫使用者權限不足,請聯繫空間商解決。
1045:資料庫伺服器/資料庫使用者名/資料庫名/資料庫密碼錯誤,請聯繫空間商檢查帳戶。
Quote:
方法:確保論壇data目錄下的sql_config.php使用者名與密碼都正確.如果使用者忘記了資料庫的密碼,可以按如下模式進行密碼的修改:
如果 MySQL 正在運行,首先停止。
啟動 MySQL :bin/safe_mysqld --skip-grant-tables &
就可以不需要密碼就進入 MySQL 了。
然後就是
>use mysql
>update user set password=password("new_pass") where user="root";
>flush privileges;
1046:沒有選取資料庫。
1048:欄位不能為空。
1049:資料庫不存在。
1050:資料表已存在。
1051:資料表不存在。
1054:欄位不存在,自行建立欄位。
1060:欄位重複,導致無法插入這個欄位。
1062:欄位值重複,入庫失敗
Quote:
  1.如果出類似主碼為"65535"的錯誤,可以檢視關聯表的自增欄位,將欄位值改在就可以
  2.確保關聯資料表中主碼重複的欄位是否存在,如果存在刪除這條記錄
  3.備份資料庫,修復關聯表(注:這種情況比較常見,如pw_posts表,對表進行修復的時候不要忘記備份).
1064:MySQL 不支援錯誤提示中的編碼。
1065:無效的 SQL 語句,SQL 語句為空。
1067:MySQL 版本為 5,不支援空的預設值。
1081:不能建立 Socket 連線。
1114:資料表已滿,不能容納任何記錄。
1115:設定的字集在 MySQL 並沒有支援。
1116:開啟的資料表太多。
1129:資料庫出現異常,請重啟資料庫。
1130:連線資料庫失敗,沒有連線資料庫的權限。
1133:資料庫使用者不存在。
1135:可能是記憶體不足夠,請聯繫空間商解決。
1141:現用的使用者無權訪問資料庫。
1142:現用的使用者無權訪問資料表。
1143:現用的使用者無權訪問資料表中的欄位。
1146:資料表缺失,請還原備份資料
1147:未定義使用者對資料表的訪問權限。
1149:SQL 語句語法錯誤。
1158:網路錯誤,出現讀錯誤,請檢查網路連線狀況。
1159:網路錯誤,讀逾時,請檢查網路連線狀況。
1160:網路錯誤,出現寫錯誤,請檢查網路連線狀況。
1161:網路錯誤,寫逾時,請檢查網路連線狀況。
1169:欄位值重複,更新記錄失敗。
1177:開啟資料表失敗。
1180:送出事務失敗。
1181:返回事務失敗。
1193:不支援字集限定(SET NAMES)。
1203:現用的使用者和資料庫建立的連線已到達資料庫的最大連線數,請增大可用的資料庫連線數或重啟資料庫。
1205:加鎖逾時。
1211:現用的使用者沒有建立使用者的權限。
1216:外鍵約束檢查失敗,更新子表記錄失敗。
1217:外鍵約束檢查失敗,刪除或修改主表記錄失敗。
1226:現用的使用者使用的資源已超過所容許的資源,請重啟資料庫或重啟伺服器。
1227:權限不足,您無權進行此操作。
1235:MySQL版本過低,不具有本功能。
1250:用戶端不支援伺服器要求的認證協定,請考慮升級用戶端。
1251:Client 不能支援 authentication protocol 的要求
Client does not support authentication protocol requested by server; consider upgrading MySQL client
Quote:
方法1:mysql> SET PASSWORD FOR
-> ' some_user '@' some_host ' = OLD_PASSWORD(' newpwd ');
結合我們的實際情況,在 MySQL Command Line Client 下運行:
set password for root@localhost = old_password('123456');
方法2:
mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd')
    -> WHERE Host = 'some_host' AND User = 'some_user';
mysql> FLUSH PRIVILEGES;
上面紅色的部分請按自己實際情況修改。
1267:不合法的混合字集。
2002:伺服器埠不對,請咨詢空間商正確的埠。
2003:MySQL 服務沒有啟動,請啟動該服務。
2008:MySQL client ran out of memory
錯誤指向了MySQL客戶mysql。這個錯誤的原因很簡單,客戶沒有足夠的記憶體存儲全部結果。
2013:遠端連線資料庫是有時會有這個問題,MySQL 伺服器在執行一條 SQL 語句的時候失去了連線造成的。
10048:
Quote:
建議在my.ini檔案中修改最大連線數,
  把 mysql_connect() 方法都改成了 mysql_pconnect() 方法.
  要修改mysql_pconnect(),可以在論壇的data目錄的sql_config.php中
  $pconnect = 0; //是否持久連線
  修改成$pconnect = 1;
  開啟防重整,嚴禁重整太快.
10055:沒有快取空間可利用
Quote:
檢視下你的C盤空間是否已經滿,清除一些沒有用的檔案.
  可以在後台的"論壇核心設定","核心功能設定"裡"程式改善"開啟,"GZIP 壓縮輸出"關閉.
搜尋了一下10055(沒有快取空間可利用)出錯的原因,分析了my.ini的配製檔案,在my.ini中如下:
default-storage-engine=INNODB
innodb_additional_mem_pool_size=2M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=1M
innodb_buffer_pool_size=10M
innodb_log_file_size=10M
innodb_thread_concurrency=8
覺得可以把innodb_buffer_pool_size=10M 加大如100M或是1000M
以上是對mysql5的
如果是mysql4可以在my.ini中增加如下:
#innodb_data_file_path = ibdata1:2000M;ibdata2:2000M
#innodb_data_home_dir = c:ibdata
#innodb_log_group_home_dir = c:iblogs
#innodb_log_arch_dir = c:iblogs
#set-variable = innodb_mirrored_log_groups=1
#set-variable = innodb_log_files_in_group=3
#set-variable = innodb_log_file_size=5M
#set-variable = innodb_log_buffer_size=8M
#innodb_flush_log_at_trx_commit=1
#innodb_log_archive=0
#set-variable = innodb_buffer_pool_size=16M
#set-variable = innodb_additional_mem_pool_size=2M
#set-variable = innodb_file_io_threads=4
#set-variable = innodb_lock_wait_timeout=50
把前面的#去了
10061:
Quote:
啟動這台機器上的MySQL服務
  如服務啟動失敗
  一定是你的my.ini檔案出了差錯,
  MySQL服務不能標準啟動
  你刪除了它後,MySQL就會按其預設配置運行,
  那就沒有問題了
以上資料根據網上各方面資料整合而成。
標籤: mysql

MySQL資料庫的安全防護(資料庫安全技術)

MySQL資料庫的安全防護(資料庫安全技術)

資料庫是網站所有資料寫入的存放之處
萬一資料庫被駭客攻擊或盜取資料,那後果會非常嚴重!
所以使用資料庫,安全問題不能不注意。(不止MySQL資料庫,其他資料庫也一樣更該注意)

以下是mysql應該注意的安全防護事項:


1.如果用戶端和伺服器端的連線需要跨越並通過不可信任的網路,那麼就需要使用ssh隧道來加密該連線的通信。

2.用set password語句來修改使用者的密碼,三個步驟,先「mysql -u root」登陸資料庫系統,然後「mysql> update mysql.user set password=password('newpwd')」,最後執行「flush privileges」就可以了。

3.需要提防的攻擊有,防偷聽、篡改、重播、拒絕服務等,不涉及可用性和容錯方面。對所有的連線、查詢、其他操作使用基於acl即訪問控制清單的安全措施來完成。也有一些對ssl連線的支援。

4.除了root使用者外的其他任何使用者不容許訪問mysql主資料庫中的user表;

加密後存放在user表中的加密後的使用者密碼一旦洩露,其他人可以隨意用該使用者名/密碼相應的資料庫;

5.用grant和revoke語句來進行使用者訪問控制的工作;

6.不使用明文密碼,而是使用md5()和sha1()等單向的哈系函數來設定密碼;

7.不選用字典中的字來做密碼;

8.採用防火牆來去掉50%的外部危險,讓資料庫系統躲在防火牆後面工作,或放置在dmz區功能變數中;

9.從網際網路上用nmap來掃瞄3306連接埠,也可用telnet server_host 3306的方法測試,不能容許從非信任網路中訪問資料庫伺服器的3306號tcp連接埠,因此需要在防火牆或路由器上做設定;

10.為了防止被惡意傳入非法參數,例如where id=234,別人卻輸入where id=234 or 1=1導致全部顯示,所以在web的表單中使用''或""來用字串,在動態url中加入%22代表雙引號、%23代表井號、%27代表單引號;傳遞未檢查過的值給mysql資料庫是非常危險的;

11.在傳遞資料給mysql時檢查一下大小;

12.應用程式需要連線到資料庫應該使用一般的使用者帳號,只開放少數必要的權限給該使用者;

13.在各寫程式介面(c c++ php perl java jdbc等)中使用特定『逃脫字元』函數;

在網際網路上使用mysql資料庫時一定少用傳輸明文的資料,而用ssl和ssh的加密模式資料來傳輸;

14.學會使用tcpdump和strings工具來檢視傳輸資料的安全性,例如tcpdump -l -i eth0 -w -src or dst port 3306 strings。以普通使用者來啟動mysql資料庫服務;

15.不使用到表的聯結符號,選用的參數 --skip-symbolic-links;

16.確信在mysql目錄中只有啟動資料庫服務的使用者才可以對檔案有讀和寫的權限;

17.不許將process或super權限付給非管理使用者,該mysqladmin processlist可以列舉出現用的執行的查詢文字;super權限可用於切斷用戶端連線、改變伺服器運行參數狀態、控制覆制複製資料庫的伺服器;

18.file權限不付給管理員以外的使用者,防止出現load data '/etc/passwd'到表中再用select 顯示出來的問題;

19.如果不相信dns服務公司的服務,可以在主電腦名稱容許表中只設定ip數字位址;

20.使用max_user_connections變量來使mysqld服務程式,對一個指定帳戶限定連線數;

21.grant語句也支援資源控制選項;

22.啟動mysqld服務程式的安全選項開關,--local-infile=0或1 若是0則用戶端程式就無法使用local load data了,賦權的一個例子grant insert(user) on mysql.user to 'user_name'@'host_name';若使用--skip-grant-tables系統將對任何使用者的訪問不做任何訪問控制,但可以用 mysqladmin flush-privileges或mysqladmin reload來開啟訪問控制;預設情況是show databases語句對所有使用者開放,可以用--skip-show-databases來關閉掉。

23.碰到error 1045(28000) access denied for user 'root'@'localhost' (using password:no)錯誤時,你需要重新設定密碼,具體方法是:先用--skip-grant-tables參數啟動mysqld,然後執行 mysql -u root mysql,mysql>update user set password=password('newpassword') where user='root';mysql>flush privileges;,最後重新啟動mysql就可以了。
標籤: mysql

問題:
請問為什麼我向另一網頁傳送變數時,只得到前半部分,以空格開頭的則全部丟失?


<?php
$Var="hello php";//修改為$Var="   hello php";試試得到什麼結果
$post= "receive.php?Name=".$Var;
header("location:$post");
?>

receive.php的內容:


<?PHP
Echo "<pre>";
Echo  $_GET["Name"];
Echo "</pre>";
?>


回覆:
正確的方法是:


<?php
$Var="hello php";
$post= "receive.php?Name=".urlencode($Var);
header("location:$post");
?>

在接收頁面你不需要使用Urldecode(),變數會自動編碼.

用PHPMaker快速生成PHP網站管理進出貨的好處

學員來函諮詢:
老師您好:
好久不見,有一個問題想請教您,最近有接觸到一個倉儲的業務,是有關於管理進出貨的
不知道有沒有相關PHP的軟體可以處理,詳細的說明請見附檔
謝謝
祝:安康

------------------------------------------------------------------
洪總教頭回覆:
可以用此教學:課程中的PHPMaker快速生成PHP網站
 
 PHP程式設計+MySQL資料庫+Dreamweaver整合教學(PHPMaker運用設計網站教學):

http://por.tw/php/new-E_learning/index.php
 
---------------------------------------------------------------------------------
用PHPMaker快速生成PHP網站管理進出貨的好處:
1.生成管理進出貨是網路網站,只要能上網,有帳號與密碼任何人都可以瀏覽
(有管理者權限者,可以進階新增、修改、搜尋甚至刪除)
2.解決個人電腦版進銷存的缺點
3.快速生成(不用花很多時間設計)更不用花錢購買套裝進銷存軟體
(買軟體萬一日後不能更新或擴增...不合用就變成:垃圾!)
4.獨家系統(依據自己需要設計欄位,不會有一般進銷存用不到的雜七雜八選項或欄位的缺點)
5.可以自由擴增,不會受制於人或被套裝軟體綁死。
網站發生:Fatal error: Allowed memory size of 錯誤之處理

網站使用PHP程式去呼叫.dat的資料
在網站輸入搜尋就會有以下訊息產生:

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 4023 bytes) in /var/www/web/data_04/index.php on line 34


你的伺服器上PHP設定的記憶容量太少了, 在php.ini裡將
memory_limit = 8M
改成
memory_limit = 32M

然后重啟apache就可以啦!

也可以通過在php程式申請大一些的記憶容量實現

ini_set( 'memory_limit', '32M' );

----------------------------------------------------------------
PHP程式設計問題諮詢:
我想在每個檔最前,最後面都加上一檔.但一個一個添加很麻煩
有沒有解決的辦法?

---------------------------------------------------------
PHP程式設計問題回覆:
 我想在每個檔最前,最後面都加上一檔.但一個一個添加很麻煩
您可以這樣處理:

1:打開php.ini文件
設置 include_path= "c:"

2:寫兩個文件
auto_prepend_file.php 和 auto_append_file.php 保存在c磁碟,他們將自動依附在每個php檔的頭部和尾部.

3:在php.ini中找到:
Automatically add files before or after any PHP document.
auto_prepend_file = auto_prepend_file.php;依附在頭部
auto_append_file = auto_append_file.php;依附在尾部

以後你每個php檔就相當於
<?php
Include "auto_prepend_file.php" ;

.......//這裏是你的程式


Include "auto_append_file.php";
?>
---------------------------------------------------------
PHP程式設計問題諮詢:
要如何使Html/PHP格式的字串不被解釋,而是照原樣顯示?


---------------------------------------------------------
PHP程式設計問題回覆:
使Html/PHP格式的字串不被解釋,你可以這樣處理:

<?PHP
$str="<h1>PHP</h1>";
Echo "被解釋過的: ".$str."<br>經過處理的:";
Echo  htmlentities(nl2br($str));
?>
---------------------------------------------------------

從 PHP 4 移植到 PHP 5需要注意的事項

從 PHP 4 移植到 PHP 5需要注意的事項

向後不相容的改變

儘管大部分 PHP 4 的代碼應該不用修改就能運行,還是應該留意以下向後不相容的改變:

    *

      有了一些新關鍵字。
    *

      strrpos() 和 strripos() 如今使用整個字串作為 needle。
    *

      非法使用字串偏移量會導致 E_ERROR 而不是 E_WARNING。一個非法使用的例子:$str = 'abc'; unset($str[0]);.
    *

      array_merge() 被改成只接受陣列。若果傳遞入非陣列變量,對每個此類參數都會發出一條 E_WARNING 訊息。要小心因為你的代碼有可能瘋狂發出 E_WARNING。
    *

      PATH_TRANSLATED 伺服器變量在 Apache2 SAPI 中不再暗中設定,這和 PHP 4 中的情形相反,若果 Apache 沒產生此值則其被設為和 SCRIPT_FILENAME 伺服器變量一樣的值。此修改是為了遵守 CGI 規範。更多訊息見 bug #23610,並參考手冊中 $_SERVER['PATH_TRANSLATED'] 的說明。此問題也影響到 PHP >= 4.3.2 的版本。
    *

      Tokenizer 增加不再定義 T_ML_COMMENT 常量。若果把 error_reporting 設為 E_ALL,PHP 將產生一條訊息。儘管 T_ML_COMMENT 從來都沒用到過,還是在 PHP 4 中定義了。在 PHP 4 和 PHP 5 中 // 和 /* */ 都被解析為 T_COMMENT 常量。但是 PHPDoc 風格的注解 /** */,自 PHP 5 開始被 PHP 解析,被識別為 T_DOC_COMMENT。
    *

      若果 variables_order 內含「S」,$_SERVER 應該帶有 argc 和 argv 被產生。若果會員特別配製系統不建立 $_SERVER,那此變量當然就不存在了。改變的地方是不管 variables_order 怎麼設定,在 CLI 版本中 argc 和 argv 總是可用的。本來 CLI 版不是總會產生全局變量 $argc 和 $argv 的。
    *

      沒有屬性的對象不再被當成「empty」。
    *

      有些情況下類必須在使用前被定義。這僅在使用了一些 PHP 5 的新特性的時候發生。其它情況下行為都沒變。
    *

      get_class(),get_parent_class() 和 get_class_methods() 如今返回的類/方法名和定義時的名字一致(區分大小寫),對於依賴以前行為(類/方法名總是返回小寫的)的老腳本可能產生問題。一個可能的解決方法是在腳本中搜尋所有這些函數並使用 strtolower()。

      區分大小寫的改變也適用於魔術常量 __CLASS__,__METHOD__ 和 __FUNCTION__。其值都會嚴格按照定義時的名字返回(區分大小寫)。
    *

      ip2long() 在傳遞入一個非法 IP 作為參數時返回 FALSE,不再是 -1。
    *

      若果在包括檔案中定義有函數,則不管在 return() 之前還是之後都可以在主檔案中呼叫。若果檔案被包括兩次,PHP 5 會發出致命錯誤,因為函數已經被定義,而 PHP 4 不管這個。因此推薦使用 include_once() 而不要去檢查檔案是否已被包括以及在包括檔案中有條件返回。
    *

      include_once() 和 require_once() 在 Windows 下先將路徑規格化,因此包括 A.php 和 a.php 只會把檔案包括一次。

例子 B-1. strrpos() 和 strripos() 如今用整個字串作為 needle
<?php
var_dump(strrpos('ABCDEF','DEF')); //int(3)

var_dump(strrpos('ABCDEF','DAF')); //bool(false)
?>

例子 B-2. 沒有屬性的對象不再被當成「empty」
<?php
class test { }
$t = new test();

var_dump(empty($t)); // echo bool(false)

if ($t) {
    // Will be executed
}
?>

例子 B-3. 有些情況下類必須在使用之前定義
<?php

//works with no errors:
$a = new a();
class a {
}


//throws an error:
$a = new b();

interface c{
}
class b implements c {
}

?>
【文章標題】:(PHP程式設計) EclipsePHP Studio 1.2.2 ( EPP) 繁體中文版
【文章作者】: PHP-MySQL-程式設計教學密訓基地-總教頭
【作者信箱】: ster168ster@gmail.com
【作者首頁】: http://por.tw/php
【最新教學課程】: http://por.tw/php/new-E_learning/index.php
【基地首頁】: http://por.tw
【版權聲明】: 【原創】PHP-MySQL-程式設計教學密訓基地,轉載必須保留完整標頭。刪除者依法追究!
--------------------------------------------------------------------------------
【文章內容】
  (PHP程式設計) EclipsePHP Studio 1.2.2 ( EPP) 繁體中文版
 
  EclipsePHP Studio 1.2.2 (以下簡稱:EPP 1.2.2)是一個大型PHP項目開發編譯器,給予Eclipse底層開發而來,並且整合了JDK,免除處了安裝配置的麻煩,一次安裝即可使用無需配置。
此編譯器為PHP編譯器,輔助PHP代碼的開發和除錯,整合了代碼高亮,函數追蹤,時時糾錯等功能。
同時還增加了合作開發版本伺服器功能: SVN , CVS 。 內嵌瀏覽器可以在除錯簡單代碼時時瀏覽。
不僅支援php ,也支援其他網路語系像html、xhtml、xml、css和javascript、java、perl、python等!

attachments/201009/8984073170.png
 
(PHP程式設計)EclipsePHP Studio 1.2.2 特點:
1、方便PHP面向物件開發,有類整合追蹤功能。
2、代碼時時糾錯,讓語法錯誤扼殺在搖籃中。
3、內嵌瀏覽器除錯更加方便快捷。
4、整合了常用的版本伺服器用戶端功能 SVN CVS。
5、豐富的快捷鍵讓開發提高效率。
6、函數,變量,快捷提示,讓開發變的簡單輕鬆。
7、強調的除錯和結構操作,使得更容易開發大型的項目
8、多項目管理,可以用開發者在多個項目之間切換。
9、很好的延伸功能,可以安裝多種外掛程式。
 
(PHP程式設計)EclipsePHP Studio 1.2.2更新:
1、修正編寫PHP代碼時行號不能標準顯示每次開啟丟失問題
2、增加了在EPP中直接開啟檔案目錄方便操作。
3、解決了在Vista 、Windows7 中假死的問題。
4、重新修正了PHP支援內核反應速度更快
5、去除了一些不必要的說明檔案編輯器在增加功能的基礎上較少體積。
 
  備註:本軟體是大陸內地軟體,安裝時是簡體畫面,安裝後可以正常顯示繁體中文。
 
 
  (PHP程式設計)EclipsePHP Studio 1.2.2 ( EPP) 繁體中文版下載網址:
 
  http://por.tw/Downloads/EclipsePHP.Studio-1.2.2.rar
 
--------------------------------------------------------------------------------
你還在自己摸索PHP-MySQL-網頁與網站程式設計嗎?你有【技術顧問服務】可以諮詢嗎?
問題無法解決你要發很多時間處理(或許永遠找出答案)那是自己摸索程式設計的痛苦!
購買【PHP+MySQL程式設計】課程錄影DVD教學課程,你就可獲得技術【顧問諮詢服務】!

伺服器配置:Squid配置詳解

伺服器配置:Squid配置詳解
 
基本配置
安裝完成後,接下來要對Squid的運行進行配置(不是前面安裝時的配置)。所有項目都在squid.conf中完成。Squid自帶的squid.conf內含非常詳盡的說明,相當於一篇使用者手冊,對配置有任何疑問都可以參照解決。

在這個例子中,代理伺服器同時也是通訊閘,內定網路介面eth0的IP位址為192.168.0.1,外部網路接eth1的IP位址為202.103.x.x。下面是一個基本的代理所需要配置選項:

http_port 192.168.0.1:3128

預設埠是3128,當然也可以是任何其它埠,只要不與其它服務發生衝突即可。為了安全起見,在前面加上IP位址,Squid就不會監聽外部的網路介面。 下面的配置選項是伺服器管理者的電子信件,當錯誤發生時,該位址會顯示在錯誤頁面上,便於使用者聯繫:

cache_mgr start@por.com

以下這些參數告訴Squid快取的檔案系統、位置和快取策略:

cache_dir ufs /var/squid cache_mem 32MB cache_swap_low 90 cache_swap_high 95

在這裡,Squid會將/var/squid目錄作為儲存快取資料的目錄,每次處理的快取大小是32兆位元組,當快取空間使用達到95%時,新的內容將 取代舊的而不直接新增到目錄中,直到空間又下降到90%才停止這一活動。

如果不想Squid快取任何檔案,如某些存儲空間有限的專有系統,可以使用 null檔案系統(這樣不需要那些快取策略):

cache_dir null /tmp

下面的幾個關於快取的策略配置中,較主要的是第一行,即使用者的訪問記錄,可以通過分析它來瞭解所有使用者訪問的詳盡位址:

cache_access_log /var/squid/access.log cache_log /var/squid/cache.log cache_store_log /var/squid/store.log

下面這行配置是在較新版本中出現的參數,告訴Squid在錯誤頁面中顯示的伺服器名稱:

visible_hostname No1.proxy

以下配置告訴Squid如何處理使用者,對每個請求的IP位址作為單獨位址處理:

client_netmask 255.255.255.255

如果是普通代理伺服器,以上的配置已經足夠。但是很多Squid都被用來做透明代理。

所謂透明代理,就是用戶端不知道有代理伺服器的存在,當然也不需要進行任何與代理有關的設定,從而大大方便了系統管理員。關聯的選項有以下幾個:

httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_user_host_header on

在Linux上,可以用iptables/ipchains直接將對Web埠80的請求直接轉信到Squid埠3128,由Squid接手,而使用者瀏覽器仍然認為它訪問的是對方的80埠。例如以下這條指令:

iptables -t nat -A PREROUTING -s 192.168.0.200/32 -p tcp --dport 80 -j REDIRECT 3128

page
    就是將192.168.0.200的所有針對80埠的訪問重導至3128埠。

所有設定完成後,關鍵且重要的任務是訪問控制。Squid支援的管理模式很多,使用起來也非常簡單(這也是有人寧願使用不做任何快取的Squid,也 不願意單獨使用iptables的原因)。

Squid可以通過IP位址、主電腦名、MAC位址、使用者/密碼認證等識別使用者,也可以通過功能變數名、功能變數副檔名、檔案類 型、IP位址、埠、URL符合等控制使用者的訪問,還可以使用時間區間對使用者進行管理,所以訪問控制是Squid配置中的重點。

Squid用ACL (Access Control List,訪問控制清單)對訪問類型進行劃分,用http_access deny 或allow進行控制。根據需求首先定義兩組使用者advance和normal,還有代表所有未指明的使用者組all及不容許上網的baduser,配置代 碼如下:

acl advance 192.168.0.2-192.168.0.10/32 acl normal src 192.168.0.11-192.168.0.200/32 acl baduser src 192.168.0.100/32 acl baddst dst www.soocol.com acl all src 0.0.0.0/0 http_access deny baduser http_access allow advance http_access allow normal

可以看出,ACL的基本格式如下: acl 清單名稱 控制模式 控制目的 比如acl all src 0.0.0.0/0,其名稱是all,控制模式是src源IP位址,控制目的是0.0.0.0/0的IP位址,即所有未定義的使用者。出於安全考慮,總是在最後禁止這個清單。 下面這個清單代表進階使用者,內含IP位址從192.168.0.2到192.168.0.10的所有電腦:

acl advance 192.168.0.2-192.168.0.20/32

下面這個baduser清單只包括一台電腦,其IP位址是192.168.0.100:

acl baduser 192.168.0.100/32

ACL寫完後,接下來要對它們分別進行管理,代碼如下:

http_access deny baduser http_access allow advance http_access allow normal

上面幾行代碼告訴Squid不容許baduser組訪問Internet,但advance、normal組容許(此時還沒有指定詳細的權限)。由 於 Squid是按照順序讀取規則,會首先禁止baduser,然後容許normal。如果將兩條規則順序顛倒,由於baduser在normal範圍中, Squid先容許了所有的normal,那麼再禁止baduser就不會起作用。

特別要注意的是,Squid將使用allow-deny-allow-deny……這樣的順序套用規則。例如,當一個使用者訪問代理伺服器時, Squid會順序測試Squid中定義的所有規則清單,當所有規則都不符合時,Squid會使用與最後一條相反的規則。

就像上面這個例子,假設有一個使用者 的IP位址是192.168.0.201,他試圖通過這台代理伺服器訪問Internet,會發生什麼情況呢?我們會發現,他能夠標準訪問,因為 Squid找遍所有訪問清單也沒有和192.168.0.201有關的定義,便開始應用規則,而最後一條是deny,那麼Squid預設的下一筆處理規則 是allow,所以192.168.0.201反而能夠訪問Internet了,這顯然不是我們希望的。所以在所有squid.conf中,最後一條規則 永遠是http_access deny all,而all就是前面定義的「src 0.0.0.0」。

進階控制

前面說過,Squid的控制功能非常強大,只要理解Squid的行為模式,基本上就能夠滿足所有的控制要求。下面就一步一步來瞭解Squid是如何進行控制管理的。

通過IP位址來識別使用者很不可靠,比IP位址更好的是網路卡的MAC物理位址。要在Squid中使用MAC位址識別,必須在編譯時加上「--enable-arp-acl」選項,然後可以通過以下的語句來識別使用者:

acl advance arp 00:01:02:1f:2c:3e 00:01:02:3c:1a:8b ...

它直接使用使用者的MAC位址,而MAC位址一般是不易修改的,即使有普通使用者將自己的IP位址改為進階使用者也無法通過,所以這種模式比IP位址可靠得多。

假如不想讓使用者訪問某個網站應該怎麼做呢?可以分為兩種情況:一種是不容許訪問某個站台的某個主電腦,比如ok的主電腦是ok.sina.com.cn,而其它的新浪資源卻是容許訪問的,那麼ACL可以這樣寫:

acl sinapage dstdomain ok.sina.com.cn ... ... http_access deny ok ... ...

page
    另一種情況是整個網站都不許訪問,那麼只需要寫出這個網站共有的功能變數名即可,配置如下:

acl qq dstdomain .tcccent.com.cn

注意tcccent前面的「.」,正是它指出以此功能變數名結尾的所有主電腦都不可訪問,否則就只有tcccent.com.cn這一台主電腦不能訪問。

如果想禁止對某個IP位址的訪問,如202.118.2.182,可以用dst來控制,代碼如下:

acl badaddr dst 202.118.2.182

當然,這個dst也可以是功能變數名,由Squid查詢DNS伺服器將其轉換為IP。

還有一種比較廣泛的控制是檔案類型。如果不希望普通使用者通過代理伺服器下載MP3、AVI等檔案,完全可以對他們進行限制,代碼如下:

acl mmxfile urlpath_regex .mp3$ .avi$ .exe$ http_access deny mmxfile

看到regex,很多讀者應該心領神會,因為這條語句使用了標準的規則表達式(又叫正則表達式)。它將符合所有以.mp3、.avi等結尾的URL請求,還可以用-i參數忽略大小寫,例如以下代碼:

acl mmxfile urlpath_regex -i .mp3$

這樣,無論是.mp3還是.MP3都會被拒絕。當然,-i參數適用於任何可能需要區分大小寫的地方,如前面的功能變數名控制。

如果想讓普通使用者只在上班時間可以上網,而且是每週的工作日,用Squid應當如何處理呢?看看下面的ACL定義:

acl worktime time MTWHF 8:30-12:00 14:00-18:00 http_access deny !worktime

首先定義容許上網的時間是每週工作日(星期一至星期五)的上午和下午的固定時段,然後用http_access 定義所有不在這個時間段內的請求都是不容許的。

或是為了保證進階使用者的頻寬,希望每個使用者的並發連線不能太多,以免影響他人,也可以通過Squid控制,代碼如下:

acl conncount maxconn 3 http_access deny conncount normal http_access allow normal

這樣,普通使用者在某個固定時刻只能同時發起三個連線,從第四個開始,連線將被拒絕。

總之,Squid的ACL配置非常靈活、強大,更多的控制模式可以參考squid.conf.default。

認證

使用者/密碼認證為Squid管理提供了更多便利,最常用的認證模式是NCSA。從Squid 2.5版本開始,NCSA認證包括在了basic中,而非以前單獨的認證模組。下面來看看實現認證的具體操作。

首先在編譯時配置選項應內含以下配置:

--enable-auth="basic" --enable-basic-auth-helpers="NCSA"

page
    「make install」以後,需要將「helpers/basic_auth/NCSA/ncsa_auth」複製到使用者可執行目錄中,如/usr/bin(如 果在該目錄中找不到這個執行檔案,在編譯時請使用make all而不是make,或是直接在該目錄中執行make),然後需要借助Apache的密碼管理程式htpasswd來生成使用者名/密碼對應的檔案,就像 下面這行代碼:

htpasswd -c /var/squid/etc/password guest

在輸入兩遍guest使用者的密碼後,一個guest使用者就生成了。如果以後需要加入使用者,把上面的指令去掉-c參數再運行即可。

Squid 2.5在認證處理上有了較大的改變,這裡就只討論2.5版本的處理方法,2.4及以下版本請參考squid.conf.default。在2.5版的squid.conf中,內含以下幾個關聯選項:

該選項指出了認證模式(basic)、需要的程式(ncsa_auth)和對應的密碼檔案(password)

auth_param basic program /usr/bin/ncsa_auth /var/squid/etc/password

指定認證程式的程式數

auth_param basic children 5

瀏覽器顯示輸入使用者/密碼對話框時的領功能變數內容

auth_param basic realm My Proxy Caching Domain

基本的認證有效時間

auth_param basic credentialsttl 2 hours

普通使用者需要通過認證才能訪問Internet

acl normal proxy_auth REQUIRED http_access allow normal

通過以上的配置即可完成認證工作。有的讀者可能要問:認證只針對普通使用者,而進階使用者是直接上網的,該怎麼處理呢?其實,這兩種使用者是可以共存的。

如 前所述,Squid是順序處理http_access的,所以在http_access處理過程中,如果先處理normal使用者,那麼現用的使用者無論是否屬 於進階使用者,都會被要求進行認證;相反如果先處理進階使用者,剩下的就只有需要認證的普通使用者了。例如以下配置代碼:

... http_access allow normal (需要認證) http_access allow advance (不需要認證) ...

不管是否為noauth使用者,都要求進行使用者名/密碼驗證。正確的方法是將二者位置交換,代碼如下:

... http_access allow advance http_access allow normal ...

這時,進階使用者不會受到任何影響。

總結

下面把整個squid.conf總結一下:

伺服器配置

http_port 192.168.0.1:3128 cache_mgr start@por.com cache_dir null /tmp cache_access_log /var/squid/access.log cache_log /var/squid/cache.log cache_store_log /var/squid/store.log visible_hostname No1.proxy client_mask 255.255.255.255 httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_user_host_header on

使用者分類

acl advance arp 00:01:02:1f:2c:3e 00:01:02:3c:1a:8b ... acl normal proxy_auth REQUIED acl all src 0.0.0.0

行為分類

acl mmxfile urlpath_regex .mp3$ .avi$ .exe$ acl conncount maxconn 3 acl worktime time MTWHF 8:30-12:00 14:00-18:00 acl sinapage dstdomain ok.sina.com.cn acl qq dstdomain .tcccent.com.cn

處理

http_access allow advance http_access deny conncount normal http_access deny !worktime http_access deny mmxfile http_access deny sinapage http_access deny qq http_access allow normal

配置後的狀況是,advance組可以不受任何限制地訪問Internet,而normal組則只能在工作時間上網,而且不能下載多媒體檔案,不能訪問某些特定的站台,而且傳送請求不能超過3個。

通過本文的介紹,它可以瞭解Squid的基本能力。當然,它的能力遠不止此,可以建立強大的代理伺服器陣列,可以說明本地的Web伺服器提高效能,可以提高本地網路的安全性等。要想發揮它的功效,還需要進一步控制。
本PHP程式設計+MySQL資料庫+Dreamweaver整合教學(PHPMaker運用設計網站教學)密訓基地立志於收集各類PHP程式設計、MySQL資料庫及網頁設計技術教學資訊,便於本人和廣大網友及網友查詢檢索,無論公司或個人認為本站存在侵權內容均可與本站聯繫,任何此類反饋資訊一經查明屬實後,將立即移除!