Day 41 (PHP)

1.while可以同时给值并判断

会给值的原因:是因为前面都没有宣告$row(猜测)

    $fp = @opendir($dir) or exit('Server Busy v2'); 

    if ($fp) {
         while ($row = readdir($fp)){
         }
    }

2.file System

https://www.php.net/manual/en/refs.fileprocess.file.php

1.做档案总管在做的事情(ex:开启)
2.档案内容存取有关的事(开启後使用)


3.档案

is_dir 是否是目录
is_file 是否是档案
filesize 档案大小
unlink 删除档案(要小心,掰就掰了.........)
trim 去除换列符号(会影响资料解析,有时候换列会看不到[眼睛有业障XD])
fwrite 写入档案
file() 直接读档
fgetss() 读取一列,但是拿掉html标签(爬虫好用)

die("Server Busy") 死掉了读不到会显示
exit('Server Busy v2') 死掉了读不到会显示_V2

opendir 开启目录
readdir 打开目录的条目 读取
closedir 关闭目录

fopen("maskdata.csv", "r") 开启档案orURL,"r"唯读
若要写入,为了安全起见,要写入请用"a",从後面写
https://www.php.net/manual/en/function.fopen
fgets 读取档案一整列
fclose 关闭档案

filemtime()) 档案内容被存取的时间
fileatime()) 档案最後被读写的时间
date_default_timezone_set('Asia/Taipei'); 时区调整,使用亚洲/台北time

date('Y-m-d H:i:s') 转换时间格式
https://www.php.net/manual/en/function.date

calendar 老师说好用
https://www.php.net/manual/en/book.calendar.php


4.开启档案opendir >> 读取档案readdir >> 关闭档案closedir

    $dir = '.'
    $fp = @opendir($dir) or exit('Server Busy v2');  //opendir开启档案 

    if ($fp) {

        while ($row = readdir($fp)) {       //readdir 打开目录的条目 读取
        break;
        }
    } else {
        echo 'XX';
    }
    closedir($fp);    //关闭档案

5.後端的危险

若有权限处理档案,误删会回不来:unlink


6.PHP与JS区域变数的差异

<script>
    var a = 10;

    function test1() {
        a = 100;   
    }
    test1();
    document.write(a);  //100    与PHP不同 JS直接变成global(因为var)
</script>

7.for、if、while...只有一个叙述句可以省略{}

但是我不要这样QQ

    for ($i = 0; $i < 7; $i++) 
        $tempId .= rand(0, 9);  //乱数0~9  .字串相加 

请习惯包起来

    for ($i = 0; $i < 7; $i++) {
        $tempId .= rand(0, 9);  //乱数0~9  .字串相加 
    }

8.字串函数 - 切割 explode

https://www.php.net/manual/en/function.explode

explode 切割字串,回传阵列


9.开启档案,切割回传阵列 file() + explode()

   $rows = file("maskdata.csv");
      foreach( $rows as $k => $row){
        $data = explode(",", $row);
        // [0]:医事机构名称 医事机构地址 成人口罩剩余数 儿童口罩剩余数  
        if ($k == 0){
            echo '<tr>';
            echo "<th>$data[1]</th>";
            echo "<th>$data[2]</th>";
            echo "<th>$data[4]</th>";
            echo "<th>$data[5]</th>";
            echo '</tr>';
        }else{
            echo '<tr>';
            echo "<td>$data[1]</td>";
            echo "<td>$data[2]</td>";
            echo "<td>$data[4]</td>";
            echo "<td>$data[5]</td>";
            echo '</tr>';
        }

      }

10.URL爬虫(PHP06影片 2:15) fopen() + fgets()/fgetss()

      <?php
      
      $fp = fopen('https://www.iii.org.tw/', 'rb', false, $context) or die();
      // $fp = fopen('https://www.bradchao.com/', 'r');
      
      while ($line = @fgets($fp)) {
      //fgetss()让显示更漂亮,Deprecated:但版本要淘汰了(记得检视原始码观察)
          echo $i++ . $line . '<br />';
      }

      fclose($fp);
      ?>

