PHP簡單重點

 彰化縣湖南國小  阿堯老師  筆記重點

檔案函數

開啟檔案 ─ fopen( )函數
顯示檔案 ─ fpassthru ( )函數
檔案內容讀取 ─ fread( ) 、fgets( )函數
寫入檔案 ─ fwrite( ) 、fputs( ) 函數
關閉檔案 ─ fclose ( ) 函數
複製檔案 ─ copy ( ) 函數
刪除檔案 ─ unlink( ) 函數
 

 

Fopen()函式檔案模式

r    開啟檔案,以供讀取,從檔案開頭開始
r+  開啟檔案,以供讀取及寫入,從檔案開頭開始
w   開啟檔案,並寫入(覆寫)
w+ 開啟檔案,以供讀取及寫入(覆寫)
x   開啟檔案,並寫入假如檔案已存在,不會開啟開檔,fopen()會回傳false
x+ 開啟檔案,並寫入假如檔案已存在,不會開啟開檔,fopen()會回傳false
a   開啟檔案,以供新增內容,接續在目前已有的內容之後開始寫入,假如
     檔案不存在,會建立一個新檔
a+ 開啟檔案,以供新增內容,接續在目前已有的內容之後開始寫入,假如
     檔案不存在,會建立一個新檔



開啟檔案 範例1

$thefile='logs/'.$whichfile.'.txt';
$fp=fopen($thefile,"r");// 開啟
$mydata=fgets($fp,8);// 讀入
fclose($fp);


//讀取檔案所有資料
<?php
$handle = fopen('/tmp/readfile.txt', "r");
$contents = '';
if ($handle) {
      while (!feof($handle)) {
       $contents .= fread($handle, 100); //顯示100字  
        echo $contents;
          exit;
         }
              fclose($handle);
            }
?>  

 

開啟檔案 範例 2

$thefile='data/data.txt';
$fp=fopen($thefile,"r");// 開啟
$mydata=fgets($fp,30);// 讀入
list($n1,$n2)=explode("∥",$mydata);//存入變數n1、n2,以∥分割
fclose($fp);


檔案:檔名、寫入、複製、刪除

//取檔案主檔名或附檔名
$fileName = 'My123.jpg';     
//取得主檔名,回傳值為 My123   
$main = substr($fileName,0,strrpos($fileName,'.'));   
//取得副檔名,回傳值為 jpg    
$extend = array_pop(explode('.',$fileName));   
//使用轉小寫函式   
$extend = strtolower($extend);  

//打開寫入
<?php  
$filename = "Test/file.txt";  
$file = fopen($filename, "w");                      //以寫模式打開文件   
fwrite($file, "Hello, world!\n");                       //換行\n ;window下要加 \r\n
fwrite($file, "This is a test!\n");                        
fclose($file);                                  //關閉文件   
?>

//複製

<?php
$filename1 = "Test/file.txt";
$filename2 = "Test/file.bak";
copy($filename1, $filename2);   //複製文件
?> 

//刪除
<?php  
$filename = "Test/file.txt";  
unlink($filename);                              //刪除文件   
?>  

 

檔案是否存在 範例

<?
if(file_exists($thefile)){
  echo '檔案存在';
}else{
 echo '檔案不存在';
$fp=fopen($thefile,"w"); //檔案不在就建立
fclose($fp);
}
?>

 

嵌入其他PHP

<script language="php" src="mycounter.php?page=<?echo $whatisdate;?>"></script>

 

資料傳遞

<?php
//如果按下sumit
if (isset($_POST["submit"])){
if($_POST["submit"]=="買"){ //如果買
//秀出買的東西
echo "你買了:".$_POST["item"];
echo "<br>";
echo "謝謝光臨";
}
else if($_POST["submit"]=="不買"){ echo "有空再來!";}
}

?>
<hr>
<form action="" method="post" name="form1"><br>
請輸入想買的物品:<br>
<input name="item" type="text" value="蘋果"><br><br>
<br>
<input name="submit" type="submit" value="買">---<input name="submit" type="submit" value="不買"></form>

 

資料夾的函式

1.scandir:掃描資料夾的檔案,並將結果存成array。
如資料夾「data」裡面有「a.txt」和「b.txt」這兩個檔案,結掃描結果如下:

Array(   [0] => .   [1] => ..   [2] => a.txt   [3] => b.txt)

2.is_dir:判斷是否為資料夾的函式。
3.opendir/closedir:打開與關閉資料夾,傳回一個 resource,可供readdir使用。
4.readdir:讀取資料夾的內容。
5.chdir、getcwd:變化與得到目前指標所指的資料夾。
6. $mydir1=dirname(__FILE__);  //顯示目前所在目錄
要顯示檔案名稱就搭配basename()函數
echo basename(__FILE__); 
7.
getcwd()  顯示目前目錄

範例:要讀取一個資料夾內的全部檔案,並將他列印出來在螢幕上:
$dir = "./pic";
getDirList($dir);

function getDirList($dir){
if (is_dir($dir)){
$dh = opendir($dir);
chdir ($dir);
while (($file = readdir($dh)) !== false) {  
if (is_dir($file) && basename($file)!='.' && basename($file)!='..'){     
getDirList($file);  
}  
else if(filename($file) != "." && filename($file) != "..")      
echo "current work dir:". getcwd()." ;filename: $file \n"."<br>";
}
chdir("../");
closedir($dh);
}
}
function filename($file){  
$path_parts = pathinfo($file);  
return basename($file, $path_parts['extension']);
}

範例:是否為目錄
<?php
$file = "images";
if(is_dir($file)) {
echo ("$file is a directory");
}
else {
echo ("$file is not a directory");
} ?> 

範例:目錄中檔案名稱
<?php
$path = "/testweb/home.php";
//顯示home.php
echo basename($path);
//不顯示字樣  剩home
echo basename($path,".php");
?> 


日期函數

date('Y-m-j');
2007-02-6

date('g:i:s a');
5:56:57 am
小寫 g 表示 12小時制;大寫 G 表示 24小時制;小寫 a 表示小寫的“am”和“pm”,
大寫 A 表示大寫的“AM”和“PM”

星期幾 date("w");

昨天日期
$yesterday1=date('Y-m-j',time()-24*60*60);

範例:
$theyesterday='logs/'.$yesterday1.'.txt';
刪除昨天日期檔案
$fyesterday=unlink($theyesterday );//刪除昨天日期檔案

範例:以日期時間當檔名
$appfile1=date('Y-m-d-h-i-s');
$ext1= strrchr($_FILES["upload"]["name"],'.');//上傳的檔案取 小數 . 之後名稱(副檔名)
$appfile=$appfile1.$ext1;//不能用+
 


explode() 字串分割

<?php
$str = "Hello world.";
print_r (explode(" ",$str));
?>
成果
Array
(
[0] => Hello
[1] => world.
)

list($p1,$p2,$p3,$p4,$p5,$p6,$p7)=explode("∥",$line[$i]);//以∥符號分割資料存入$p1,$p2...

 

 

字串處理

換行 :\n
Enter+換行 :\r\n    //在windows環境
echo "<br>檔名: $file \n";

$ext = strrchr($_FILES["upload"]["name"],'.'); //取上傳檔名的 .以後的名稱,例如 .gif  .jpg
$limitedext = array(".gif",".jpg",".jpeg",".png",".txt",".nfo",".doc",".rtf",".htm",".dmg",".zip",".rar",".gz");
//將$ext轉成小寫,是否在$limitedext陣列裡(是否我們允許的副檔名)
if (in_array(strtolower($ext),$limitedext)) {};

trim();:去頭尾空白。
ltrim();:去頭部空白。
chop();:去尾部空白。
$ext1= strrchr($_FILES["upload"]["name"],'.');//上傳的檔案取 小數 . 之後名稱(副檔名)
strtoupper();轉大寫。
strtolower();轉小寫。
ucfirst();字串首轉大寫。  

 

檔案上傳

 form 需要加上 enctype="multipart/form-data" 代表你要上傳檔案
<form action="upload.php" method="post" enctype="multipart/form-data">
檔案名稱:<input type="file" name="file" id="file" /><br />
<input type="submit" name="submit" value="上傳檔案" />
</form>

•$_FILES["file"]["name"]:上傳檔案的原始名稱。
•$_FILES["file"]["type"]:上傳的檔案類型。
•$_FILES["file"]["size"]:上傳的檔案原始大小。
•$_FILES["file"]["tmp_name"]:上傳檔案後的暫存資料夾位置。
•$_FILES["file"]["error"]:如果檔案上傳有錯誤,可以顯示錯誤代碼。

