為什麼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>
其實你都可以改,改成任意自己希望的擴展名,或者甚至全匹配(當然不建議真的這麼幹)
框架本身載入.tpl檔後解析為php程式碼了。就好像你用php載入一個xml檔然後解析xml然後輸出一樣。我說的也不算很準確,但是差不多這個意思吧。
這是範本檔案
可以看看smarty範本的介紹
PHP解釋器只關心檔案內容,副檔名是什麼它並不關心
在程式碼裡面require/include其它的文件,是在一次編譯運行的周期裡面的,而不是每次開一個新文件新開一個解釋器
為了方便和其它文件區分,在web伺服器上面會配置某種擴展名發送給PHP,這只是對入口文件有約束,運行起來之後require/include了什麼和這個配置早已無關,不這麼做的話,變成什麼檔案類型都會送到PHP裡面過一遍,出於效能和安全性考慮這都是不現實的(換句話說,你需要獨立看待PHP和Web伺服器)
舉個例子
對於nginx來說,是
對於apache來說,也就是
其實你都可以改,改成任意自己希望的擴展名,或者甚至全匹配(當然不建議真的這麼幹)
框架本身載入.tpl檔後解析為php程式碼了。就好像你用php載入一個xml檔然後解析xml然後輸出一樣。我說的也不算很準確,但是差不多這個意思吧。
這是範本檔案
可以看看smarty範本的介紹