12.fgets 读取,特性是会接续跑

    $line1 = trim(@fgets($fp));       //读取第一列
    $headers = explode(",", $line1);
    echo '<tr>';
    echo "<th>$headers[1]</th>";
    echo "<th>$headers[2]</th>";
    echo "<th>$headers[4]</th>";
    echo "<th>$headers[5]</th>";
    echo '</tr>';

    while ($line = trim(@fgets($fp))) {   //读取第二列开始,不会从头,因为接续跑
        $row = explode(",", $line);
        echo '<tr>';
        //记得改td
        echo "<td>$row[1]</td>";
        echo "<td>$row[2]</td>";
        echo "<td>$row[4]</td>";
        echo "<td>$row[5]</td>";
        echo '</tr>';
    }

13.写入档案,方式有不同

1.r+从前面写
2.w全部清掉重写
3.a从後面

        <?php
        $fp = fopen('test1.txt', 'a'); 
        fwrite($fp, "hello world");
        fclose($fp);
        ?>

14.创建HTML

        $fp = @fopen("dir1/{$filename}.html", 'w');  
        //dir2资料夹下 ; w 後面盖前面 ; .html新增该类型档案

        fwrite($fp, $content); //写入
        fclose($fp); //关闭
        // 输出转导向: URL
        header("Location: dir2/{$filename}");

15.创建资料夹

file_exists 检查有无该资料夹
mkdir创建一个资料夹

        if (!file_exists("dir2")) {  // file_exists该(dir2)资料夹有没有存在 
            // mkdir如果没有(dir2)就创建一个dir2; 0777 权限
            if (!mkdir("dir2", 0777)) {
        
                die("ERROR 01");
            }
        }

16.输出转导向 (去这)

      header("Location: dir2/{$filename}");

17.後端大漏洞(PHP06影片00:35)

别人写网页删除掉自己的网页
https://ithelp.ithome.com.tw/upload/images/20210806/20137684X6KHdDzwTg.png

该网页会占存在资料库(为了要显示业面)
因此会清除掉资料库内的网页index.html

故html(限制网页类别)要写,否则有机率会被砍到档案

      $fp = @fopen("dir1/{$filename}.html", 'w');  
      //dir2资料夹下 ; w 後面盖前面       ;.html新增该类型档案
      fwrite($fp, $content); //写入
      fclose($fp); //关闭

      header("Location: dir1/{$filename}.html");

18.制作"档案上传"

一定要 method="post"
编码解析 enctype="multipart/form-data"

      <form>
            <form action="brad45.php" method="post"enctype="multipart/form-data">
      </form>

$ _ FILES 接收上传档案

       <?php
             $upload = $_FILES['upload'];
        ?>

move_uploaded_file(来源,放这) 把档案放在这
['tmp_name'] 来源,var_dump($upload)得知

    if ($upload['error'] == 0) {
        // upload success
        $filename = date('Ymd_His') . '.jpg';
        if (move_uploaded_file(
            $upload['tmp_name'],
            "upload/{$filename}"
        )) {
            echo 'upload success';
        } else {
            "Ooop2!";
        }
    } else {
        // upload failure
        echo "Ooop1!";
    }

19.上传档案的限制 更改

(1)回去开组态档(记得备份)
brad02.php查看

(2).ini 编辑

memory_limit = 128M 记忆体限制
post_max_size = 64M 总共档案限制
upload_max_filesize = 32M 单一档案限制


20.画画

https://www.php.net/manual/en/book.image

imagecreate 做画布
imagecolorallocate 选颜色
imagefill 涂满满
imagefilledrectangle 画矩形
imagedestroy 释放画布


<<:  理解React的setState到底是同步还是非同步(下)

>>:  成熟度模型( A maturity model)

【C#】Structural Patterns Flyweight Mode

The Flyweight design pattern uses sharing to suppo...

Day 26 : Linux - 档案or目录的权限该怎麽看?又该如何做更改?

如标题,今天想和大家聊聊权限这东西 权限在Linux是个非常非常重要的东西,如果你一直被termin...

DAY14 - 档案类的物件关系厘清(3) - ArrayBuffer

ArrayBuffer ArrayBuffer (又称byte-array) 就是一段固定大小的记...

Day 9 Swift语法-进阶篇(2/5)-Inheritance

今天讲一下有关class(类别)的继承:没有使用继承的class,我们一般称为"base ...

JavaScript Day 21. 陈述式 & 表达式

听说 JavaScript 的这两大类型「陈述式」与「表达式」也是很基本的观念,瞬间我感觉自己从来没...