php預約義變量,超全局變量,魔術方法,特殊函數變量使用

<?php
/*
 * 本代碼所有爲測試函數代碼,部分註釋和寫實例
 * 
 * 修改php.ini variables_order=」EGPCS」
 * 請注意$_REQUEST在優先級傳參的時候會形成數據被覆蓋,出現重大bug,建議不要使用
 * 
 * 請注意一下是重要的一些超全局參數並非所有的
 * 
 * 軟件所有都是編譯安裝,/usr/local/php  
 * 
 * 
 * 
 */
header("Content-type:text/html;charset=utf-8");

echo $_SERVER['PHP_SELF'];//返回當前執行腳本的文件名。
echo '<br><br><br>';

echo $_SERVER['GATEWAY_INTERFACE'];//返回服務器使用的 CGI 規範的版本
echo '<br><br><br>';

echo $_SERVER['SERVER_ADDR'];//返回當前運行腳本所在的服務器的 IP 地址
echo '<br><br><br>';

echo $_SERVER['SERVER_NAME'];//返回當前運行腳本所在的服務器的主機名
echo '<br><br><br>';

echo $_SERVER['SERVER_SOFTWARE'];//返回服務器標識字符串
echo '<br><br><br>';

echo $_SERVER['SERVER_PROTOCOL'];//返回請求頁面時通訊協議的名稱和版本
echo '<br><br><br>';

echo $_SERVER['REQUEST_METHOD'];//返回訪問頁面使用的請求方法
echo '<br><br><br>';

echo $_SERVER['REQUEST_TIME'];//返回請求開始時的時間戳
echo '<br><br><br>';

//echo $_SERVER['QUERY_STRING'];//返回查詢字符串,若是是經過查詢字符串訪問此頁面
//echo '<br><br><br>';

echo $_SERVER['HTTP_ACCEPT'];//返回來自當前請求的請求頭
echo '<br><br><br>';

//echo $_SERVER['HTTP_ACCEPT_CHARSET'];//返回來自當前請求的 Accept_Charset 頭字符集
//echo '<br><br><br>';

echo $_SERVER['HTTP_HOST'];//返回來自當前請求的 Host 頭
echo '<br><br><br>';

//echo $_SERVER['HTTP_REFERER'];//返回當前頁面的完整 URL(不可靠,由於不是全部用戶代理都支持)
//echo '<br><br><br>';

//echo $_SERVER['HTTPS'];//是否經過安全 HTTP 協議查詢腳本
//echo '<br><br><br>';

echo $_SERVER['REMOTE_ADDR'];//返回瀏覽當前頁面的用戶的 IP 地址
echo '<br><br><br>';

//echo $_SERVER['REMOTE_HOST'];//返回瀏覽當前頁面的用戶的主機名
//echo '<br><br><br>';

echo $_SERVER['REMOTE_PORT'];//返回用戶機器上鍊接到 Web 服務器所使用的端口號
echo '<br><br><br>';

echo $_SERVER['SCRIPT_FILENAME'];//返回當前執行腳本的絕對路徑
echo '<br><br><br>';

echo $_SERVER['SERVER_ADMIN'];//該值指明瞭 Apache 服務器配置文件中的 SERVER_ADMIN 參數
echo '<br><br><br>';

echo $_SERVER['SERVER_PORT'];//Web 服務器使用的端口。默認值爲 「80」
echo '<br><br><br>';

echo $_SERVER['SERVER_SIGNATURE'];//返回服務器版本和虛擬主機名
echo '<br><br><br>';

//echo $_SERVER['PATH_TRANSLATED'];//當前腳本所在文件系統(非文檔根目錄)的基本路徑
//echo '<br><br><br>';

//echo $_SERVER['SCRIPT_NAME'];//返回當前腳本的路徑
//echo '<br><br><br>';

//echo $_SERVER['SCRIPT_URI'];//返回當前頁面的 URI
//echo '<br><br><br>';

echo $_SERVER["DOCUMENT_ROOT"];//返回當前執行腳本的文件名。
echo '<br><br><br>';

