ThinkPHP5.1 源码分析(四)- 门面Facade
门面为容器中的类提供了一个静态调用接口,提升可测试性和扩展性,简化了代码结构。
在`test()`方法中,通过调用`Config::get()`方法获取`'app'`下的所有配置。这里实际上并未直接在`Config`类或其父类`Facade`中调用`get`方法。钱炒股源码而是通过`__callStatic()`函数,创建了`Config`类的一个实例并调用其`get`方法。实例化过程在`createFacade()`方法中完成,该方法返回`'config'`作为实际调用的类名。`__callStatic`和`self::`的区别在于前者用于调用静态方法,后者用于访问类内部属性。
测试用例展示了如何自定义门面类的实现。在项目同级目录创建`facade`自定义目录,并在`common`目录中定义`Allen`和`Nikki`类。自定义门面类通过`getFacadeClass()`方法返回类名,如`'app\common\Allen'`。通过`bind()`方法可以将别名与类绑定,简化调用。在`provider.php`中定义绑定关系,使得`'allen'`作为别名同样生效。
框架的libevent源码编译基础类库之所以能直接返回`config`、`app`等,是因为在容器类实例化类时,已预先定义了这些绑定关系。`provider.php`中的定义在初始化流程中通过`bindTo`方法与容器类属性进行合并,使得调用门面类时能够直接使用。
总结,门面的核心功能在于通过静态调用接口,简化类的调用,提升代码可读性和可维护性。通过容器类的管理,实现了灵活的类实例化和方法调用。自定义门面类和框架内类的调用机制,展示了ThinkPHP5.1源码中门面设计的高效性和灵活性。
漏洞分析ThinkPHP5任意代码执行分析全记录
ThinkPHP是轻量级的PHP开发框架,具有免费开源、快速、简单且面向对象的特点。然而,在5.*版本中存在安全隐患,因为控制器名过滤不严格,导致可能出现getshell漏洞。doubango源码分析受影响的版本包括5.0和5.1。
漏洞分析中,我们发现该漏洞源于ThinkPHP5框架底层对控制器名过滤不严。测试人员可以通过url调用框架内部的敏感函数,出现getshell漏洞。具体代码实现如下:
在thinkphp/library/think/App.php文件中,首先看到routecheck代码,由于默认按照图一的方式进行解析调度,如果开启强制路由模式,会直接抛出错误,这时通过Route::import命令加载路由,继续跟进路由。
thinkphp/library/think/Route.php文件显示tp5在解析URL时,只是将URL按分割符分割,并没有进行安全检测。测试人员最为关心的是Exchange对外提供的访问接口以及使用的加密验证类型。
在thinkphp/library/think/App.php文件中,由于程序并未对控制器进行有效的安全过滤和检查,测试人员可以通过引用“\”来调用任意方法。跟进到module方法时,测试时注意使用一个已存在的gogs 源码 安装module,否则会抛出异常,无法继续运行。此处直接从之前的解析结果中获取控制器名称以及操作名,无任何安全检查。
跟进到实例化Loader控制器方法时,可以看到如果控制器名中有“\”,就直接返回。回到“thinkphp/library/think/App.php”的module方法,正常情况下应该获取到对应控制器类的实例化对象,而现在得到了一个“\think\App”的实例化对象。通过url调用其任意的public方法,同时解析url中的额外参数,当作方法的参数传入。我们可以调用invokeFunction这个方法,构造payload。
所有基于tp5.0框架建设的网站都受此漏洞影响。测试该漏洞点是否被修复时,网址后面直接拼接以上代码,执行之后发现出现phpinfo页面,说明漏洞存在。在public目录下创建insfo.php,tensorflow minist 源码修改漏洞利用代码,直接在public目录下创建一个名为insfo.php的一句话木马。删除insfo.php文件。
解决方案中,直接添加补丁,升级ThinkPHP版本,开启强制路由。在ThinkPHP5.0版本的thinkphp/library/think/App.php文件中,在Module类的获取控制名处添加正则过滤代码。
PHP框架thinkPHP6的下载与安装——详细步骤
要成功安装并使用PHP框架thinkPHP6,您将遵循以下详细步骤。首先,您需要下载和安装Composer,这是PHP包管理系统。访问Composer中文网或Packagist中国全量镜像官网获取最新版本的Composer。
安装完成后,打开命令提示符或终端窗口。为了确保您拥有最新版本的Composer,执行以下命令:
composer selfupdate
下一步是使用Composer下载thinkPHP6.0的源代码。在Composer官网中搜索关键词"topthink/think",然后复制并执行以下命令以下载和安装thinkPHP:
composer create-project topthink/think
完成安装后,您需要打开安装目录。通常,目录中会有一个名为"think"的文件夹。使用本地服务器中的php命令启动它,输入以下命令:
php think run
启动后,您将看到一个提供网址的输出:.0.0.1:。在浏览器中访问此网址,您将看到thinkPHP的默认界面。至此,您已成功下载并安装了thinkPHP6。
如果您遵循以上步骤,您将能够轻松地在您的项目中使用thinkPHP6框架。
laravelåthinkphpçåºå«ï¼
thinkphp主è¦æä»ä¹ç¨
1ãèä¸å¯ä»¥å¾æ¹ä¾¿çæ§å¶æ³¨å ¥çåºæ¬å®å ¨æªæ½ãåç§å¤åçæ¹æ³ä¹é常好ç¨ï¼æ¯å¦ajaxãcookieçç2åç§åè½é½å ¨ãæ³è¦é«å¤§ä¸ï¼æ²¡é®é¢ï¼thinkphpçåç§åè½é½é常é½å ¨ï¼ä»ä¹ä¸ä¼ ãéªè¯ç ãå页ãé«éç¼åã模åéªè¯balabalaå ¨é½æã
2ãæ¨å¥½ï¼ææ¥ä¸ºæ¨è§£ThinkPHPæ¯ä¸ä¸ªå è´¹å¼æºçãå¿«éç®åçãé¢å对象çãMVCç»æçè½»é级PHPå¼åæ¡æ¶ï¼æ¯ä¸ºäºææ·Webåºç¨å¼ååç®åä¼ä¸åºç¨å¼åèè¯ççã项ç®åç«äºå¹´åï¼éµå¾ªApache2å¼æºåè®®åå¸ã
3ãthinkphpæ¯ç¼ç¨è¯è¨phpçä¸ä¸ªæ¡æ¶ï¼æ¡æ¶å°±æ¯å·¥å ·éåä½ï¼æé«å¼åæççã
4ãThinkphp模åç±»ç主è¦ä½ç¨æ¯ï¼å®æä¸å¡é»è¾å¤çï¼å æ¬å¯¹æ°æ®è¡¨çå¢å æ¹æ¥ï¼CUEDï¼æä½ã对å¤ççæ°æ®è¿è¡å°è£ ï¼å¯¹å段åå±æ§è¿è¡éªè¯ï¼å®æ对象åå±æ§çè¿æ»¤çåè½ã
5ãä¸è¬æ åµä¸æ¯ä¸ä¸ªè¡¨å¯¹åºä¸ä¸ªmodelç±»ï¼ä¸ç¨ä¹æ¯å¯ä»¥çã
6ãè¿ä¸ªæ¯ä¸ä¸ªactionç±»ï¼æåä¸å¥$this-display(Publicï¼text)ï¼æ¯æ¾ç¤ºpublicä¸çtext模æ¿ãä¹å°±æ¯è¯´å æ§è¡è¿ä¸ªç±»çè¿ä¸ªæ¹æ³ï¼ç¶åæ¾ç¤ºæ¨¡æ¿ã模æ¿ç¨å°çåéå°±ä»è¿éè°ç¨assignåé è¿å»ã
thinkphpä¸phpçåºå«
æ»çæ¥è¯´ï¼ç»æ¢¦ï¼dedecmsï¼ãphpcmsé½æ¯cmså 容管çç³»ç»ï¼thinkPHPæ¯PHPçä¸ç§å¼åæ¡æ¶ï¼cmsç¸å¯¹ç®åï¼è®°ä½å¯¹åºçè°ç¨æ ç¾ï¼å°±æ¯ç®åçå¥æ¨¡æ¿ï¼ä¸ç¨å¼ååå°ï¼äºæ¬¡å¼åé¤å¤ï¼ï¼æ¨¡ååªè½æ¯cmsæä¾ç模åã
åºæ¬ä¸å¤æ°cmsé½æ¯åºäºæ¡æ¶å¼åçï¼å ¶ä¸æäºcmsç³»ç»å°±æ¯åºäºthinkPHPæ¡æ¶å¼åèµ·æ¥çï¼æ以å¯ä»¥è¯´ç¨äºå¼å项ç®çæ¡æ¶ï¼æ¯é¡¹ç®çå身ã--就好æ¯ç³ç åæ¿å±ã
æä¸å¾ä¸æ¿è®¤ThinkPHPæ¯ä¸ä¸ªæ¯å½å æ¡æ¶è¿è¥æ¹é¢çæ¦æ ·ï¼å½FleaPHP/QeePHPæç«çé£éµï¼æ说è¿FleaPHP/QeePHPä¼åçï¼ã
æ人说tpæ¯è¾èè¿ï¼æè§å¾è¿æ¯å®çä¼ç¹ï¼å 为强大æ以æèè¿ï¼å¦ææ¯é常å°ç项ç®ï¼æè§å¾ç¡®å®ä¸å¤ªéåï¼åºè¯¥ä½¿ç¨æ´è½»é级çæ¡æ¶ã
ç®åphpå¼åç½ç«,æ为æµè¡çæ¡æ¶æ¯åªå 个?CakePHPCakePHPæ¯ä¸ä¸ªå¿«éå¼åPHPçæ¡æ¶ï¼å ¶ä¸ä½¿ç¨äºä¸äºå¸¸è§ç设计模å¼å¦ï¼AssociationDataMappingï¼FrontController以åMVCã
ä¸é¢æ们èä¸èæ¯è¾æµè¡çä¸ä¸ªphpå¼åæ¡æ¶ãLavarelï¼è¿æ¯ä¸æ´å¥è¯æ³ç®æ´ï¼å¥½ç解çwebå¼åæ¡æ¶ã主è¦çä¼å¿éä¸ä½ç°å¨åæçæ¯æãææ¡£çå ¨å¤ï¼è¿ææ´»è·ç社åºä¸ã
Canphpæ¯ä¸ä¸ªä¸å½å¼æºçphpæ¡æ¶ï¼ä¸»è¦ç设计ç念就æ¯ä¸ºäºè¿½æ±ç®åï¼åå°phpåå¦è çå¦ä¹ ææ¬ï¼èä¸è¿½æ±é«æçï¼æ¨¡çç±»ä¸æä¾å ¶ä»æ ç¾ï¼ç´æ¥åºç¨phpçæºä»£ç ï¼è¿æå®æ¯å¾®å æ ¸è®¾è®¡ï¼ç§»æ¤æ§å¼ºï¼æ¾æ£è¦åçç¹ç¹ï¼è½éæå°ä½ ä»»ä½ä¸ä¸ªç³»ç»éé¢ã
CakePHPå¼åæ¡æ¶å¦æä½ ä»ç¶éè¦ç¼åé¢åPHP4å ¼å®¹ç代ç ï¼CakePHPå°æ¯ä¸ä¸ªé常ä¸éçéæ©ï¼å¨PHP4&5çMVCå¼æ¡æ¶å表éé¢ï¼CakePHPé½æ¾ç»æ¯ææµè¡çã
PHP常ç¨æ¡æ¶æï¼thinkphpï¼å½äººå¼åï¼ææ¡£æ¯è¾å ¨ï¼ä¸æææ¡£ãå ¥é¨æ¯è¾ç®åãåæ³å¿«ãlaravelï¼å½å¤äººåçï¼å ¥é¨é¨æ§é«ãè±è¯ææ¡£ï¼ç¤¾åºæ¯è¾æ´»è·ãsymfonyï¼å½å¤äººåçãé¨æ§æ¯è¾é«ï¼è±è¯ææ¡£ã
ææµè¡çPHPæ¡æ¶ï¼Symfonyï¼LaravelåYiiãSymfonySymfonyæ¯ä¸å¥å¯éå¤ä½¿ç¨çPHPç»ä»¶ï¼å®å 许å¼åè 人åå建å¯æ©å±çï¼é«æè½çåºç¨ç¨åºãå®æ个ç»ä»¶å¯ä»¥éæ©ï¼å¼å人åå¯ä»¥æ足å¤çèªç±å¨RADç¯å¢ä¸è¿è¡è¯éªåå·¥ä½ã
ä¼ä¸å¼åç¨tp6è¿æ¯hyperf1ãç¼ç¨è¯è¨ç±»åä¸åï¼TP6æ¯ä¸ç§åºäºPrologè¯è¨çé»è¾ç¼ç¨è¯è¨ï¼èJavaæ¯ä¸ç§åºäºé¢å对象ç¼ç¨çéç¨ç¼ç¨è¯è¨ãåºç¨åºæ¯ä¸åï¼TP6主è¦ç¨äºäººå·¥æºè½ãèªç¶è¯è¨å¤çåä¸å®¶ç³»ç»çé¢åï¼èJavaå广æ³åºç¨äºä¼ä¸çº§åºç¨åWebåºç¨å¼åã
2ãæ²¡å¿ è¦ãtp6æ²¡å¿ è¦ç¨å¤åºç¨ï¼å 为æ¬å°±æ¯åå ¥å£èªå¨å¤åºç¨æ¨¡å¼ï¼å¹¶ä¸ä¸éè¦ä½¿ç¨composeræ¥å¼å¯å¤åºç¨æ¨¡å¼æ©å±ï¼tp6åå¸å¼é¨ç½²å¤ä¸ªæ°æ®åºï¼å®ç°è¯»åå离ãtp6çåå¸å¼é¨ç½²è¯»ååä»ç¶æ¯ä¸ä¸ªç³»ç»ã
3ãtp6loadåimportæ¯PHPå¼åä¸é常常ç¨ç两个å½æ°ãtp6loadç¨äºå 载类æ件ï¼èimportåæ¯éè¿åå空é´å 载类æ件ã
4ãå¯ä»¥æ¯å¯ä»¥ï¼ä½æ¯ä¸æ¨èï¼commonéé¢æ¾çæ¹æ³æ´å¤çæ¯å ¬ç¨çæ¹æ³ï¼æ¯å¦å¾å¤æ¨¡åé½ä¼è°ç¨çæ¹æ³ãå æ¤ï¼å¦æä¸ä¸ªæ¹æ³åªæ¯ä¸ªå«æ¨¡å使ç¨çè¯ï¼å»ºè®®å°å®æ¾å°æ¨¡å对åºçå é¨å³å¯ï¼è¿æ ·æ´æ¹ä¾¿ä»£ç çéæåè¿ä»£ï¼æ´åºè²ã
5ãè¿å 个çåéçè¯åºè¯¥æ¯åç¡çè·¯ç±å¨æ好ï¼è ¾è¾¾åTPæ¯å ¥é¨çº§å®¶ç¨è·¯ç±å¨ãå¦ææ¯å¯¹ç½éæå¾é«è¦æ±çè¯å¯ä»¥èèæç§æè 软路ç±ãå¦ææ¯ä½å¸¦å®½ç¯å¢çè¯å 个çåçè·¯ç±å¨é½å·®ä¸å¤çã
phpæ¡æ¶åªä¸ªå¥½ç¨,容æä¸æ1ãSpeedPHPæ¡æ¶æ¯ä»å®é è¿è¡çåä¸ç³»ç»ä¸åå ¶ç²¾åèæçï¼å¨ç¨³å®æ§åè¿è¡é度ä¸é½é常åºè²ï¼åæ¶æçæ¸ æ°çæ¶æï¼æ´æå©äºæé«å¢éå¼åæçï¼æç¨ä¼å¤ï¼å ¥é¨å®¹æï¼å·ç§°æéååå¦è çPHPæ¡æ¶ï¼å¿«éå¸¦ä½ è¿å ¥PHPé«æçè¡åã
2ãLavarelï¼è¿æ¯ä¸æ´å¥è¯æ³ç®æ´ï¼å¥½ç解çwebå¼åæ¡æ¶ã主è¦çä¼å¿éä¸ä½ç°å¨åæçæ¯æãææ¡£çå ¨å¤ï¼è¿ææ´»è·ç社åºä¸ãå¦ä¹ Lavarelï¼éè¦å 对PHPè¯è¨ãé¢å对象ãæ°æ®åºçæä½æä¸ä¸ªåºæ¬çå¦ä¹ åºç¡ã
3ãæ¨è使ç¨thinkphpï¼è¿ä¸ªæ¯è¾ç®åï¼ä¸ææ¯è¾å¿«ThinkPHPæ¯ä¸ä¸ªå¿«éãå ¼å®¹èä¸ç®åçè½»é级å½äº§PHPå¼åæ¡æ¶ï¼è¯çäºå¹´åï¼ååFCSï¼å¹´å æ¦æ£å¼æ´å为ThinkPHPï¼ä»¥ä¸ç®ç§°TPï¼ãä½ä¸ºå½äº§æ¡æ¶ï¼å¨å½å ã
4ãé¢ä¸»å¦ææ¯ä¸ä¸ªåæ¥è§¦PHPçæ°äººçè¯ï¼å¯è½ä¼è§å¾æ¡æ¶å¾å¤ï¼å个æ¡æ¶é½æåèªçç¹ç¹ï¼é¾ä»¥ææ¡ï¼å ¶å®è½ç¶æ¯ä¸ªæ¡æ¶çç¹ç¹ä¸ä¸æ ·ï¼ä½æ¯æ¡æ¶çæè·¯é½æ¯å·®ä¸å¤çï¼å¦æä½ ç¨çäºï¼å°±ä¼è§å¾ä»ä¹æ¡æ¶é½å·®ä¸å¤ã
5ãä»MVCï¼DAO/ï¼widgetsï¼cachingï¼ç级å¼RBACï¼Webæå¡ï¼å°ä¸»ä½åï¼INåLNï¼Yiiæä¾äºä»æ¥Web0åºç¨å¼åæéè¦çå ä¹ä¸ååè½ãèä¸è¿ä¸ªæ¡æ¶çä»·æ ¼ä¹å¹¶ä¸å¤ªé«ãäºå®ä¸ï¼Yiiæ¯æææççPHPæ¡æ¶ä¹ä¸ã
6ãä½ å¥½ï¼å ¶å®ç°å¨ä¸»æµçPHPæ¡æ¶é½åæä¼å¿ï¼èä¸é½å¯ä»¥å®æphpå¼åè çåºæ¬è¦æ±ãä½æ¯å ¶å®å¨ä½¿ç¨çä¸ï¼æ¯ä¸ªåºåé½æ¯ä¸ä¸æ ·çãå¨ä¸å½ï¼thinkphpç使ç¨çè¯å®æ¯æé«çï¼èå¨å¤å½å个æ¡æ¶ç使ç¨çä¹ä¸ä¸æ ·ã
PHP五大主流框架介绍
介绍PHP五大主流框架(排名不分先后)
1. Laravel
Laravel是一款简洁、优雅的PHP Web开发框架。它旨在从混乱的代码中解放开发者,助你构建完美的网络应用。代码简洁、富有表达力。
2. Thinkphp
THinkPHP框架是一个快速、兼容且轻量级的国产PHP开发框架。它诞生于年初,原名FCS,年元旦正式更名为ThinkPHP。特别适合小型项目,国内最受欢迎的国产php开源框架。
3. Zend Framework
Zend Framework (ZF)由Zend公司推出,是用PHP 5来开发web程序和服务的开源框架。ZF以%面向对象编码实现,组件结构独特,每个组件几乎独立,提供“use-at-will”设计,便于开发者独立使用。
4. Yii2
Yii是一款高性能框架,适用于开发WEB 2.0应用。Yii自带丰富功能,如MVC、DAO/ActiveRecord、IN/LN、缓存、身份验证和基于角色的访问控制、脚手架、测试等,大幅缩短开发时间。
5. CodeIgniter
CodeIgniter是一款小巧但功能强大的PHP网站开发框架和工具包。为开发者提供了足够的自由支持,帮助更快速地工作。
选择合适的框架能加速项目构建,关键在于开发者有坚实的基础。今日介绍到这里。
如需建立网站,推荐阿里云建站云企的活动。适合无建站经验的同学,提供数千套网站模板,可随意替换,备案上线速度快,拥有可视化的后台管理系统,集成流量分析工具,SEO收录快等优势。
相对于别的php框架来说thinkphp有什么缺点吗?
ThinkPHP作为一款PHP框架,以其简洁易用的特性,吸引了众多开发者。如同操作系统的Windows,ThinkPHP能迅速帮助开发者理解MVC模式,上手门槛相对较低。
然而,ThinkPHP并非完美无缺。正如操作系统需要定期更新修补安全漏洞一样,ThinkPHP同样存在维护与更新的必要性。这可能意味着开发者需要在一定程度上关注框架的版本更新,以应对潜在的安全风险或性能提升。
在使用过程中,偶有性能问题或运行时的不稳定性也时有发生。但这对于已经拥有框架基础的开发者而言,通过社区资源、文档或寻求同行帮助,通常能够较为轻松地解决这些问题。
不同开发者基于不同的需求,可能会选择其他框架,如Linux、MAC OS等,或者直接使用Linux命令行工具。每种框架都有其特定的应用场景与优点,选择合适的框架是关键。
值得注意的是,不同开发者对框架的偏好差异很大。一些技术大牛可能对Windows框架情有独钟,能够开发出广受欢迎的软件产品。而另一些开发者,如所谓的“装逼人士”,虽然可能对苹果设备情有独钟,但在其他技能,如制作PPT等方面可能表现平平。
因此,选择适合自己的框架至关重要。无论是ThinkPHP还是其他框架,重要的是根据项目需求、团队技能、以及长期维护成本等因素进行综合考量,找到最合适的工具来提升开发效率和项目质量。
thinkphpdjangoåªä¸ªå¼ºå¤§ï¼
导读ï¼æ¬ç¯æç« é¦å¸CTOç¬è®°æ¥ç»å¤§å®¶ä»ç»æå ³thinkphpdjangoåªä¸ªå¼ºå¤§çç¸å ³å 容ï¼å¸æ对大家ææ帮å©ï¼ä¸èµ·æ¥ççå§ãpythonphpççæ¡æ¶ä½ç¨æ¯ä»ä¹ï¼Djangoæ¯ä¸ä¸ªå¼æ¾æºä»£ç çWebåºç¨æ¡æ¶ï¼ç±Pythonåæã
ThinkPHPæ¯ä¸ä¸ªå¼æºçPHPæ¡æ¶ï¼æ¯ä¸ºäºç®åä¼ä¸çº§åºç¨å¼ååææ·WEBåºç¨å¼åèè¯ççã
æ¡æ¶å°±æ¯éè¿æä¾ä¸ä¸ªå¼åWebç¨åºçåºæ¬æ¶æï¼PHPå¼åæ¡æ¶æPHPWebç¨åºå¼åæå°äºæµæ°´çº¿ä¸ãæ¢å¥è¯è¯´ï¼PHPå¼åæ¡æ¶æå©äºä¿è¿å¿«é软件å¼åï¼RADï¼ï¼è¿è约äºä½ çæ¶é´ï¼æå©äºå建æ´ä¸ºç¨³å®çç¨åºï¼å¹¶åå°å¼åè çéå¤ç¼å代ç çå³å¨ãè¿äºæ¡æ¶è¿éè¿ç¡®ä¿æ£ç¡®çæ°æ®åºæä½ä»¥ååªå¨è¡¨ç°å±ç¼ç¨çæ¹å¼å¸®å©åå¦è å建稳å®çç¨åºãPHPå¼åæ¡æ¶ä½¿å¾ä½ å¯ä»¥è±æ´å¤çæ¶é´å»åé çæ£çWebç¨åºï¼èä¸æ¯ç¼åéå¤æ§ç代ç ã
好æ¯ä½ 家建æ¿åï¼å·²ç»æäºæ´ä¸ªæ¡æ¶ï¼ä½ åªéï¼å¨è¿ä¸ªåºç¡ä¸è¿è¡å å·¥å³å¯ã
phpæ¡æ¶
è¿è约äºä½ çæ¶é´ï¼æå©äºå建æ´ä¸ºç¨³å®çç¨åºï¼å¹¶åå°å¼åè çéå¤ç¼å代ç çå³å¨
使å¾ä½ å¯ä»¥è±æ´å¤çæ¶é´å»åé çæ£çWebç¨åºï¼èä¸æ¯ç¼åéå¤æ§ç代ç
ç¾åº¦ç¾ç§?
æ好ç¨çæ¡æ¶æ¯åªä¸ªï¼CI,YIIï¼rails,thinkphpåªä¸ªå¥½ï¼æææ¡æ¶ä¸æç¥å¥çãå¼åæè¿ éçæ¯rubyonrailsï¼å·ç§°æ¯å«çæ¡æ¶å¿«4åï¼æè¨éèï¼å 为railsæèªå¨ä»£ç çæå¨åè½ï¼å建ä¸ä¸ªæ¨¡åï¼èªå¨ç»ä½ æ好CURDæä½ãåæ¥çå¾å¤æ¡æ¶ï¼å æ¬django(python)ï¼lavarel(php),cakephp(php)é½æ¯æ¨¡ä»¿railsï¼ä½é½ä¸å¦railsï¼ä¸»è¦åå å¨äºrubyè¯è¨æ¬èº«çç®æ´ä¸ä¼ç¾ï¼è¯»railsç代ç æè§ç¹å«èæï¼ç¹å«ç²¾ç»ï¼ä¸ç¹ä¸ç»ï¼å¾å°æphpæ¡æ¶ä¸å¸¸è§ç大段æ£æµã对æ¯ãifå¤æ代ç ï¼ï¼èå ¶å®è¯è¨çæ¡æ¶é½è¾¾ä¸å°è¿ç¹
ç®åææ´»è·çæ¡æ¶æ¯thinkphpãCIãYII社åºä¹è¿å¯ä»¥ï¼å ¶ä½ç社åºäººæ°å¾å·®ï¼æ²¡æ³èèï¼å°¤å ¶æ¯railsï¼å¨ä¸å½äººæ°é常ä¹ä½ï¼é ç½®ä¸å¯å¨éç¨å½ä»¤è¡ï¼winç³»ç»ä¸è½å¾å¥½å ¼å®¹ï¼é®é¢é½æ¾ä¸å°çæ¡ï¼æç»ä¸å¾ä¸èå¼ã
ä»äººæ°ä¸æ档详ç»ä¸ï¼æç»èåºçæ¯tp,ci,YII,ZENDè³ä»è¿ä¸ªä¸ææåé½æ²¡æï¼ç´æ¥pass,ä¸ç®¡å®å·ç§°å¤ä¹å¼ºå¤§ï¼è¿ä¸ªä¸æ社åºä¸ææ¡£é½æ²¡æï¼åºäºé®é¢è¿è¦ç¿»å¢çè±æï¼å¤ªçè¦äº
å¨TPãYIIãCIä¸è çè§éä¸ï¼YIIåæ ·æå½ä»¤è¡ï¼æå½ä»¤è¡çä¸å¾ååï¼ï¼æèªå¨çæå¨åè½ï¼ä½æ¯æ个巨大缺ç¹ï¼çæåºå¾å¤ä¸ç¨ç空æ件夹ï¼å¯¼è´æ件ç»æé常混乱ï¼æ§å¶å¨æ件ã模åæ件夹åå¤é½æï¼ä¸ç¥éåªä¸ªè·åªä¸ªï¼èä¸YIIçå½æ°æ¯è¾ç¢çåï¼è¯æ³ä¸å¤æ¸ æ°ä¹ä¸å¥½æï¼æç»PASS
TPæ¯å½äº§çï¼å¦æCIç»åï¼TPä¹å¯ä»¥ç»åï¼ä¸¤è å¾æ¥è¿ï¼tp社åºäººæ°å¾æ´»è·ï¼æä»ä¹é®é¢ç¾åº¦ä¸æå°±åºæ¥äºï¼å¼æºä»£ç ä¹é常å¤ï¼ç±»åºéæ度è·CIä¸ç¸ä¸ä¸ï¼å·®å°±å·®å¨æ件ç»æä¸ç¨éCIä¸äºï¼è¯æ³æææ§ä¹æ¯CIç¨å·®
请é®å¦ä¹ django.ThinkPHP.node.jsåªä¸ªå¥½å¢ï¼æ³å¦djangoä½ å¾å å¦Python
æ³å¦thinkphpä½ å¾å å¦php
æ³å¦node.jsä½ å¾å å¦javascript
thinkphpdjangoå¦ä¹ èµ·æ¥åªä¸ªæ´ç®åï¼åªä¸ªå¼åæçé«ï¼thinkphpæ¯å½äº§çï¼ææ¡£é½æ¯ä¸æçï¼ä½¿ç¨PHPå¼åçã
djangoæ¯å½å¤çï¼ææ¡£æä¸æä¹æè±æï¼ä¸è¿ææ°çææ¡£æ¯è±æçï¼ä½¿ç¨pythonå¼åçï¼ä»ä»¬å¨æ°æ®åºæä½çä¸äºæ¹å¼ä¸åæ¯æºåçã
ç个人è½åäºï¼çæpythonè¿æ¯phpäºï¼djangoå¨pythonçå¼æºæ¡æ¶ä¸é£æ¯ç¸å½çæåæ°çã
ç»è¯ï¼ä»¥ä¸å°±æ¯é¦å¸CTOç¬è®°ä¸ºå¤§å®¶æ´ççå ³äºthinkphpdjangoåªä¸ªå¼ºå¤§çç¸å ³å 容解çæ±æ»äºï¼å¸æ对æ¨ææ帮å©ï¼å¦æ解å³äºæ¨çé®é¢æ¬¢è¿å享ç»æ´å¤å ³æ³¨æ¤é®é¢çæååï½
smartyååçphp(smartyphp)
æ³ç¨phpåsmartyåä¸ä¸ªç¡®å®ç»é¢
ä»ä¹ç»é¢ããä»ä¹è¿ç§»ãããä¸ç¥éä½ è¦è¡¨è¾¾ä»ä¹ï¼æ¯è¯´é¡µé¢è·³è½¬çææä¹ï¼
æ±å¤§ç¥è§£ésmartyåthinkphpçåºå«
ThinkPHPæ¯PHPæ¡æ¶smartyæ¯æ¨¡æ¿å¼æThinkPHPå¯ä»¥ç¨smartyå为模æ¿å¼æä¹å¯ä»¥ä½¿ç¨èªå¸¦ç
phpåsmartyç¼è¯åçsmartyæ¯ä¸ªæ¨¡æ¿å¼æï¼ææ¾èçå°æ¹å°±æ¯æå¯ä»¥æ模æ¿ç¼åèµ·æ¥ã
ä¸è¬æ¨¡æ¿æ¥è¯´ï¼é½æ¯åä¸ä¸ªéæ页é¢ï¼ç¶åå¨éé¢æä¸äºå¨æçé¨åç¨ä¸ååé符åå¼ï¼ç¶åå¨PHPéæå¼è¿ä¸ªæ¨¡æ¿æ件ï¼æåé符éé¢çå¼æ¿æ¢æï¼ç¶åè¾åºæ¥ï¼ä½ å¯ä»¥çä¸PHPLibéé¢çtemplateé¨åã
èsmarty设å®äºç¼ååæ°ä»¥åï¼ç¬¬ä¸è¿è¡æ¶åä¼æ模æ¿æå¼ï¼å¨phpæ¿æ¢éé¢å¼çæ¶åæ读åçhtmlåphpé¨åéæ°çæä¸ä¸ªä¸´æ¶çphpæ件ï¼è¿æ ·å°±çå»äºæ¯æ¬¡æå¼é½éæ°è¯»åhtmläºãå¦æä¿®æ¹äºæ¨¡æ¿ï¼åªè¦éæ°å·ä¸å°±è¡äºã
大æ¦å°±æ¯è¿ä¹ä¸ªææï¼è¿æ¯æè§ä½ çä¸smartyå®æ¹çææ¡£ã
æ¨èå 个è¾å¥½çphpæ¡æ¶smartyæä¹æ ·ï¼å¦èµ·æ¥é¾ä¸é¾smartyæ¯æ¨¡æ¿å¼æï¼å¾å¥½ç¨ï¼å¦èµ·æ¥ä¹ä¸é¾
æ¡æ¶çè¯ï¼thinkphpåcakephpé½ä¸é
phpåsmartyå°åºæ¯æä¹ç»åçï¼smartyå°±æ¯ä¸ºäºå离phpåhtmlèåºç°çãå æ¯åå¹²åçï¼ç¶åéè¿smartyçæ ç¾å°ä¸¤è ç»åå¨ä¸èµ·ã
Smartyåphp没çæ楼主çæé®ï¼å¦ææ¯æ³æphpçç»ææ¾ç¤ºå¨smartyç页é¢ä¸ï¼è¿æ ·å:
php
require'smarty.php';
$smarty-assign('key',$value);//ç»keyèµå¼
$smarty-display('ä½ ç页é¢.html');
ä½ ç模æ¿é¡µé¢éç¨{ $key}å°±å¯ä»¥æ¾ç¤ºå¯¹åºå¼
æè ç¨
{ foreach$keyas$itemkey=$value}
{ $itemkey},{ $value}
{ /foreach}æµç¨æ§å¶
2024-12-28 18:34
2024-12-28 17:27
2024-12-28 17:25
2024-12-28 16:35
2024-12-28 16:28