if ($_FILES["file"]["error"] > 0){
 echo "Error: " . $_FILES["file"]["error"];
}else{
echo "檔案名稱: " . $_FILES["file"]["name"]."<br/>";
echo "檔案類型: " . $_FILES["file"]["type"]."<br/>";
echo "檔案大小: " . ($_FILES["file"]["size"] / 1024)." Kb<br />";
echo "暫存名稱: " . $_FILES["file"]["tmp_name"];
}

if ($_FILES["file"]["error"] > 0){
 echo "Error: " . $_FILES["file"]["error"];
}else{
 echo "檔案名稱: " . $_FILES["file"]["name"]."<br/>";
 echo "檔案類型: " . $_FILES["file"]["type"]."<br/>";
 echo "檔案大小: " . ($_FILES["file"]["size"] / 1024)." Kb<br />";
 echo "暫存名稱: " . $_FILES["file"]["tmp_name"];

 move_uploaded_file($_FILES["file"]["tmp_name"],"upload/".$_FILES["file"]["name"]);
}

 

 

資料轉換

intval($var) 將 $var 轉成整數,小數部份直接捨去

$x = 5;
$y = (double) $x;    //括弧裡可以有 tab 或空白 (space)可使用的 cast 型別有:
1. (int),(integer) - 轉換成 integer 型別
2. (bool),(boolean) - 轉換成 boolean 型別
3. (float),(double),(real) - 轉換成 float 型別
4. (string) - 轉換成 string 型別
5. (array) - 轉換成 array 型別
6. (object) - 轉換成 object 型別

範例 1:
<?php
$x = "5";
$number = (int)$x;
echo $number; //輸出 5
?>
範例 2:
<?php
$x = "foo";
$arr = (array)$x;
echo $arr[0]; //輸出 "foo"
?> 



網頁中使用PHP 範例

<? $thefile='logs/'.$yourfile.'.txt';?>
<? $fp=fopen($thefile,"r");?>
<? $mydata=fgets($fp,8);?> //讀取8位數
<? fclose($fp);?>
<?echo  $mydata;?>
<font size="5"><center>驗證碼是:<?=$a;?></center></font> 

抓取變數a當內定初始值
 <td bgcolor="#CCCC99">
<input type="text" name="mynuma" style="font-size:medium;" value='<?=$a;?>'></td>
 


PHP中使用HTML 範例

echo '<td>' . $data->id . '</td>'; 
echo '<center>'.'<font size="6">'.'您的大名漏掉囉!</font><br>';
echo '<a href=add.php>'.'<font size="6">'.'重寫作業</font></a>'; 


md5加密

<?php
 if(isset($_POST["passwd"]) && $_POST["passwd"] != ""){
  $passStr = md5('abcd1234');
  $input1 = $_POST["passwd"];
 if(md5($input1)==$passStr){
     echo "密碼 $input1 驗證通過";
  }else{

      echo "密碼 $input1 驗證失敗";

    }

  }else{

?>

<form action="" name="form1" method="POST">

  密碼

  <input name="passwd" type="password" id="passwd">

  <input type="submit" name="Submit" value="驗證">

</form>

<?php } ?>

 

密碼輸入保護顯示

  <td bgcolor="#CCCC99"><p><input type="password" name="mynumb" style="font-size:7mm" ></td>



Switch選擇

<?
$myweek = date("w");
switch ($myweek) {
case 1:
$nowweek="星期一";
 break;

 case 2:
 $nowweek="星期二";
 break;

 case 3:
  $nowweek="星期三";
  break;

 case 4:
  $nowweek="星期四";
  break;

 case 5:
  $nowweek="星期五";
  break;

 case 6:
  $nowweek="星期六";
  break;

 case 0:
  $nowweek="星期天";
  break;

  
case "":
  echo '沒有輸入密碼'; 
  break; 

default:
 $nowweek="沒有資料";
  break;
}
?>
<html>
<head><title>今天是<?=$nowweek?></title></head></html>



For條件

<?php
for ($i = 0; $i <= 10 ; $i++) {
  echo "$i";
}
?>


If條件

