php編程 之 php進階練習

1,php的date相關操做:

PHP date() 函數可把時間戳格式化爲可讀性更好的日期和時間。php

<?php
echo date("Y/m/d") . "<br>";  //返回2016/10/21
echo date("Y.m.d") . "<br>";    //返回2016.10.21
echo date("Y-m-d");    //返回2016-10-21
?>

注意:帶着時分秒的格式是這樣的:$t=date("Y.m.d.H.i.s")html

  調用這個函數之前,最好是先設定一下時區:date_default_timezone_set('Asia/Shanghai');(前面這句話直接加在開頭就行)前端

完整的format字符可查詢下表:
format字符 說明 返回值例子
--- ---
d 月份中的第幾天,有前導零的 2 位數字 01 到 31
D 星期中的第幾天,文本表示,3 個字母 Mon 到 Sun
j 月份中的第幾天,沒有前導零 1 到 31
l("L"的小寫字母) 星期幾,完整的文本格式 Sunday 到 Saturday
N ISO-8601 格式數字表示的星期中的第幾天(PHP 5.1.0 新加) 1(表示星期一)到 7(表示星期天)
S 每個月天數後面的英文後綴,2 個字符 stndrd 或者 th。能夠和 j 一塊兒用
w 星期中的第幾天,數字表示 0(表示星期天)到 6(表示星期六)
z 年份中的第幾天 0 到 365
星期 --- ---
W ISO-8601 格式年份中的第幾周,每週從星期一開始(PHP 4.1.0 新加的) 例如:42(當年的第 42 周)
--- ---
F 月份,完整的文本格式,例如 January 或者 March January 到 December
m 數字表示的月份,有前導零 01 到 12
M 三個字母縮寫表示的月份 Jan 到 Dec
n 數字表示的月份,沒有前導零 1 到 12
t 給定月份所應有的天數 28 到 31
--- ---
L 是否爲閏年 若是是閏年爲 1,不然爲 0
o ISO-8601 格式年份數字。這和 Y 的值相同,只除了若是 ISO 的星期數(W)屬於前一年或下一年,則用那一年。(PHP 5.1.0 新加) Examples: 1999 or 2003
Y 4 位數字完整表示的年份 例如:1999 或 2003
y 2 位數字表示的年份 例如:99 或 03
時間 --- ---
a 小寫的上午和下午值 am 或 pm
A 大寫的上午和下午值 AM 或 PM
B Swatch Internet 標準時 000 到 999
g 小時,12 小時格式,沒有前導零 1 到 12
G 小時,24 小時格式,沒有前導零 0 到 23
h 小時,12 小時格式,有前導零 01 到 12
H 小時,24 小時格式,有前導零 00 到 23
i 有前導零的分鐘數 00 到 59>
s 秒數,有前導零 00 到 59>
u 毫秒 (PHP 5.2.2 新加)。須要注意的是 date() 函數老是返回 000000 由於它只接受 integer 參數, 而 DateTime::format() 才支持毫秒。 示例: 654321
時區 --- ---
e 時區標識(PHP 5.1.0 新加) 例如:UTCGMTAtlantic/Azores
I 是否爲夏令時 若是是夏令時爲 1,不然爲 0
O 與格林威治時間相差的小時數 例如:+0200
P 與格林威治時間(GMT)的差異,小時和分鐘之間有冒號分隔(PHP 5.1.3 新加) 例如:+02:00
T 本機所在的時區 例如:ESTMDT(【譯者注】在 Windows 下爲完整文本格式,例如"Eastern Standard Time",中文版會顯示"中國標準時間")。
Z 時差偏移量的秒數。UTC 西邊的時區偏移量老是負的,UTC 東邊的時區偏移量老是正的。 -43200 到 43200
完整的日期/時間 --- ---
c ISO 8601 格式的日期(PHP 5 新加) 2004-02-12T15:19:21+00:00
r RFC 822 格式的日期 例如:Thu, 21 Dec 2000 16:01:07 +0200
U 從 Unix 紀元(January 1 1970 00:00:00 GMT)開始至今的秒數 參見 time()