//查看全部$_SERVER全部目前可使使用的參數var_dump($_SERVER);就能夠看到
/*
 * 
 * 下面是PHP內置的預約義常量
 * 
 * 這個也不是完整版,根據你php.ini配置會有些不一樣
 * 
 * 請注意官方的文檔中文版本和英文版本的函數數量不同,多是翻譯的時候沒翻譯徹底
 * 
 */

echo PHP_VERSION;//返回當前執行腳本的文件名。
echo '<br><br><br>';

//if(version_compare(PHP_VERSION,'5.3.0','<'))  die('require PHP > 5.3.0 !');//很常見判斷服務器版本是否是符合程序腳本



echo PHP_OS;//當前系統類型
echo '<br><br><br>';

echo PHP_SAPI;//查看當前php運行模式,cgi-fcgi,apache2handler,cli,請注意fcgi不僅是php-fpm+nginx,在apache下也是能夠做爲fcgi模式運行的
echo '<br><br><br>';

echo PHP_INT_MAX;//int類型的最大值
echo '<br><br><br>';

echo PHP_ZTS;//未知
echo '<br><br><br>';

echo PHP_DEBUG;//是都開始debug
echo '<br><br><br>';

echo PHP_MAXPATHLEN;//最大路徑長度支持
echo '<br><br><br>';

echo DEFAULT_INCLUDE_PATH;//默認包含路徑,
echo '<br><br><br>';

echo PEAR_INSTALL_DIR;//php官方主擴展與應用庫的路徑
echo '<br><br><br>';

echo Get_Current_User();//獲取當前進程的用戶名
echo '<br><br><br>';

echo Zend_Version();//zend引擎版本
echo '<br><br><br>';

echo PEAR_EXTENSION_DIR;//php非官方擴展與應用庫的路徑
echo '<br><br><br>';

echo PHP_EXTENSION_DIR ;//php擴展linux.so windows.dll庫
echo '<br><br><br>';

echo PHP_PREFIX;//php安裝路徑,linux和windows不一樣,請注意
echo '<br><br><br>';

echo PHP_BINDIR;//php bin目錄
echo '<br><br><br>';

echo PHP_LIBDIR;//php lib庫文件目錄
echo '<br><br><br>';


echo PHP_DATADIR;//php共享數據目錄 ${prefix}/share
echo '<br><br><br>';

echo PHP_SYSCONFDIR;//php配置文件目錄 /usr/local/php/etc 注意編譯的時候若是不是這個目錄請到默認的/etc/php.ini
echo '<br><br><br>';

echo PHP_LOCALSTATEDIR;//php本地var目錄,默認存放日誌和pid文件的路徑
echo '<br><br><br>';

echo PHP_CONFIG_FILE_PATH;//php如今運行配置文件目錄 /etc
echo '<br><br><br>';

echo PHP_CONFIG_FILE_SCAN_DIR;//php腳本文件路徑
echo '<br><br><br>';


echo PHP_SHLIB_SUFFIX;//php擴展文件後綴,linux是so.windows是dll
echo '<br><br><br>';

echo PHP_OUTPUT_HANDLER_START;//是否打開頁面緩衝區,和ob_start系列函數相關
echo '<br><br><br>';

echo PHP_OUTPUT_HANDLER_CONT;//緩衝區輸出大小
echo '<br><br><br>';

echo PHP_OUTPUT_HANDLER_END;//緩衝區結束
echo '<br><br><br>';

echo E_ERROR;//通常是嚴重錯誤報告
echo '<br><br><br>';


echo E_WARNING;//通常是警告報告
echo '<br><br><br>';

echo E_PARSE;//語法解析方面的錯誤
echo '<br><br><br>';

echo E_NOTICE;//提示類型報告
echo '<br><br><br>';

echo E_CORE_ERROR;//致命錯誤報告
echo '<br><br><br>';

echo E_CORE_WARNING;//非致命php警告
echo '<br><br><br>';

echo E_COMPILE_ERROR ;//致命編譯錯誤
echo '<br><br><br>';

echo E_COMPILE_WARNING;//編譯警告
echo '<br><br><br>';

