Blogger Information
Blog 31
fans 0
comment 0
visits 18229
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP第20课-模型/路由/IOC/上传-九期线上班
Content っ
Original
526 people have browsed it

upload.html文件

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>文件上传</title>
  6. </head>
  7. <body>
  8. <form action="demo1.php" method="post" enctype="multipart/form-data">
  9. <input type="file" name="my_file" id="">
  10. <button>上传</button>
  11. </form>
  12. </body>
  13. </html>

demo1.php文件

  1. <?php
  2. //设置文件格式
  3. $fileType = ['jpg','png','gif'];
  4. //设置文件大小
  5. $fileMaxSize = 3145728;
  6. //设置路径
  7. $filePath = '/img/';
  8. //文件原始文件名
  9. $fileName = $_FILES['my_file']['name'];
  10. //文件临时文件
  11. $fileTmpName = $_FILES['my_file']['tmp_name'];
  12. //错误信息
  13. $updateError = $_FILES['my_file']['error'];
  14. if ($updateError>0){
  15. switch ($updateError){
  16. case 1:
  17. case 2:
  18. die('文件过大');
  19. case 3:
  20. die('文件上传不完整');
  21. default:
  22. die('未知错误');
  23. }
  24. }
  25. // 3. 判断文件扩展名是否正确
  26. $extension = explode('.',$fileName)[1];
  27. if (!in_array($extension, $fileType)) {
  28. die('不允许上传' . $extension . '文件类型');
  29. }
  30. // 4. 为了防止同名文件相互覆盖, 使用md5+时间戳
  31. $fileName = date('YmdHis',time()).md5(mt_rand(1,99)) . '.' . $extension;
  32. if (is_uploaded_file($fileTmpName)) {
  33. if (move_uploaded_file($fileTmpName, __DIR__ . $filePath.$fileName)) {
  34. // 上传成功,并返回上一个页面
  35. echo '<script>alert("上传成功");history.back();</script>';
  36. } else {
  37. die('文件无法移动到指定目录,请检查目录权限');
  38. }
  39. } else {
  40. die('非法操作');
  41. }
  42. exit();

model.php文件

  1. <?php
  2. namespace _1206;
  3. use PDO;
  4. class AccoutModel{
  5. private $user_id;
  6. private $username;
  7. private $email;
  8. private $password;
  9. private $phone;
  10. private $user_type;
  11. private $department_list;
  12. public function __get($name)
  13. {
  14. return $this->$name;
  15. }
  16. public function __set($name, $value)
  17. {
  18. $this->$name = $value;
  19. }
  20. }
  21. $pdo = new PDO('mysql:host=localhost;dbname=jason','root','root');
  22. $stmt = $pdo->prepare('select * from `account` WHERE `user_id` > :user_id');
  23. $stmt->setFetchMode(PDO::FETCH_CLASS,AccoutModel::class);
  24. $stmt->execute(['user_id' => 5]);
  25. while ($staff = $stmt->fetch()) {
  26. // 属性重载
  27. echo "<li>{$staff->user_id}: {$staff->username}--{$staff->email}--{$staff->password}--{$staff->phone}--{$staff->department_list}</li>";
  28. }

route.php文件

  1. <?php
  2. $res = $_SERVER['REQUEST_URI'];
  3. $resArr = explode(DIRECTORY_SEPARATOR,$res);
  4. echo '<pre>'.print_r($resArr,true).'</pre>';
  5. $newArr = array_slice($resArr,3,3);
  6. echo 'newArr'. '<pre>'.print_r($newArr,true).'</pre>';
  7. list($user,$controller,$action) = $newArr;
  8. $arr = compact('user','controller','action');
  9. echo 'arr'.'<pre>'.print_r($arr,true).'</pre>';
  10. $arr2 = [];
  11. //取出路由键值对
  12. $arr1 = array_slice($resArr,6);
  13. for ($i=0;$i<count($arr1);$i+=2){
  14. if (isset($arr1[$i+1])){
  15. $arr2[$arr1[$i]] = $arr1[$i+1];
  16. }
  17. }
  18. echo '<pre>'.print_r($arr2,true).'</pre>';
  19. //实战
  20. class Index{
  21. public function pay($a,$b){
  22. return '调用成功,参数'.$a.$b;
  23. }
  24. public function admin($a,$b,$c){
  25. return '调用成功,参数'.$a.'------'.$b.'-------'.$c;
  26. }
  27. }
  28. $obj = new $arr['controller']();
  29. echo call_user_func_array([$obj,$arr['action']],$arr2);
  30. echo '<hr>';
  31. echo call_user_func_array([$obj,$arr['user']],$newArr);

手写代码

总结

  1. ## 1. 模型的原理
  2. * 框架中的模型, 通常会与一张数据表对应, 而模型对象,则与数据表中的一条记录对应
  3. * `$stmt->setFetchMode(PDO::FETCH_CLASS, $className);`
  4. ## 2. 路由的原理
  5. * `$_SERVER['REQUEST_URI']`: 超全局变量, 用户请求的web资源地址
  6. * `explode()`: 使用一个字符串分割另一个字符串,返回数组
  7. * `array_slice($arr, $start, $length)`: 获取数组片断
  8. * `list($var1, $var2,...)`: 将索引数组成员转为独立变量
  9. * `compact($str1, $str2,...)`: 将变量转为关联数组成员
  10. * `call_user_func_array()`: 以回调方式执行一个函数/方法
  11. ## 3. 控制反转(ioc)
  12. * 依赖注入: 用户主动调用依赖对象
  13. * 控制反转: 容器接管对依赖对象的控制权
  14. ## 4. 文件上传
  15. * `$_FILES['name']`: 保存上传文件信息的超全局数组
  16. * `is_uploaded_file()`: 判断文件是否通过 "HTTP POST" 方式上传的?
  17. * `move_uploaded_file()`: 将上传文件移动到服务器上指定的位置/目录下面
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:这些常用函数是要掌握的
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post