2,文件相關操做:

打開文件:mysql

<?php
$file=fopen("filename.txt","r");
?>

  文件打開模式詳情見下表:sql

模式 描述
r 只讀。在文件的開頭開始。
r+ 讀/寫。在文件的開頭開始。
w 只寫。打開並清空文件的內容;若是文件不存在,則建立新文件。
w+ 讀/寫。打開並清空文件的內容;若是文件不存在,則建立新文件。
a 追加。打開並向文件末尾進行寫操做,若是文件不存在,則建立新文件。
a+ 讀/追加。經過向文件末尾寫內容,來保持文件內容。
x 只寫。建立新文件。若是文件已存在,則返回 FALSE 和一個錯誤。
x+ 讀/寫。建立新文件。若是文件已存在,則返回 FALSE 和一個錯誤。

關閉文件:fclose($filename);數據庫

檢測是否到達文件末尾:數組

if (feof($filename)) echo "文件結尾";

逐行讀取文件:瀏覽器

<?php
$file = fopen("welcome.txt", "r") or exit("沒法打開文件!");
// 讀取文件每一行,直到文件結尾
while(!feof($file))    //若是沒有到達文件末尾
{
    echo fgets($file). "<br>";    //就逐行讀取文件
}
fclose($file);    //到了末尾就關閉
?>

逐字讀取文件:編輯器

<?php
$file=fopen("welcome.txt","r") or exit("沒法打開文件!");
while (!feof($file))
{
    echo fgetc($file);    //注意,fgetc()函數,這是逐字讀取。
}
fclose($file);
?>

拓展:php讀取文件的五種方法:函數

第一種:

<?php
$file_path = "test.txt";
if(file_exists($file_path)){
$fp = fopen($file_path,"r");
$str = fread($fp,filesize($file_path));//指定讀取大小,這裏把整個文件內容讀取出來
echo $str = str_replace("\r\n","<br />",$str);
}
?>

第二種

<?php
$file_path = "test.txt";
if(file_exists($file_path)){
$str = file_get_contents($file_path);//將整個文件內容讀入到一個字符串中
$str = str_replace("\r\n","<br />",$str);
echo $str;
}
?>

第三種

<?php
$file_path = "test.txt";
if(file_exists($file_path)){
$fp = fopen($file_path,"r");
$str = "";
$buffer = 1024;//每次讀取 1024 字節
while(!feof($fp)){//循環讀取,直至讀取完整個文件
$str .= fread($fp,$buffer);
} 
$str = str_replace("\r\n","<br />",$str);
echo $str;
}
?>

第四種:

<?php
$file_path = "test.txt";
if(file_exists($file_path)){
$file_arr = file($file_path);
for($i=0;$i<count($file_arr);$i++){//逐行讀取文件內容
echo $file_arr[$i]."<br />";
}
/*
foreach($file_arr as $value){
echo $value."<br />";
}*/
}
?>

第五種:比較推薦用這個。

<?php
$file_path = "test.txt";
if(file_exists($file_path)){
$fp = fopen($file_path,"r");
$str ="";
while(!feof($fp)){
$str .= fgets($fp);//逐行讀取。若是fgets不寫length參數,默認是讀取1k。
}
$str = str_replace("\r\n","<br />",$str);
echo $str;
}
?>

3,跨文件調用函數

t1.php文件:做用在於把當前時間寫到txt文檔中,而後一行一行讀取,讀到的信息加工一下,展現出來。

<?php
function wgTime()
{
    date_default_timezone_set('Asia/Shanghai'); 
    $t=date("Y.m.d.H.i.s")."\n";
    //var_dump($t);
    $file=fopen("t1.txt","a");
    fwrite($file,$t);
    fclose($file);
    $file="t1.txt";
    if(file_exists($file)){
        $file_arr=file($file);    //行讀取
        for ($i=0;$i<count($file_arr);$i++){
            $str=explode(".",$file_arr[$i]);
            $dw=array("Y ","M ","D ","H ","I ","S ");
            for ($j=0;$j<6;$j++){
        //echo $j."序號"."<br>";
                echo $str[$j],$dw[$j];
            }
            echo "<br>";
        }
    }
}
//wgTime();    由於調用的時候會直接執行,因此要註釋掉纔好調用
?>