echo E_USER_ERROR;//致命的用戶產生的錯誤
echo '<br><br><br>';

echo E_USER_WARNING;//非致命性的用戶生成的警告
echo '<br><br><br>';

echo E_USER_NOTICE;//用戶生成的通知
echo '<br><br><br>';


echo E_ALL;//error_reporting()設置錯誤級別 E_ALL所有錯誤
echo '<br><br><br>';

echo E_STRICT;//編碼標準化警告(建議如何修改以向前兼容)
echo '<br><br><br>';

//echo __COMPILER_HALT_OFFSET__;//__halt_compiler()函數,獲取數據開始字節所在的位置
//容許的任意的二進制代碼的內容被 Zend Framework 中的 PHP 文件或由它們產生的文件禁止。 這個功能的使用只對一些安裝腳本開放
//echo '<br><br><br>';

echo EXTR_OVERWRITE;//extract()函數,
echo '<br><br><br>';
/*
 * extract() 檢查每一個鍵名看是否能夠做爲一個合法的變量名,同時也檢查和符號表中已有的變量名的衝突。對待非法/數字和衝突的鍵名的方法將根據 extract_type 參數決定。能夠是如下值之一:

EXTR_OVERWRITE 
若是有衝突,覆蓋已有的變量。 
EXTR_SKIP 
若是有衝突,不覆蓋已有的變量。 
EXTR_PREFIX_SAME 
若是有衝突,在變量名前加上前綴 prefix 。 
EXTR_PREFIX_ALL 
給全部變量名加上前綴 prefix 。自 PHP 4.0.5 起這也包括了對數字索引的處理。 
EXTR_PREFIX_INVALID 
僅在非法/數字的變量名前加上前綴 prefix 。本標記是 PHP 4.0.5 新加的。 
EXTR_IF_EXISTS 
僅在當前符號表中已有同名變量時,覆蓋它們的值。其它的都不處理。能夠用在已經定義了一組合法的變量,而後要從一個數組例如 $_REQUEST 中提取值覆蓋這些變量的場合。本標記是 PHP 4.2.0 新加的。 
EXTR_PREFIX_IF_EXISTS 
僅在當前符號表中已有同名變量時,創建附加了前綴的變量名,其它的都不處理。本標記是 PHP 4.2.0 新加的。 
EXTR_REFS 
將變量做爲引用提取。這有力地代表了導入的變量仍然引用了 var_array 參數的值。能夠單獨使用這個標誌或者在 extract_type 中用 OR 與其它任何標誌結合使用。本標記是 PHP 4.3.0 新加的。 
若是沒有指定 extract_type ,則被假定爲 EXTR_OVERWRITE。

注意 prefix 僅在 extract_type 的值是 EXTR_PREFIX_SAME,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS 時須要。若是附加了前綴後的結果不是合法的變量名,將不會導入到符號表中。前綴和數組鍵名之間會自動加上一個下劃線。

extract() 返回成功導入到符號表中的變量數目。
 * 
 * 
 */
echo E_RECOVERABLE_ERROR;//獲的致命錯誤。這就像一個e_error但能夠經過一個用戶定義的被處理
echo '<br><br><br>';

/*
 * 
 * 下面是幾個 PHP 的「魔術常量」
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 */



echo __LINE__;//返回當前執行腳本的行號
echo '<br><br><br>';

echo __FILE__;//返回當前執行腳本的全路徑文件名。
echo '<br><br><br>';

echo __DIR__;//返回當前執行腳本的文件的路徑。
echo '<br><br><br>';

class trick
{
      function dog()
      {
                echo __FUNCTION__;//返回當前方法名稱
      }
      function cat()
      {
                echo __METHOD__;//返回當前使用的類的方法名稱
      }
}
$obj=new trick();
$obj->dog();
echo '<br>';
$obj->cat();
echo '<br><br><br>';

/*
 * 
 * 引用php手冊實例
 * 
 * 
 */

trait PeanutButter {
    function traitName() {echo __TRAIT__;}
}

