博客列表 >PHP第20课-模型/路由/IOC/上传-九期线上班

PHP第20课-模型/路由/IOC/上传-九期线上班

Content っ
Content っ 原创
2019年12月17日 19:16:25525浏览

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()`: 将上传文件移动到服务器上指定的位置/目录下面
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议