在daqing.php文件中若是想要調用t1.php的方法,能夠這樣:

<?php
require_once "t1.php";    //表示調用一次
wgTime();
?>

 4,php數據庫相關操做:

  補充:die() 函數輸出一條消息,並退出當前腳本。該函數是 exit() 函數的別名。

           $rowcount=mysqli_num_rows($result),mysqli_num_rows()函數返回記錄數。

      mysqli_fetch_assoc()是一個讀取數據庫數據的函數,它會一行一行地讀取,而且把讀到的數據轉化成數組,數組的鍵是數據庫的列名,值是具體的數。好比,讀取id 和currtime,id=1,currtime=2018.09.05.12.12.12,這個函數就會生成這樣的數組:'currtime' => '2018.09.05.10.58.06  'id'=>1。

  鏈接數據庫:

//mysqli-面向對象
<?php
$servername="localhost";
$username="xxx";
$password="xxx";
$conn=new mysqli($servername,$username,$password);
if ($conn->connect_error) {
    die("鏈接失敗: " . $conn->connect_error);
} 
echo "鏈接成功";
?>
//mysqli-面向過程 <?php $servername = "localhost"; $username = "username"; $password = "password"; $conn = mysqli_connect($servername, $username, $password); if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } echo "鏈接成功"; ?>

我的比較傾向於面向過程的這種方法,由於特殊符號比較少。

  建立數據表:

<?php
$servername = "localhost";
$username = "xxx";
$password = "xxx";
$dbname="daqingdb";    //在這裏能夠直接加入datebase參數。
$conn = mysqli_connect($servername, $username, $password,$dbname);
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "鏈接成功 <br>";
$sql="create table wgtime (`id` int(4) unsigned auto_increment primary key,time varchar(20) not null)";
if (mysqli_query($conn,$sql)){
    echo "建立table:wgTime 成功!<br>";
}else{
    echo "建立表error".mysqli.error($conn);
}
mysqli_close($conn);
echo "exitd!";
?>

 把時間寫入數據庫,而且讀取出來:

<?php
date_default_timezone_set('Asia/Shanghai');
$t=date("Y.m.d.H.i.s")."\n";
$servername = "localhost";
$username = "xxx";
$password = "xxx";
$dbname="daqingdb";    //在這裏能夠直接加入datebase參數。
$conn = mysqli_connect($servername, $username, $password,$dbname);
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "鏈接成功 <br>";
// $sql="create table wgtime (`id` int(4) unsigned auto_increment primary key,currtime varchar(30) not null)";
// if (mysqli_query($conn,$sql)){
//     echo "建立table:wgTime 成功!<br>";
// }else{
//     echo "建立表error".mysqli.error($conn);
// }
$sql1="INSERT INTO `wgtime`(`currtime`) VALUES ('$t')";    //$t要用單引號代表
if (mysqli_query($conn,$sql1)){
    echo "新紀錄插入成功 <br>";
}else{
    echo "error:".mysqli_error($conn);    //打印出mysql返回的錯誤
}
//$sql2="select * from `wgtime`";
$sql2="select `currtime` from `wgtime`";
$result=mysqli_query($conn,$sql2);
//var_dump($result);    $result居然是個object對象類!其方法或者屬性有:current_field,field_count,lengths,num_rows,type.
if (mysqli_num_rows($result)>0){    //mysqli_num_rows($result)返回數據庫中查詢到的記錄的行數
    echo "查詢成功<br>";
    while ($row=mysqli_fetch_assoc($result)){
        //var_dump($row); 這是一個數組,相似於字典吧。
        $dw=array("Y ","M ","D ","H ","I ","S ");
        $str=explode(".",$row["currtime"]);        
        for($i=1;$i<6;$i++){
            echo $str[$i],$dw[$i]; 
        }
        echo "<br>";
    }
}else{
    echo "error:".mysqli_error($conn);
}
mysqli_close($conn);
echo "exitd!";
?>

 5,php文件和目錄相關操做。