trait PeanutButterAndJelly {
    use PeanutButter;
}

class Test {
    use PeanutButterAndJelly;
}

(new Test)->traitName();
echo '<br><br><br>';




echo __NAMESPACE__;//返回當前執行腳本的定義的空間命名。
echo '<br><br><br>';

/*
 * 
 * php魔術方法
 * 
 * 
 * 
一、__construct() 
實例化對象時被調用, 當__construct和以類名爲函數名的函數同時存在時,__construct將被調用,另外一個不被調用。 

二、__destruct() 
當刪除一個對象或對象操做終止時被調用。 

三、__call() 
對象調用某個方法, 若方法存在,則直接調用;若不存在,則會去調用__call函數。 

四、__get() 
讀取一個對象的屬性時,若屬性存在,則直接返回屬性值; 若不存在,則會調用__get函數。 

五、__set() 
設置一個對象的屬性時, 若屬性存在,則直接賦值; 
若不存在,則會調用__set函數。 

六、__toString() 
打印一個對象的時被調用。如echo $obj;或print $obj; 

七、__clone() 
克隆對象時被調用。如:$t=new Test();$t1=clone $t; 

八、__sleep() 
serialize以前被調用。若對象比較大,想刪減一點東東再序列化,可考慮一下此函數。 

九、__wakeup() 
unserialize時被調用,作些對象的初始化工做。 

十、__isset() 
檢測一個對象的屬性是否存在時被調用。如:isset($c->name)。 

十一、__unset() 
unset一個對象的屬性時被調用。如:unset($c->name)。 

十二、__set_state() 
調用var_export時,被調用。用__set_state的返回值作爲var_export的返回值。 

1三、__autoload() 
實例化一個對象時,若是對應的類不存在,則該方法被調用。
 * 
 * 
 */






/*
 * 
 * 超全局變量
 * 
 * 
1.$GLOBALS 
2.$_SERVER  參看樓上
3.$_GET    根據method="get",有發送密碼不建議使用
4.$_POST 
5.$_FILES 
6.$_COOKIE  setcookie
7.$_SESSION 
8.$_REQUEST  $_REQUEST 能夠接受post和get傳過來的參數,可是請注意variables_order=」EGPCS」支持哪些,還有優先級,
 * 否則會出現數據覆蓋,獲取過來的值以數組方式傳遞
9.$_ENV   
 * 
 * 代碼請單獨放在頁面測試,否則會有衝突
 */

//$GLOBALS 的使用必須開啓 register_globals 指令被設置爲 on  $GLOBALS 和 global的使用

/*
$a = 1;
$b = 2;

function Sum()
{
    global $a, $b;

    $b = $a + $b;
}

Sum();
echo $b;
 * 
 */

/*
 * 
 * 
$a = 1;
$b = 2;

function Sum()
{
    $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}

Sum();
echo $b;
 */


/*
 * 
 * $_GET $_POST 
「Superglobal」也稱爲自動化的全局變量。這就表示其在腳本的全部做用域中都是可用的。不須要在函數或方法中用 global $variable; 來訪問它。
GET 是經過 urldecode() 傳遞的
傳送數據量較小,不能大於2KB
 * 
 * GET通常用於獲取/查詢 資源信息,而POST通常用於更新資源信息
 * 
 * POST提交:把提交的數據放置在是HTTP包的包體中。須將Content-type設置爲:application/x-www-form-urlencoded
 * 
 * $_GET是經過 urldecode()來實現的
 * 
 */

