为什么PHP框架控制器层加载一个.tpl为后缀的文件,我在文件里面写<?php echo $name; //居然能输出正确的值 //问题,为啥.tpl后缀的文件为啥也能执行PHP脚本呢??不是用过.PH的文件才能解析PHP吗?
PHP解释器只关心文件内容,扩展名是什么它并不关心 在代码里面require/include其它的文件,是在一次编译运行的周期里面的,而不是每次开一个新文件新开一个解释器 为了方便和其它文件区分,在web服务器上面会配置某种扩展名发送给PHP,这只是对入口文件有约束,运行起来之后后面require/include了什么和这个配置早已无关,不这么做的话,变成什么文件类型都会送到PHP里面过一遍,出于性能和安全性考虑这都是不现实的(换句话说,你需要独立看待PHP和Web服务器) 举个例子对于nginx来说,是 location ~ .*\.(php|php5)?$ { fastcgi_pass unix:/var/run/php.socket; fastcgi_index index.php; include fastcgi.conf; } 对于apache来说,也就是 <FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch> 其实你都可以改,改成任意自己希望的扩展名,或者甚至全匹配(当然不建议真的这么干)
PHP解释器只关心文件内容,扩展名是什么它并不关心
在代码里面require/include其它的文件,是在一次编译运行的周期里面的,而不是每次开一个新文件新开一个解释器
为了方便和其它文件区分,在web服务器上面会配置某种扩展名发送给PHP,这只是对入口文件有约束,运行起来之后后面require/include了什么和这个配置早已无关,不这么做的话,变成什么文件类型都会送到PHP里面过一遍,出于性能和安全性考虑这都是不现实的(换句话说,你需要独立看待PHP和Web服务器)
举个例子
对于nginx来说,是
对于apache来说,也就是
其实你都可以改,改成任意自己希望的扩展名,或者甚至全匹配(当然不建议真的这么干)