補充:

  file_exists()判斷文件或者文件夾是否存在,返回布爾值

  $list=scandir($dirpath)讀取$dirpath表明的位置的下面的文件。

  chdir(path)改變當前文件位置到指定地方,約等於文件夾的指針。 

<?php
function dirBuilder($d,$t,$note)    //參數分別是:文件夾名,文件名,文件內容
{
    // date_default_timezone_set('Asia/Shanghai');    //也能夠不用參數,改用時間
    // $d=date("Y年m月d日");
    // $t=date("H時i分s秒");
    // $note="hello";
    $dirpath="C:/xampp/htdocs/daqing_new/dir_test/$d";    //判斷文件夾是否存在,不存在就建立
    if (!file_exists($dirpath)){
        mkdir($dirpath,0777,true);
        //echo "新建文件夾<br>";
    }

    chdir($dirpath);    
    //echo "改變當前文件夾<br>";
    if (file_exists("C:/xampp/htdocs/daqing_new/dir_test/$d/$t.txt")){    //判斷是否有同名文件
        echo "文件已經存在,沒有建立新的<br>";
    }else{
        //echo "文件不存在,新建<br>";
        $myfile=fopen("$t.txt",'w');
        fwrite($myfile,$note);
        fclose($myfile);
    }
    $list=scandir($dirpath);    //讀取文件夾下的文件目錄
    var_dump($list);    //$list是一個數組,帶着文件名和length,不能直接打印
    for($i=2;$i<count($list);$i++){
        echo "$list[$i] <br>";
    }
}
dirBuilder('123',"345","hello i am daqing");
?>

 6,php和html混寫

第一種方法:單雙引號包圍法

<?php
echo '
<!DOCTYPE html>
<html>
    <head>
        <title> </title>
    </head>
    <body>
        <span>測試頁面</span>
    </body>
</html>
';
?>
//返回:測試頁面

單雙引號的方法是同樣的,可是單雙引號有區別,單引號不會解析內部的變量,雙引號支持變量的解析。

缺點在於:

  輸出的內容中包含引號的話很差處理;編輯器很差提醒引號內部的格式錯誤。

第二種,使用EOF標識,這種方法支持變量解析

<?php
$content='hello';echo <<<EOF
‘$content’
EOF
?>
//返回:'hello',證實這種方法支持單雙引號的使用

第三種,html中嵌入php程序塊

  基本思想:提早定義好函數或者方法,而後在須要輸出的地方寫上代碼就能夠了。

<?php
function test(){
    echo "function test! <br>";
}
?>    //方法或者函數須要寫在<?php  ?>中,下文的輸出也要寫在這樣的格式中

<!DOCTYPE html>    //html語句不須要寫在<?php ?>中,php會理解的。
<html>
    <head>
        <title><?php test();?> </title>
    </head>
    <body>
        <span><?php test();echo 'lala';?></span>
    </body>
</html>

//輸出:function test! <br> lala

第四種,使用前端模板引擎

  好比,咱們可使用Smarty,固然了,目前並不能理解。

 

相關技術的關係:

  HTML展現內容
  PHP動態修改輸出HTML展現內容
  CSS美化頁面
  JS讓頁面動起來。提升瀏覽體驗。

製做一個鍵:

<html>

<head>
<meta charset="utf-8">    //在標題裏,定義了網頁的元信息,好比編碼方式charset
<title>    //title標籤,會顯示在瀏覽器窗口的頭上
大晴測試
</title>
</head>

<body>
<button name= "logup" type = "submit" >呵呵</button>    //button中定義的是這個按鍵的屬性
</body>

</html>
相關文章
相關標籤/搜索