/*
 * $_FILES
 * 
 * 注意文件提交必須使用
 * enctype="multipart/form-data"
 *
 * 
 * <form action="__URL__"  enctype="multipart/form-data" method="post">
             <input type="file" name="pic1"  /> <br>
             <input type="file" name="pic2"  /> <br>
             <input type="file" name="pic3"  /> <br>
             <input type="submit" value="上傳" />
        </form>
 * name就是你提交的這個
 * 
 * var_dump($_FILES);就能夠看到接受的全部的文件值
 * 
 * 
 * $_FILES['XX']['name']上傳的文件名
 * $_FILES['XX']['type']文件後綴類型,注意不能直接用作新文件名的後綴
 * $_FILES['XX']['tmp_name']服務器臨時的文件名稱
 * $_FILES['XX']['error']錯誤碼
 * $_FILES['XX']['size']文件大小
 * 
 * 
  UPLOAD_ERR_OK             值:0; 沒有錯誤發生,文件上傳成功。
  UPLOAD_ERR_INI_SIZE      值:1; 上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值。
  UPLOAD_ERR_FORM_SIZE  值:2; 上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。
  UPLOAD_ERR_PARTIAL          值:3; 文件只有部分被上傳。
  UPLOAD_ERR_NO_FILE          值:4; 沒有文件被上傳。    值:5; 上傳文件大小爲0.
 * 
 * 
 * 拼接新的文件路徑
 * 
 * 下面是參考代碼
 * 
 * 
 * 
 * if(is_uploaded_file($_FILES['pic']['tmp_name'])){
    //echo 'OK';
    $dir = "./upload/".date("Ymd",time());
            if(!is_dir($dir)){
                mkdir($dir,0777);
                chmod($dir, 0777);
                system('chmod 0777 $dir');
            }
      $file_name = time().rand(100, 1000000);
      $pinfo=pathinfo($_FILES['pic']['name']);  
      $type = $pinfo['extension'];  
    $destination = $dir."/".$file_name.".".$type;
    
    
    if(move_uploaded_file($_FILES['pic']['tmp_name'], $destination)){
        echo "upload - OK";
        echo $destination;
    }  else {
        echo $_FILES["pic"]["error"];
    }
}
 * 
 * 
 * 
 * 
 */