<?php
if($_POST["item"]=="wii"){
  echo "你買了".$_POST["item"]."一個!!";
}else{
  echo "你買的是".$_POST["item"].",沒有貨了!";
}
?>

雙條件
<?php
if( ($a==1 || $a==2) && ($b==3 || $b==4) && ($c==5 || $c==6) ) {
   
//do that something here.
}
?>
 


函式

範例1:
呼叫 showtitle();  //沒有傳回值
function showtitle(){
echo '
    <center>
[<a href="add.php"><font size="5">新增公告</font></a>][<a href="login.php"><font size="5">版主管理</font></a>]
<hr>
<h1>SMY公告 I</h1>
</center>
   ';
}

範例2:指定參數
<?php
test($x=3);
function test($x){
global $x;  //使用全域變數
$x=$x*3;
}
echo $x;//答案是9
?>

範例3:指定參數
<?php
test($x=3,$y=5);
function test($x,$y){
$sum=$x*$y;
echo $sum;//答案是15
}
?>

範例4:
call by value 是父程式直接將值或變數傳給函數,
該數值或變數被儲存於兩個不同的記憶體位置。

function test($x, $y) {
   $x += $y;
   return $x;//傳回值
}
$x = 25;
$y = 10;
echo test($x, $y);        // 輸出 35;
echo $x;                       // 輸出 25

範例5:傳回值(函式本身有內定值)一個函數只會有一個有效的 return
function add($x, $y = 1, $z = 2) {
   return $x+$y+$z;     //傳回值 (return value)
}
echo add(5);                // 結果為 8

範例6:多個參數傳回
function test() {
   return array(10, 20, 30, 40, 50);
}
list($a, $b, $c, $d, $e) = test();
echo $a;        // 輸出為 10
echo $b;         // 輸出為 20
echo $c;         // 輸出為 30
echo $d;         // 輸出為 40
echo $e;         // 輸出為 50


範例7:
在函數中,執行到return便會跳出函數
希望傳回兩個值以上,用陣列,例如:
function test($a){
$num[a]=$a;
$num[b]=$num[a]*10;
$num[c]=$num[a]*$num[b];
return $num;

$x=test("3");
echo $x[a]."乘以".$x[b]."等於".$x[c];
結果是「3乘以30等於90」,用$num陣列來存放三個值,
函數return陣列$num,用$x來存放函數的傳回值,
$x也會變成陣列,只要分別給索引,就能叫出陣列儲存的三個值。  


亂數

$a=rand(最小值[整數],最大值[整數])
echo rand(80,100); //正常輸出,輸出80-100之間的整數 

範例:亂數不重複數字10個

mt_srand((double)microtime()*1000000);  //以時間當亂數種子

$Rand = Array(); //定義為陣列

$count = 10 ; //要產生幾筆數字

for ($i = 1; $i <= $count; $i++) {

    $randval = mt_rand(1,100); //範圍為1~100之間亂數

     if (in_array($randval, $Rand)) { //如果已存在,迴圈重跑

        $i--;

    }else{

        $Rand[] = $randval; //若無重重複,將亂數放入陣列

    }

}

 

只允許輸入數字

<script language="javascript">
<!--
function Check_num() {
        if (event.keyCode < 48 || event.keyCode > 57) event.returnValue = false;
}

//-->
</script>
<p><input type="text" name="snum" maxlength="5" size="3" onKeypress="Check_num();">

 

 

只允許某網段

 

$allowIP = array('192.168.1.0','10.2.2');  //允許的網段

if(getenv('HTTP_X_FORWARDED_FOR')){

    $the_ip = split(',', getenv('HTTP_X_FORWARDED_FOR'));

    $ip = $the_ip[0];

} else {

    $ip = getenv('REMOTE_ADDR');

}

$extraRule = false;

foreach ($allowIP as $allow) {

    if (ereg($allow, $ip)) {

        $extraRule = true;

        break;

    }

}

if ($extraRule) {

    //允許讀取

} else {

    //不允許讀取

}



 

 回三本貓首頁

  本站於 89.01.10 建立
90.04.02第4次大改版
91.07.22第5次大改版
91.11.26第6大次改版
 92.12.13第7次大改版
 94.11.15第8次大改版

89.01.10 ~ 92.06.04總訪問數 1482672 人(每日不重複IP)