# DGUT-实训项目-php电商商城 **Repository Path**: GooGa/php-mall ## Basic Information - **Project Name**: DGUT-实训项目-php电商商城 - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-09-15 - **Last Updated**: 2025-08-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 本地运行教程 ### 1. 首先要确保apahce处于运行状态,如果用的是phpstudy,则打开以下开关: ![](.README_images/d0184a23.png) ### 2. 配置apache的网页目录到项目下的./public目录,如果用的是phpstudy可以按下面步骤: #### a.在phpstudy中点击左侧网站: ![](.README_images/971432e3.png) #### b.点击创建网站,在弹出框内: 域名填写:localhost 根目录:设置为该项目路径的./public文件夹 PHP版本:尽量设置为7.x版本,避免兼容性问题(可在phpstudy的 软件管理-全部-php 下载其它版本的php) ![](.README_images/4be7063d.png) 完成该步骤后,你应该可以通过 http://localhost/index.php 访问到以下页面: ![](.README_images/82940673.png) ### 3.加载apahce模块,来隐藏url中的index.php #### 知识补充 ``` thinkphp默认情况下设置index.php为项目的唯一入口,也就是上面url访问的index.php。 根据thinkphp的规则,在没有设置路由的情况下,我们可以通过 http://localhost/index.php/模块名/控制器名/方法名 来访问某个接口。 ``` 为了保持URL的简洁,也为了避免泄漏服务器信息,我们可以通过配置apache来隐藏URL中的index.php前缀。 也就是我们只需要访问 http://localhost/模块名/控制器名/方法名 ,方法如下: #### a.找到apache的安装目录 ![](.README_images/1f109193.png) #### b.打开apache的配置路径 找到 apache安装路径/conf/http.conf ![](.README_images/0496abe7.png) #### c.修改配置项 利用文本查找工具: > 1. 查找 `AllowOverride none` 改为 `AllowOverride All` > 2. 将 `#Include conf/extra/httpd-default.conf` 前面#去掉 (也就是把注释打开) > 3. 将 `#LoadModule rewrite_module modules/mod_rewrite.so` 前面#去掉 完成后保存,重启apache: ![](.README_images/1a9185fa.png) ### 4.配置apache的URL重写规则 #### Tips ``` 仓库中已经完成重写,因此该步骤不用再配置,可跳过。 ``` 打开项目目录下的/public/.htaccess,输入以下内容: ``` Options +FollowSymlinks -Multiviews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L] ``` 这段代码的作用是,让apache在访问的URL中匹配到 index.php 时,将其去掉。 ### 5.访问后台控制页面 ** http://localhost/admin ** 若未登录则会自动跳转到登录界面。 ![](.README_images/426fe980.png) ## 图片上传流程 ### 结尾有完整代码 1. controller 获取请求中的文件 ```PHP // 判空 if (!$this->request->isPost()) { return (new jsonResult)::result(1, "上传失败 Post请求中的文件无效"); } // 获取请求中的文件 $files = $this->request->file(); ``` 2. 将请求中的文件保存到项目路径下 ```PHP // 拼接路径,ROOT_PATH获取项目根目录,DS代表'/',合起来代表保存到项目目录下的uploads文件夹 $imgPath = ROOT_PATH . DS . 'uploads'; // 保存文件(实际就是从Apache的临时目录中移过来 所以是move) $info = $file->move($imgPath); // 判空 if (!$info) { ontimeLog::mylog("上传文件失败,错误信息:" . $file->getError(), __FILE__, __METHOD__); return (new jsonResult)::result(1, "上传失败 服务器错误"); } ``` 3. 上传到COS桶存储中 首先要在 admin模块下的 config.php 中配置COS桶的key前缀。 作用是区分各类图片,比如说商品图片的前缀是`product`,用户信息图片的前缀是`user`这样。 ![](.README_images/0bad0f74.png) ```PHP // 获取保存的文件名 thinkPHP会自动按 {/当前日期/文件md5.文件格式} 保存到之前设置的目录 $saveName = $info->getSaveName(); // 上传到COS中 // 参数一:文件路径 // 参数二:桶中的key值,格式是{前缀}/{文件名}。代码中的xxxxx是上面设置的前缀,比如product或者user之类的。 if ((new cosOper())->uploadObj($imgPath . DS . $saveName, Config::get('cos.xxxxxx') . '/' . $saveName)) { // 拼接图片URL给前端,通过该URL可访问到刚上传的图片 $src = Config::get('cos.url_pre') . '/' . Config::get('cos.xxxxxxx') . '/' . $saveName, return (new jsonResult)::result(0, "上传成功", ['src' => $src]); } else { return (new jsonResult)::result(501, "上传到COS失败"); } ``` 4. 完整代码演示 admin/config.php内容: ```PHP [ 'url_pre' => 'https://php-mall-1255644734.cos.ap-guangzhou.myqcloud.com', 'product_key' => 'product', 'user_key' => 'user', ], ]; ``` 头像上传接口: ```PHP request->isPost()) { return (new jsonResult)::result(1, "上传失败 Post请求中的文件无效"); } $files = $this->request->file(); $imgPath = ROOT_PATH . DS . 'uploads'; $info = $file->move($imgPath); if (!$info) { ontimeLog::mylog("上传文件失败,错误信息:" . $file->getError(), __FILE__, __METHOD__); return (new jsonResult)::result(1, "上传失败 服务器错误"); } $saveName = $info->getSaveName(); if ((new cosOper())->uploadObj($imgPath . DS . $saveName, Config::get('cos.xxxxxx') . '/' . $saveName)) { $src = Config::get('cos.url_pre') . '/' . Config::get('cos.xxxxxxx') . '/' . $saveName, return (new jsonResult)::result(0, "上传成功", ['src' => $src]); } else { return (new jsonResult)::result(501, "上传到COS失败"); } } ``` 商城前台:[https://gitee.com/doctorwu666/mall-front](https://gitee.com/doctorwu666/mall-front)