PHP語言在服務器是
解釋執行的,就是說一個
PHP文件(純文本)直接放在服務器上,PHP將他執行後輸出(一般來說結果是Html代碼)
1、嵌入方法:
類似ASP的<%,PHP可以是<?php或者是<?,結束符號是?>,所有的PHP代碼放在它們之中,之外的部分則會直接作為結果輸出 2、引用文件:
引用文件的方法有兩種:require 及 include。
require 的使用方法如 require("MyRequireFile.PHP");
include 使用方法如 include("MyIncludeFile.PHP"); 它們之間的區別:
a)require是編譯之前就讀取目標文件,include是運行到這條語句的時候才讀取目標文件
b)require的目標文件如果無法讀取或者有語法錯誤會造成Fatal error(嚴重錯誤)導致運行中止
include的目標文件出錯會造成Warning級別的錯誤,程序繼續運行一般來說,屬於程序體通用代碼如函數、類定義、通用代碼等的使用require,屬於緩存等其他目的的用include TIP: 也可以用require_once 和 include_once,區別在於相同文件不會重復被包含
PHP的容錯處理:在語句前加@即可屏蔽該語句的出錯信息,另外參閱手冊error_reporting函數
3、注釋方法:
<?PHP
echo "這是第一種例子。\n" ; // 本例是 C++ 語法的注釋
/* 本例采用多行的
注釋方式 */
echo "這是第二種例子。\n" ;
echo "這是第三種例子。\n" ; # 本例使用 UNIX Shell 語法注釋 ?> 復制代碼
4、變量類型:
$mystring = "我是字符串" ;
$NewLine = "換行了\n" ;
$int1 = 38 ;
$float1 = 1.732 ;
$float2 = 1.4E+2 ;
$MyArray1 = array( "子" , "丑" , "寅" , "卯" );
這裡引出兩個問題,首先PHP變量以$開頭,第二PHP語句以;結尾
數組問題另述 5、運算符號: + 加法運算 * 乘法運算 % 取余數 -- 遞減 運算符號只有一個,就是英文的句號。它可以將字符串連接起來,變成合並的新字符串
<?
$a = "PHP" ;
$b = "功能強大" ;
echo $a.$b;
?>
這裡也引出兩個問題,首先PHP中輸出語句是echo,第二類似ASP中的<%=變量%>,PHP中也可以<?=變量? >。 符號 意義
< 小於
> 大於
<= 小於或等於
>= 大於或等於 != 不等於
&& 而且 (And)
and 而且 (And)
|| 或者 (Or)
or 或者 (Or)
xor 異或 (Xor)
! 不 (Not) 參閱:手冊運算符部分
嗯,上面的部分是網上找的再抄抄改改的,下面開始YC了 6、流程控制、語法
if
switch
for
while
do ... while ...
continue
break 以上同C 函數聲明
function function_name($argument1, $argument2 = 'default') { } 類聲明
class student extends human {
var $stu_no;
function study() { }
} foreach($array as $key => $value) 循環體;
foreach($array as $value) 循環體;
對數組進行遍歷
7、數組
PHP的數組其實類似哈希表或字典,可以用字符串做所應
初始化時可以用=>指定索引和值
$array = array(
'key1' => 'value1',
'key2' => 'value2'
); 復制代碼
常用數組相關函數 請參考手冊
explode implode
in_array count 8、字符串
PHP的字符串的重要特性是雙引號中的字符串會被解析,例子↓
$v = '[i am v]';
$a = array('key'=>'[value]');
$aa = array('key2' => $a);
echo "$v\n$a[key]\n{$a['key']}\n$aa[key2][key]\n{$aa[key2][key]}"; 復制代碼
就是雙引號的字符串會自動尋找其中變量進行替換,為了防止歧義可以用花括弧包含變量名,例子將會輸出如下內容
[i am v]
[value]
[value]
Array[key]
[value]
字符串常用函數
substr strlen
str_replace strstr preg_match preg_match_all
preg_replace 9.數 intval ceil
abs mt_rand
max min 10.文件處理
PHP支持經典的fopen等系列語句,但也有更簡單直接的file_put_contents和file_get_contents處理文件
另外在服務器配置允許的情況下文件處理的路徑都可以寫http://xxxxxxxxxxx fopen file_get_contents file_put_contents
file_exists filemtime
move_uploaded_file 11.輸出相關(額……好像有點太後面了,想到哪裡寫到哪裡……)
嗯,前面已經出現過很多的echo就是輸出語句(其實不是個函數) print_r var_dump
另外要在PHP代碼中輸出還可以直接用<? ?>,例如
<?PHP
if(sth is true) {
?> TRUE <?
} else {
?> FALSE<?
}
?> 復制代碼
另外輸出可以使用緩存(一般的作用是把輸出攔截成變量繼續處理或者儲存下來) ob_start ob_end_clean ob_get_contents 12.輸入相關
接受到的POST、GET、CookIE請求分別存放於
$_POST $_GET $_COOKIE $_FILES
中,可以用print_r自己實驗一下
<? print_r($_POSTS); ?><form method="post">xxxxxxxx</form> 復制代碼
13.系統變量、超級全局變量
嗯,提到了$_POST眾,那麼講一下常用的幾個系統變量 $_SESSION 存放PHP session數據,參考手冊 session_start
$_SERVER 存放服務器等相關的信息,可以print_r實際看一下
$_ENV 存放環境相關信息以及
$GLOBALS
這個系統變量就涉及PHP的全局變量局部變量的問題了
PHP默認所有的變量都是Global的也就是可以通過$GLOBALS這個數組訪問到,但函數內部無法直接用$var_name的方式訪問到外部的全局變量,直接用$var_name的話訪問到的是函數內部的局部變量
在函數內部引用外部的全局變量有2種方式 global $var_name;
$var_name = xxxxx;
另一種是使用系統變量$GLOBALS
$GLOBALS['var_name'] = xxxxx; 能在函數內部無需聲明直接訪問到外部的變量(超級全局變量)一共有九個
$GLOBALS
$_SERVER
$_GET
$_POST
$_FILES
$_COOKIE
$_SESSION
$_REQUEST
$_ENV
其中唯一沒介紹的$_REQUEST其實就是$_GET $_POST 和 $_COOKIE的合體
14.數據庫
PHP 使用My_SQL數據庫,當然也支持ODBC方式等各種形式的其他數據庫,但My_SQL是結合最緊使用最方便的關於連接、使用數據庫,我就簡單貼上Discuz的類的源代碼大家看看就好(其實一般來說照抄這部分沒什麼問題) 跳過此文件的源碼 http://10.48.13.111/bbs/vIEwthread.PHP?tid=4&page=1#pid52
<?PHP
/*
[Discuz!] (C)2001-2009 Comsenz Inc.
This is NOT a freeware, use is subject to license terms
$Id: db_MySQL.class.PHP 16688 2008-11-14 06:41:07Z cnteacher $
*/
if(!defined('IN_DISCUZ')) {//是否定義過IN_DISCUZ,參閱手冊 define 這裡的用處是確認這個腳本是被DIscuz的其他腳本所require或include 的
exit('Access DenIEd');//exit語句輸出傳進去的內容以後就會中止PHP文件的運行
}
class dbstuff {//類定義,因為這個類比較簡單,所以沒什麼好說的,所有成員默認均為public
var $version = '';
var $querynum = 0;
var $link = null;
function connect($dbhost, $dbuser, $dbpw, $dbname = '', $pconnect = 0, $halt = TRUE, $dbcharset2 = '') {
$func = empty($pconnect) ? 'mysql_connect' : 'MySQL_pconnect';
if(!$this->link = @$func($dbhost, $dbuser, $dbpw, 1)) {
/*@的作用是屏蔽出錯信息,$func(xxxx)是動態函數調用的意思,如果$func的內容是mysql_connect,這裡就相當於MySQL_connect(xxxxxxxxx)
順帶說一下變量也可以這樣動態調用
$a = 'content';
$v = 'a';
echo $$v;
會輸出『content』
*/
$halt && $this->halt('Can not connect to MySQL Server');//相當於if語句,這個其實C裡面也可以這麼干的
} else {
if($this->version() > '4.1') {//這段是字符集處理,看看就好
global $charset, $dbcharset;
$dbcharset = $dbcharset2 ? $dbcharset2 : $dbcharset;
$dbcharset = !$dbcharset && in_array(strtolower($charset), array('gbk', 'big5', 'utf-8')) ? str_replace('-', '', $charset) : $dbcharset;
$serverset = $dbcharset ? 'character_set_connection='.$dbcharset.', character_set_results='.$dbcharset.', character_set_clIEnt=binary' : '';
$serverset .= $this->version() > '5.0.1' ? ((empty($serverset) ? '' : ',').'sql_mode=\'\'') : '';
$serverset && MySQL_query("SET $serverset", $this->link);
}
$dbname && @MySQL_select_db($dbname, $this->link);
}
}
function select_db($dbname) {
return MySQL_select_db($dbname, $this->link);
}
function fetch_array($query, $result_type = MySQL_ASSOC) {
return MySQL_fetch_array($query, $result_type);
}
function fetch_first($sql) {
return $this->fetch_array($this->query($sql));
}
function result_first($sql) {
return $this->result($this->query($sql), 0);
}
function query($sql, $type = '') {//執行查詢
global $debug, $discuz_starttime, $sqldebug, $sqlspenttimes;
if(defined('SYS_DEBUG') && SYS_DEBUG) {//開發時才用的Debug……選擇性無視即可
@include_once DISCUZ_ROOT.'./include/debug.func.PHP';
sqldebug($sql);
}
$func = $type == 'UNBUFFERED' && @function_exists('MySQL_unbuffered_query') ?
'mysql_unbuffered_query' : 'MySQL_query';
if(!($query = $func($sql, $this->link))) {//嘗試執行查詢,如果失敗,那麼進行下面的失敗處理
if(in_array($this->errno(), array(2006, 2013)) && substr($type, 0, 5) != 'RETRY') {//重試
$this->close();
require DISCUZ_ROOT.'./config.inc.PHP';
$this->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect, true, $dbcharset);
$this->query($sql, 'RETRY'.$type);
} elseif($type != 'SILENT' && substr($type, 5) != 'SILENT') {
$this->halt('MySQL Query Error', $sql);
}
}
$this->querynum++;//記錄本次腳本運行的查詢總次數
return $query;
}
function affected_rows() {
return MySQL_affected_rows($this->link);
}
function error() {
return (($this->link) ? mysql_error($this->link) : MySQL_error());
}
function errno() {
return intval(($this->link) ? mysql_errno($this->link) : MySQL_errno());
}
function result($query, $row = 0) {
$query = @MySQL_result($query, $row);
return $query;
}
function num_rows($query) {
$query = MySQL_num_rows($query);
return $query;
}
function num_fIElds($query) {
return MySQL_num_fIElds($query);
}
function free_result($query) {
return MySQL_free_result($query);
}
function insert_id() {
return ($id = MySQL_insert_id($this->link)) >= 0 ? $id : $this->result($this->query("SELECT last_insert_id()"), 0);
}
function fetch_row($query) {
$query = MySQL_fetch_row($query);
return $query;
}
function fetch_fIElds($query) {
return MySQL_fetch_fIEld($query);
}
function version() {
if(empty($this->version)) {
$this->version = MySQL_get_server_info($this->link);
}
return $this->version;
}
function close() {
return MySQL_close($this->link);
}
function halt($message = '', $sql = '') {//SQL錯誤信息輸出
define('CACHE_FORBIDDEN', TRUE);
require_once DISCUZ_ROOT.'./include/db_MySQL_error.inc.PHP';
}
}
?>
復制代碼
關於SQL數據庫,一般可以使用phpMyAdmin進行管理、導入導出等日常操作,phpMyAdmin是使用最廣泛的管理MySQL用的PHP開源程序 MySQL基本支持常用的SQL語言,參閱 Google: MySQL教程