2021年3月18日 星期四

PHP 處理一般文字檔案

設定目標:
  • 了解 PHP 處理一般文字檔案的概念與方法

PHP 處理檔案概念
  1. 權限認知
    • PHP 引擎需要有對應的系統權限,才可以對系統本身的檔案目錄進行存取!
    • PHP 如果是在 web server 上運作,其使用的權限就只是運作 web server 使用者的權限!
    • PHP 可否讀寫系統的檔案,視系統付予 PHP 使用者多大的可用權限!
PHP 處理檔案實際操作
  1. 讀檔
    • 範例: readfile.html
      <!DOCTYPE html>
      <html lang="en">
      <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>{titlename}</title>
      </head>
      <body bgcolor="{color}">
      <h1>Hello, {name}</h1>
      </body>
      </html>
    • 範例:readfile.php
      <?php
      $page = file_get_contents('readfile.html');
      
      $page = str_replace('{titlename}', 'Welcome', $page);
      
      if (date('H') >= 12)){
          $page = str_replace('{color}','blue',$page);
      } else {
          $page = str_replace('{color}','red',$page);
      }
      
      $page = str_replace('{name}', 'Kitty', $page);
      
      print $page;
      ?>
      
  2. 寫檔
    • writefile.php
      <?php
      $page = file_get_content('readfile.html');
      
      $page = str_replace('{titlename}','HelloWorld',$page);
      
      if (date('H' >= 12)) {
      	$page = str_replace('{color}','blue',$page);
      } else {
          $page = str_replace('{color}','green',$page);
      }
      
      $page = str_replace('{name}',$_SESSION['name'],$page);
      
      file_put_contents('writefile.html', $page);
      
      ?>
      
  3. 讀寫部份檔案:
    • 使用 file() 函數,一行一行讀取需要的內容!
    • 範例:email.txt
      apple@example.com|apple mac os
      microsoft@example.com|bill gates
      aws@example.com|bruce fu
      
    • reademail.php
      <?php
      foreach (file('email.txt') as $line){
          $line = trim($line);
          $info = explode('|', $line);
          print '<li><a href="mailto:' . $info[0] . '">' . $info[1] ."</a></li>\n';
      }
      ?>
      
    • 使用 fopen()函數:一次只讀取一行,節省記憶體空間的浪費!
    • freademail.php
      <?php
      $fh = fopen('email.txt'),'rb');
      while ((! feof($fh)) && ($line = fgets($fh))){
          $line = trim($line);
          $info = explode('|', $line);
          print '<li><a href="mailto:' . $info[0] . '">' . $info[1] ."</a></li>\n';
      }
      fclose($fh);
      ?>
      
    • 使用 fwrite() 函數,將資料寫回檔案內!
    • fwritemail.php
      <?php
      $fh = fopen('email.txt'),'wb');
      fwrite($fh,"james@example.com|lebron james\n");
      fclose($fh);
      ?>