/*
 * $_SESSION
 * 
 * 全部函數
 * 
1.session_abort — Discard session array changes and finish session
1.session_abort — 廢棄session數組,並編輯和銷燬
2.session_cache_expire — 返回當前緩存的到期時間
3.session_cache_limiter — 讀取/設置緩存限制器
4.session_commit — session_write_close 的別名
5.session_decode — 解碼會話數據
6.session_destroy — 銷燬一個會話中的所有數據
7.session_encode — 將當前會話數據編碼爲一個字符串
8.session_get_cookie_params — 獲取會話 cookie 參數
9.session_id — 獲取/設置當前會話 ID
10.session_is_registered — 檢查變量是否在會話中已經註冊
11.session_module_name — 獲取/設置會話模塊名稱
12.session_name — 讀取/設置會話名稱
13.session_regenerate_id — 使用新生成的會話 ID 更新現有會話 ID
14.session_register_shutdown — 關閉會話
15.session_register — Register one or more global variables with the current session
15.session_register — 在當前session註冊一個或者多個全局變量
16.session_reset — Re-initialize session array with original values
16.session_reset — 從新初始化會話陣列的原始值
17.session_save_path — 讀取/設置當前會話的保存路徑
18.session_set_cookie_params — 設置會話 cookie 參數
19.session_set_save_handler — 設置用戶自定義會話存儲函數
20.session_start — 啓動新會話或者重用現有會話
21.session_status — Returns the current session status
21.session_status — 返回當前回話狀態
22.session_unregister — Unregister a global variable from the current session
22.session_unregister —在當前會話註銷一個全局變量
23.session_unset — Free all session variables
23.session_unset — 銷燬全部session變量
24.session_write_close — Write session data and end session
24.session_write_close — 寫數據和會話結束session
 * 
 * 
 * 
 *  php.ini 裏面對session設置影響
 * 
名字 默認 可修改範圍 更新日誌 
session.save_path  "" PHP_INI_ALL   
session.name  "PHPSESSID" PHP_INI_ALL   
session.save_handler  "files" PHP_INI_ALL   
session.auto_start  "0" PHP_INI_PERDIR   
session.gc_probability  "1" PHP_INI_ALL   
session.gc_divisor  "100" PHP_INI_ALL 自 PHP 4.3.2 起可用。 
session.gc_maxlifetime  "1440" PHP_INI_ALL   
session.serialize_handler  "php" PHP_INI_ALL   
session.cookie_lifetime  "0" PHP_INI_ALL   
session.cookie_path  "/" PHP_INI_ALL   
session.cookie_domain  "" PHP_INI_ALL   
session.cookie_secure  "" PHP_INI_ALL 自 PHP 4.0.4 起有效。 
session.cookie_httponly  "" PHP_INI_ALL 自 PHP 5.2.0. 有效 
session.use_strict_mode  "0" PHP_INI_ALL 自 PHP 5.5.2. 有效 
session.use_cookies  "1" PHP_INI_ALL   
session.use_only_cookies  "1" PHP_INI_ALL 自 PHP 4.3.0 起可用。 
session.referer_check  "" PHP_INI_ALL   
session.entropy_file  "" PHP_INI_ALL   
session.entropy_length  "0" PHP_INI_ALL   
session.cache_limiter  "nocache" PHP_INI_ALL   
session.cache_expire  "180" PHP_INI_ALL   
session.use_trans_sid  "0" PHP_INI_ALL 在 PHP <= 4.2.3 是 PHP_INI_ALL,在 PHP < 5 是 PHP_INI_PERDIR。自 PHP 4.0.3 起可用。 
session.bug_compat_42  "1" PHP_INI_ALL 自 PHP 4.3.0 起可用。 
session.bug_compat_warn  "1" PHP_INI_ALL 自 PHP 4.3.0 起可用。 
session.hash_function  "0" PHP_INI_ALL 自 PHP 5.0.0 起可用。 
session.hash_bits_per_character  "4" PHP_INI_ALL 自 PHP 5.0.0 起可用。 
url_rewriter.tags  "a=href,area=href,frame=src,form=,fieldset=" PHP_INI_ALL 自 PHP 4.0.4 起可用。 
session.upload_progress.enabled  "1" PHP_INI_PERDIR Available since PHP 5.4.0. 
session.upload_progress.cleanup  "1" PHP_INI_PERDIR Available since PHP 5.4.0. 
session.upload_progress.prefix  "upload_progress_" PHP_INI_PERDIR Available since PHP 5.4.0. 
session.upload_progress.name  "PHP_SESSION_UPLOAD_PROGRESS" PHP_INI_PERDIR Available since PHP 5.4.0. 
session.upload_progress.freq  "1%" PHP_INI_PERDIR Available since PHP 5.4.0. 
session.upload_progress.min_freq  "1" PHP_INI_PERDIR Available since PHP 5.4.0. 

 * 
 * 實例只寫一個不經常使用的session方法,說句廢話,客戶端的session是基於服務器端cookies實現的
 * session_start()原聲使用必須是第一行
 * 
 * 能夠吧session的handler交接redis,爲何不交給memcache,由於memcache不提供數據恢復,redis能夠實現統一session管理
 * 跨域之類的,修改php.ini
 session.save_handler = redis  
 session.save_path = "tcp://127.0.0.1:6379"  
 * 
ini_set("session.save_handler", "redis");   
ini_set("session.save_path", "tcp://127.0.0.1:6379");    
 * 
 * ini_get()能夠獲取php.ini參數配置值
 * 
 *cookies
 * 
setcookie(name,value,expire,path,domain,secure)
name    必需。規定 cookie 的名稱。
value    必需。規定 cookie 的值。
expire    可選。規定 cookie 的有效期。
path    可選。規定 cookie 的服務器路徑。
domain    可選。規定 cookie 的域名。
secure    可選。規定是否經過安全的 HTTPS 鏈接來傳輸 cookie。
 * 
 *  在發送 cookie 時,cookie 的值會自動進行 URL 編碼。接收時會進行 URL 解碼。若是你不須要這樣,可使用 setrawcookie() 代替。
 * 
 * 
 *若是有用戶名和密碼加密字符串,二次加密(必定是可解密的方法)放入cookies,用戶再次訪問的時候再次讀取
$ss= "hello!";
setcookie("user","$ss", time()+3600);
echo $_COOKIE['user'];
 * 
 * 
 * 
 * 
 */
相關文章
相關標籤/搜索