精华内容
下载资源
问答
  • thinkphp 案例

    2012-05-03 15:46:10
    thinkphp 开发 图片上传,ajax jquery应用
  • thinkphp案例下载

    2012-09-04 11:31:43
    thinkphp 案例 适合初学者 很经典的案例 是一个分享的网站基于Thinkphp
  • thinkphp多用户系统,thinkphp案例,含支付宝、微信支付,含定时功能,多用户商城系统
  • Thinkphp因其优秀的架构设计、通俗易懂的教程以及超级强大的操作数据库而成为国内最流行的一款开源框架,而为API开发而生thinkphp 5的发布更是受到广大企业及开发者的欢迎,WSTMart电子商务系统是商淘软件基于...
  • WSTMall 是一款基于thinkphp 3.2.2基础进行开发的多商户O2O开源系统 ,是一款能够帮助企业及个人快速构建O2O(线上到线下)服务体系的系统 ,全方位助力创业团队的快速成长及商业变现!
  • WSTMall是一款基于thinkphp3.2进行开发的多商户O2O开源系统,是一款能够帮助企业及个人快速构建O2O(线上到线下)服务体系的系统 ,全方位助力创业团队的快速成长及商业变现! WSTMall<已形成集PC端、WAP端,微信...
  • 基于thinkphp 3.2开发,含qq、微信登录,含支付宝、微信支付,多用户开源商城系统
  • NAS 的购买选择上需要慎重,函数计算貌似只支持NAS下的NFS 通过云服务器ECS(Windows)访问NFS文件系统 thinkphp6 缓存文件更改有所不同,可以跳转观看操作:thinkphp6基本变化—阿里云函数计算采坑之路
    1、打开tp5的入口文件(/public/index.php)在namespace think; 这句的下面,加如下代码:
    
    if(!$_SERVER['PATH_INFO']) $_SERVER['PATH_INFO'] = preg_replace("/^(\?s\=\/)/","",$_SERVER['REQUEST_URI']);
    
    2、在整个文件根目录,注意不是public目录而是当前文件根目录下新建index.php文件。其作用是函数入口文件。
    

    代码如下:

    <?php
    #自定义的域名,绑定了自定义域名的,可以换成自己自定义的。
    $MY_HOST    = "1545********1035.functioncompute.com";
    #web目录绝对路径,如:/code
    $WWW_DIR = 'think/public';
    
    function handler($request, $context){
    
        #如果不使用函数计算后台提供的那个厂厂的域名,这句可以注释掉。
        if(strpos($request->getAttribute("requestURI"),"/2016-08-15/proxy") !== false) $request = clearFcHost($request,$context);#兼容 fc后台的url地址
    
        $uri  = $request->getAttribute("requestURI");
        $file = explode("?", $uri)[0];
        if($file=='/') $uri='/';#
        $file = $GLOBALS['WWW_DIR'].$file;
    
        if(file_exists($file) and $uri!='/'){
            if(strpos($uri,".php")) return php_run(basename($file), $request, $context);#php_run
            return static_run($uri);#static_run
        }
    
        $request = $request->withAttribute("requestURI", "?s=".$uri);
        return php_run('index.php', $request, $context);# php_run
    
    }
    
    function php_run($name,$request, $context)
    {
        return $GLOBALS['fcPhpCgiProxy']->requestPhpCgi($request, $GLOBALS['WWW_DIR'], $name,['SERVER_NAME' => $GLOBALS['MY_HOST'], 'SERVER_PORT' => '80', 'HTTP_HOST' => $GLOBALS['MY_HOST']],['debug_show_cgi_params' => false, 'readWriteTimeout' => 15000]);
    }
    use RingCentral\Psr7\Response;
    function static_run($uri): Response{
        $file_dir = $GLOBALS['WWW_DIR'].$uri; #完整文件路径
        $file_dir = explode("?", $file_dir)[0]; #去掉动态路径
        if(is_dir($file_dir)) $file_dir .= '/index.html';# 可以这里定义目录的默认索引页
        $handle   = fopen($file_dir, "r");
        $contents = fread($handle, filesize($file_dir));
        fclose($handle);
        return new Response(200, ['Content-Type'  => $GLOBALS['fcPhpCgiProxy']->getMimeType($file_dir),'Cache-Control' => "max-age=8640000",'Accept-Ranges' => 'bytes'], $contents);
    }
    
    function clearFcHost($request,$context){
        $uri  = $request->getAttribute("requestURI");
        $uri  = str_replace("/2016-08-15/proxy/".$context['service']['name']."/".$context['function']['name'],"",$uri);
        $request = $request->withAttribute("requestURI", $uri);
        return $request;
    }
    
    #错误处理
    function error($code) {
        #if($resp->getStatusCode() !=200) return error($resp->getStatusCode());
        return 'thinkphp框架测试~~';
    }
    
    3、修改相关配置服务。
    

    在这里插入图片描述
    可新建日志文件、Nas、Rds文件、点击链接查看阿里云原有实例事例

    4、NAS相关配置   (来源阿里云上面链接网站)
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    创建专有网络

    5、打开   允许函数访问 VPC 内资源  选择新建的专有网络,交换机,安全组
    

    在这里插入图片描述

    6、注意 新建NAS 时需要将用户以及用户组改为1 不能为负。添加挂载点
    

    在这里插入图片描述

    7、配置函数计算中的NAS  其中本地目录必须在/home或者/mnt目录下!
    

    在这里插入图片描述

        8、分配权限,根据需要给自己的函数分配。此时已分配了 oss,nas,ecs以及log的函数求权限。
    然后直接点击授权,然后在总体提交配置。
    

    在这里插入图片描述

    9、日志相关操作
    

    (截图来自阿里云事例)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    10、由于函数计算只有/tmp 目录可写,所以要改一下tp5的配置文件
    
    	(1)直接写入/tmp文件(不建议使用)
    
    编辑/config/log.php
    'path'  => '/tmp/log',
    编辑/config/cache.php
    'path'  => '/tmp/cache',
    
    	(2)挂载NAS 把需要缓存的文件存入,在新建一个函数,用这个函数读取nas上的内容。
    然后存入 oss 可使用定时函数处理。存入后在其他地方获取oss内容下载观看(不建议使用)
    
    	(3)挂载NAS 把需要缓存的文件存入,在新建一个函数,用这个函数读取nas上的内容。
    然后存入建立的ECS 服务器中,建议直接购买windows版,观看方便。 可使用定时函数处理
    存入后在建立的ECS 服务器中观看即可。(建议使用)
    
    编辑/config/log.php
    'path'  => '/mnt/think/log',
    编辑/config/cache.php
    'path'  => '/mnt/think/cache',
    

    注意: 使用函数计算选择挂载时。NAS 的购买选择上需要慎重,函数计算貌似只支持NAS下的NFS
    通过云服务器ECS(Windows)访问NFS文件系统

    thinkphp6 缓存文件更改有所不同,可以跳转观看操作:thinkphp6基本变化—阿里云函数计算采坑之路

    展开全文
  • thinkphp3.1框架中的案例blog,添加日记的同时可以添加标签tag,但仅此而已。当删除日记时,标签并没有被删除掉,从而造成 think_tagged表和think_tag累积了垃圾数据。为了实现删除日记的同时也一起清理掉think_...

    thinkphp3.1框架中的案例blog,添加日记的同时可以添加标签tag,但仅此而已。当删除日记时,标签并没有被删除掉,从而造成
    think_tagged表和think_tag累积了垃圾数据。为了实现删除日记的同时也一起清理掉think_tagged表和think_tag那些过时的数据,
    我写了一个函数,在看下面函数时,要先弄清think_tagged表、think_tag和think_blog表的关联关系。

    函数如下:

    public function deltag($recordId){     
       
          $condition['recordId'] = $recordId;//获取日记的ID
          
       $tagged=M('Tagged');
       
         $taggedlist= $tagged->where($condition)->select();//这里用select而不用find,因为一篇日记可能有多个标签
         
         $taggedids=array();//声明一个数组,用来装think_tagged表的ID
         
         $tagIds=array();//声明一个数组,用来装think_tag表的ID
         
         foreach ($taggedlist as $key => $value) {
         
             $tagIds[]=$value['tagId'];//获取think_tag表的ID
             
             $taggedids[]=$value['id'];//获取think_tagged表的ID
          }
        //考虑到一篇日记可能有多个标签,所以这里对$tagIds作一下遍历
         foreach ($tagIds as $tagIdk => $tagIdv) {
         
         $tagId=$tagIdv;  
           
                $tag=D('Tag');
                
                $tagvo=$tag->where('id='.$tagId)->find();//获取每个$tagId对应的一条记录
        
                $count=intval($tagvo['count']);//获取标签的数量
        
                if($count==1){//如果$count==1,说明这个标签仅有这篇日记所有,删掉。
                
              $tag->where('id='.$tagId)->delete();
              
             }elseif($count > 1){//$count > 1,说明这个标签为多篇日记所有,不能删除,所以减1。
        
                 $tag->where('id='.$tagId)->setDec('count',1);//setDec使$count减1,注意thinkphp3.1的使用方法。
          
             }
          }
          //下面是删除日记存在think_tagged表里的相关数据
        foreach ($taggedids as $taggedid_k => $taggedid_v) {
        
             $tagged->where('id='.$taggedid_v)->delete();
             
          }
         
         
        }

    函数写好了,怎么使用呢?方法很简单。
      我们来看一下删除日记的函数

    public function delete() {
            //删除指定记录
            $model = M("Blog");
            if (!empty($model)) {
                $id = $_REQUEST[$model->getPk()];
                if (isset($id)) {
    
                    if ($model->where("id=" . $id)->delete()) {
                        if ($this->__get('ajax')) {
                            $this->ajaxReturn($id, L('_DELETE_SUCCESS_'), 1);
                        } else {
                            $this->success(L('_DELETE_SUCCESS_'));
                        }
                    } else {
                        $this->error(L('_DELETE_FAIL_'));
                    }
                } else {
                    $this->error(L('_ERROR_ACTION_'));
                }
            }
        }  

    这个函数是放在Examples\Blog\Lib\Action\PublicAction.class.php这个公共类里的,
        BlogAction.class.php类继承了其删除函数,我们就把deltag($recordId)函数放在delete() 里调用,如下:

    public function delete() {
            //删除指定记录
            $model = M("Blog");
            if (!empty($model)) {
                $id = $_REQUEST[$model->getPk()];
                if (isset($id)) {
                $recordId=$id;
                 $this->deltag($recordId);
                    if ($model->where("id=" . $id)->delete()) {
                        if ($this->__get('ajax')) {
                            $this->ajaxReturn($id, L('_DELETE_SUCCESS_'), 1);
                        } else {
                            $this->success(L('_DELETE_SUCCESS_'));
                        }
                    } else {
                        $this->error(L('_DELETE_FAIL_'));
                    }
                } else {
                    $this->error(L('_ERROR_ACTION_'));
                }
            }
        }  

    以上只适用删除单条日记的情况,当然如要批量删除日记,只要遍历删除blog的ID同时调用一下deltag($recordId)就OK了。

    本文首发WBlog博客,欢迎转载!转载请注明本文地址,谢谢。


    本文地址:http://www.w3note.com/web/12.html


    展开全文
  • thinkphp简单案例

    2014-08-19 08:50:04
    thinkphp简单案例代码,最适合没有框架经验的人学习。能做到一目了然!
  • thinkphp代码案例

    2012-12-17 05:33:04
    thinkphp教程详细解释thinkphp开发流程并带有辅助代码
  • thinkphp网站案例

    2013-03-24 00:53:24
    一个学习php不可多得的实例教学,配合目前流行的thinkphp模板开发技术,一定会让你有所收获,打包里面包含有mysql数据库代码, 直接放mysql运行, 会自动创建好数据库所有的表,该网站分前台和后台,方便开发者操作。...
  • thinkphp实战项目案例

    2014-11-18 11:33:44
    thinkPHP实战案例源码,可实际应用,也可作为学习之用。
  • ThinkPHP缓存案例

    2017-08-28 16:44:28
    thinkphp的缓存方式有许多种,如File、Apachenote、Apc、Eaccelerator、Memcache、Shmop、Sqlite、Db、Redis和Xcache,现在我来说一下File缓存。 Thinkphp缓存文件的配置 Home是我建立的前台项目,在Home\Conf\config....
    如果没有缓存的网站是百万级或者千万级的访问量,会给数据库或者服务器造成很大的压力,通过缓存,大幅减少服务器和数据库的负荷,假如我们把读取数据的过程分为三个层,第一个是访问层,第一个是缓存层,第三个是数据库存取层,如果没有缓存层,访问层是直接从数据库存取层读取数据,而设置缓存后,访问层不再是直接在数据库存取层读取,而是从缓存层读取数据.
    我们做个简单的对比,假设一个页面,在一个小时可被访问100万次,如果这个页面每次被访问的时候,都直接读取数据库后再编译生成,在一个小时内将会重复性的生成100万次,而如果这个页面被周期性的缓存10分钟,也就是每间隔10分钟缓存数据才会被生成一次,一个小时内只会被生成6次,两种方式一对比,效果明显,两种比较下服务器负荷的压力比差别十几万倍以上,缓存技术将使得网站负载在高峰期游刃有余.
    thinkphp的缓存方式有许多种,如File、Apachenote、Apc、Eaccelerator、Memcache、Shmop、Sqlite、Db、Redis和Xcache,现在我来说一下File缓存。
    Thinkphp缓存文件的配置
    Home是我建立的前台项目,在Home\Conf\config.php找到缓存的配置文件,配置如下:
    代码如下:
    <?php   
       return array(       
       'DB_TYPE'=>'mysql',       
       'DB_HOST'=>'127.0.0.1',       
      'DB_NAME'=>'w3note',       
       'DB_USER'=>'root',       
      'DB_PWD'=>'123456',       
      'DB_PORT'=>'3306',       
      'DB_PREFIX'=>'w3_',       
      'DATA_CACHE_TYPE'=>'file',//设置缓存方式为file       
      'DATA_CACHE_TIME'=>'600',//缓存周期600秒       
     );       
     ?>
    Thinkphp缓存函数的使用
    在thinkphp中,我喜欢使用快捷缓存函数S()进行缓存,其用法如下:
    代码如下:
    S('data',$Data);//使用data标识缓存$Data数据  
    S('data',$Data,600);// 缓存$Data数据600秒  
     $Data = S('data');// 获取缓存数据  
    S('data',NULL);// 删除缓存数据
     下面是是前台项目控制器的完整代码:
    代码如下:
    <?php       
     // 本类由系统自动生成,仅供测试用途       
      class IndexAction extends Action{       
        public function index(){       
            //如果有缓存,则读取缓存数据       
            //如果没有缓存,则读取数据库当中的数据放入缓存       
            $lists=S('lists');                     
            if(emptyempty($lists)){                           
              $news=M('news');   
              $lists=$news->select();   
              S('lists',$lists,600);   
              echo '这是直接读取数据库的数据';       
               }   
            dump($list);  
     ?>
    访问http://127.0.0.1/Home/index.php/Index/index 输出,这是直接读取数据库的数据:
    代码如下:
    array(10) {  
       [0] => array(12) {  
         ["id"] => string(1) "1"  
         ["catid"] => string(2) "13"  
         ["title"] => string(4) "thinkphp的缓存技术"  
         ["content"] => string(8) "thinkphp的缓存技术"  
         ["tags"] => string(4) "缓存"  
         ["thumb"] => string(0) ""  
         ["description"] => string(7) "thinkphp的缓存技术"  
         ["inputtime"] => string(10) "1348370202"  
         ["posid"] => string(1) "1"  
         ["ord"] => string(1) "2"  
         ["hits"] => string(1) "1"  
         ["status"] => string(1) "1"  
     }
    说明,第一次运行时,会打印出如上面所示信息,刷新一下页面后,少了“ 这是直接读取数据库的数据",说明读取的是先前生成的缓存数据.
    展开全文
  • 主要介绍了彻底删除thinkphp3.1案例blog标签的方法,以thinkphp3.1框架中的案例blog为基础介绍了删除日记时同步删除tag冗余数据的方法,非常具有实用价值,需要的朋友可以参考下
  • 我在前面的《怎样彻底删除thinkphp案例blog的标签?》为拓展案例blog写了一个删除标签的方法。接下来将写一个标签的更新方法。  一般情况下,我们写博客后,很少去改动标签了,但是如果我们改动标签如,删除,添加...

    我们知道,thinkphp的拓展案例blog,只告诉我们怎样去添加标签tag,却没有删除和更新标签的方法。我在前面的《怎样彻底删除thinkphp案例blog的标签?》为拓展案例blog写了一个删除标签的方法。接下来将写一个标签的更新方法。
           一般情况下,我们写博客后,很少去改动标签了,但是如果我们改动标签如,删除,添加,减少标签怎么办呢?这无疑造成think_tag和
    think_tagged两个表垃圾信息的积累。好了,言归正转。

           在更新标签时我们来了解两个参数:
    $oldtags:更新前,存在thinphp_tag表中标签
    $newstags:更新时,插入thinphp_tag之前,表单提交过来的标签

    更新文章时,标签可能会有以下几种变化:

    更新的标签可能出现以下几种情况

    1、$newstags与$oldtags部分相同-> 添加或减少或修改标签,标签的个数和名称和原来部分相同。

    2、$newstags与$oldtags完全相同->不修改标签

    3、$newstags与$oldtags完全不同 ->添加或减少标签,并且标签的个数和名称和原来完全不同 

    对于2我们只要通过判断比较过滤即可。对于1、3通过判断比较后,再作删除或添加处理:

    删除
    要删除的标签名,在thinphp_tag已存在,当标签的count=1时
    ,就把它删除掉,当count>1时,就减少1(count-1)。

    添加
    要添加的标签名称,如果thinphp_tag表中已存在则count(count >1)在原来的基础上+1即count+1,如果不存在(count =0),
    则添加新标签,count+1。

    具体函数如下:

    public function updateTag($vo,$module) { 
                     
     $recordId= trim($vo['id']); 
     if($vo['keywords']==''){//如果没有标签,则把原来的标签删除 
         $this->deltag($recordId);     
       }else{ 
          $newtags = explode(' ', $vo['keywords']);//获取更新的标签并转为数组(keywords是这里的标签字段,在thinkphp的拓展案例blog为tags,注意)                                   
       $condition['recordId'] = $recordId;//当有多个标签时,将查询多篇日记,而不是一篇 
     $tagged=M('Tagged'); 
      $tag=M('Tag');          
      $taggedlist= $tagged->where($condition)->select(); 
    if($taggedlist !==false){ 
                              
     foreach ($taggedlist as $key => $value) { 
      $tagId=trim($value['tagId']); 
      $tagvo=$tag->where('id='.$tagId)->find(); 
      $oldtags[]=$tagvo['name'];//获取原来的标签 
      }    
       $result=count(array_diff(array_diff($newtags,$oldtags),array_diff($oldtags,$newtags)));     
       $result1=count(array_diff($newtags,$oldtags));//返回更新前后TAG的差值数 
      $result2=count(array_diff($oldtags,$newtags));//返回更新前后TAG的差值数 
                                                      
      if(($result1 !== $result2) || ($result !==0)){//2与原来的完全相同->过滤掉             
       $array_intersect=array_intersect($oldtags,$newtags);//取得交值 
       $oldtags_diff=array_diff($oldtags,$array_intersect);//原来的标签,被更新后已无用,需要删除的 
        $newtags_diff=array_diff($newtags,$array_intersect);//修改的标签,需要添加的 
                                                              
    //删除或者count-1    
         if(count($oldtags_diff) !==0){  
                          
         foreach ($oldtags_diff as $name) { 
         $tagvo=$tag->where("module='$module' and name='$name'")->find(); 
         $count=intval($tagvo['count']);//获取标签的数量 
                
     if($count==1){ 
        $tag->where('id='.$tagvo['id'])->delete(); 
        $tagged->where('tagId='.$tagvo['id'].' and recordId='.$recordId)->delete(); 
     }elseif($count > 1){ 
                      
       $tag->where('id='.$tagvo['id'])->setDec('count',1);//标签数量减1 
       $tagged->where('tagId='.$tagvo['id'].' and recordId='.$recordId)->delete();//删除tagged中相关数据 
                 
     } 
      }              
      } 
                     
                    
    //添加更新的标签   
     if(count($newtags_diff) !==0){ 
                                             
       foreach ($newtags_diff as $v) { 
           $v = trim($v); 
                      
           if (!empty($v)) { 
            // 记录已经存在的标签 
         $map['module'] = $module; 
            $map['name'] = $v; 
            $tagg = $tag->where($map)->find(); 
           if ($tagg) {//如果现在保存的标签与之前相同的标签累加 
           $tagId = $tagg['id']; 
              $tag->where('id=' . $tagg["id"])->setInc('count', 1);//count统计加1(这个函数有三个参数,默认加1) 
              } else {//如果是新添的标签,标签+1 
                       $t = array(); 
                       $t["name"] = $v; 
                       $t["count"] = 1; 
                       $t["module"] = $module; 
                       $result = $tag->add($t); 
                       $tagId = $result; 
                } 
          } 
                     //记录tag信息 
        $t = array(); 
          $t["module"] = $module; 
          $t["recordId"] = $recordId;//保存news的ID 
          $t["tagTime"] = time(); 
          $t["tagId"] = $tagId;//保存tag的ID 
          $tagged->add($t); 
         } 
        }  
                   
                   
         } 
                   
         } 
         } 
             
        }

    使用方法 

     public  function update() { 
           $Blog=D('Blog'); 
           $vo=$Blog->create(); 
               $this->updateTag($vo,' Blog ');//更新前调用 
                 if (false === $vo) { 
                            $this->error($Blog->getError()); 
                         } 
                       // 更新数据 
                       $list = $Blog->save(); 
                       if (false !== $list) { 
                         //print_r($list); 
                         
                         $this->success('编辑成功!'); 
                       } else { 
                           //错误提示 
                           $this->error('编辑失败!'); 
                       } 
                    }
     

    完整的源码下载地址:http://www.w3note.com

    本文首发WBlog博客,欢迎转载!转载请注明本文地址,谢谢。


    本文地址:http://www.w3note.com/web/16.html


    展开全文
  • thinkphp5案例thinkphp5开发的fivecms内容管理系统,简洁易懂易上手。
  • thinkphp CURD完整案例

    2015-08-27 17:44:12
    thinkphp CURD完整案例,控制器,配置文件,增删查改完成案例,带数据库。新建数据库study ,然后导入my_study.sql文件。
  • ThinkPHP5实战案例

    2020-08-01 11:45:53
    基于ThinkPHP5实现微信自动登录、微信支付、支付宝支付、Web推送、阿里云短信、极光推送、二维码生成 严格按照TP5框架目录方式上传 有些功能大家可以加以修改直接做成一个公共接口,放在application的common.php中...
  • 主要介绍了thinkPHP事务操作,结合简单案例形式分析了thinkPHP事务操作的基本原理与使用方法,需要的朋友可以参考下
  • Thinkphp事务操作案例

    千次阅读 2017-03-04 19:09:33
    Thinkphp事务操作案例 //开启mysql事务操作 $model = M(); $model->startTrans(); $flag=false; $deal1 = M('ppdd')->where(array('id'=>$data_P['id'],'zt'=>'0'))->save($data_arr); $deal2 = M('tgbz')->where...
  • 基于ace前台框架、thinkphp后台框架和mysql数据库实现的一款经典后台管理平台开发案例,可用于初学者深入开发学习。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,702
精华内容 1,080
关键字:

thinkphp案例