1. 怎麼在THINKphp中引入PHP文件
你是要在項目,控制器里引入外部PHP文件嗎?
可以用import,或者require
//引入文件
include "aaa.php";//引用文件;只能引用一遍
//引用多個則費勁
include_once("aaa.php");//一次又一次
也可以require ("aa.php");
兩者區別
require:
執行到require()時,只會讀取一次檔案,故常放在程序開頭,檔案引入後PHP會將網頁檔重新編譯,讓引入檔成為原先網頁的一部分。
require() :無條件包含,如果文件不存在,會報出一個fatal error.腳本停止執行
require遇到錯誤時,直接報錯並停止運行程序
include:
執行到include()時,每次皆會讀取檔案,故常用於流程式控制制的區段,如條件判斷或循環中。
include() : 有條件包含,如果文件不存在,會給出一個 warning,但腳本會繼續執行
include遇到錯誤時(引用的文件不存在),PHP只是報錯,但程序會繼續運行下去
2. thinkphp 3.2.2版本中 是怎麼載入 functions.php 的,給解釋一下
ThinkPHP的函數有三類,一類是系統函數,在ThinkPHP目錄下的Common下;一類是項目函數,在項目目錄下的Common目錄中;最後一類是擴展函數。
1、系統函數:包含function.php、common.php和runtime.php三個文件,程序運行時無需手動載入,在編譯過程中自動載入;
2、項目函數:是項目中的Common文件中的Common.php 文件(一般不存在,需自己創建),分組部署時,需要使用 (分組名)/function.php命名。此類函數也是可以直接載入的;
3、擴展函數是指用戶自定義的函數,可以提供給開發者更多的DIY內容,函數名自定義,但是不是在設置了自動載入的情況下是不能自動載入的。
函數的載入:
系統函數和項目函數是不需要載入就能直接使用的,但是擴展函數還是需要載入才能使用的,這里可以有動態和靜態兩種方式載入擴展函數:
1、動態載入:(可以實時生效)
'LOAD_EXT_FILE'=>'USER'//項目中的conf.php
2、手動載入:(個別模板使用)
load(@.user)//載入的就是Common目錄下的user.php,@只本目錄下的
3. thinkphp怎麼部署(thinkphp5部署)
前端vue與後端Thinkphp在伺服器的部署vue在服務端部署時,我們都知道通過npmrunbuild指令打包好的dist文件,通過http指定是可以直接瀏覽的,Thinkphp通肢局如過域名指向index.php文件才可以瀏覽。要使前端正常調用後端數據,有兩種方法:1、前端跨域調用後端數據,2、前端打包文件部署在後端的伺服器文件夾下(同域)。
web伺服器:apache
一、跨域
在伺服器配置站點:
在路徑/home/www/??下創建test項目文件夾,用來放項目文件。??
找到httpd-vhosts.conf文件配置站點??
前端站點:??
????ServerName?test.test.com??
????DocumentRoot?"/home/www/test/dist"????
????DirectoryIndex?index.html??
後端站點:??
????ServerName?test.testphp.com??
????DocumentRoot?"/home/www/test/php"????
????DirectoryIndex?index.php??
將前端打包歷啟好的dist文件放在/home/www/test/文件夾下,運行可瀏覽,當路徑改變時,刷新會出現404錯誤。此時dist文件下創建一個.htaccess文件,當路徑不存在時,路徑指向能解決此問題。
??RewriteEngine?On??
??RewriteBase?/??
??RewriteRule?^index.html$?-?[L]??
??RewriteCond?%{REQUEST_FILENAME}?!-f??
??RewriteCond?%{REQUEST_FILENAME}?!-d??
??RewriteRule?.?/index.html?[L]??
在/home/www/test文件夾下創建項目根目錄php文件夾,將thinkphp文件放在php下。TP5的入口文件在public文件下,在這將public下的入口文件index.php挪到php文件夾下(個人習慣將入口文件放在項目根目錄),後端綁定Index模塊。
前端調用後端介面,存在跨域,跨域解決方法有好幾種,在這我將在後端php做配置,解決跨域問題,在公用控制器設置跨域配置:
class?Common?extends?Controller??
{??
????public?$param;??
????//?設置跨域訪問??
????public?function?_initialize()??
????{??
????????parent::_initialize();??
????????isset($_SERVER['HTTP_ORIGIN'])???header('Access-Control-Allow-Origin:?'.$_SERVER['HTTP_ORIGIN'])?:?'臘凱'??
????????header('Access-Control-Allow-Credentials:?true');??
????????header('Access-Control-Allow-Methods:?GET,?POST,?PUT,?DELETE,?OPTIONS');??
????????header("Access-Control-Allow-Headers:?Origin,?X-Requested-With,?Content-Type,?Accept,?authKey,?sessionId");??
$param?=??Request::instance()-param();??
$this-param?=?$param;??
????}??
}??
前端調用登錄介面:this.axios.post('',{user:'',password:''})。
(可在webpack.base.conf.js文件下可定義介面:)
二、同域
後端配置同上,公共配置器中的header配置注釋。將前端的dist文件下的所有文件(包含.htaccess),放在php文件夾下。將後端index控制器的index方法的路徑重定向php下的index.html文件:
namespace?appindexcontroller;??
use?thinkController;??
class?Index?extends?Controller??
{??
????public?function?index()?{??
$this-redirect('/index.html');??
????}??
}??
前端調用登錄介面:this.axios.post('/index.php/base/login',{user:'',password:''})
轉自:
thinkphp怎麼部署到ubuntu
1、開啟服務
部分必需使用服務沒有默認開啟,必需開啟後才能正常使用Thinkphpsae引擎,使網站正常工作。必需服務:MySql服務,用於mysql資料庫存儲數據、Strorage服務,用於存儲上傳文件銷肆、Memcache服務,用於存儲Thinkphp緩存、KVDB,用於存儲鍵值數據。根據網站需要開啟相關服務,以上為常見的sae服務。
2、緩存清除
如果開啟了調試輸出trace,然後關閉了,但是網頁還是顯示trace信息,需要把網站的緩存數據刪除後生效,點擊Memcache服務,Memcache狀態下選擇清空即可,如果沒有在sae上部署則是直接刪除相關緩存文件。
3、原生sae服務
由於sae提供原生服務不能與其他環境兼容,為使網站移植性更好,應該盡量少直接使用原耐斗碼生服務,可以選擇使用Thinkphp中相應的方法來實現。sae禁止本地IO,所有直接操作本地IO的函數都失效,需要使用sae其他服務來實現,這點一定要注意。
4、代碼上傳
可以直接上傳代碼包到sae上,可以使用svn來上傳代碼
5、屏蔽index.php
在代碼根目錄下的config.yaml中加入以下代碼即可
handle:
-rewrite:if(!is_dir()!is_file()path~"^(.*)$")goto"index.php/$1"呵呵以後畢竟是電腦的時代,可以自己看一下php語言編程一類的知識昌哪,以後總會有用的,我天天晚上去後盾人看視頻,我覺得不錯的。
如何在lnmp上部署ThinkphpThinkPHP的四種URL模式:0(普通迅畝模式);1(PATHINFO模式);2(REWRITE模式);3(兼容模式)
nginx需要PATHINFO模式,但需要更改nginx配置文件讓其支持PATHINFO模式。
系統環境:
系統:CentOS-6.4-x86_64
web伺服器:nginx1.2.7
PHP版本:PHP5.3.17
資料庫版本:MySQL5.5.28
一、安裝LNMP1.0一鍵安裝包:
按照以上版本安裝環境
二、修改配置文件
1.修改php配置文件php.ini,將其中cgi.fix_pathinfo=0,值改為1
重啟php-fpm
2.ssh里執行:
cat拍昌櫻/usr/local/nginx/conf/pathinfo.conf'EOF'
set$real_script_name$fastcgi_script_name;
if($fastcgi_script_name~"(.+?.php)(/.*)"){
set$real_script_name$1;
set$path_info$2;
}
fastcgi_paramSCRIPT_FILENAME$document_root$real_script_name;
fastcgi_paramSCRIPT_NAME$real_script_name;
fastcgi_paramPATH_INFO$path_info;
EOF
再將虛擬主機配置文件里的location~.*.(php|php5)?$替換為:location~.*.php
再在includefcgi.conf;下面添加一行includepathinfo.conf;
重啟nginx
完整的虛擬主機配置文件如下:
server
{
listen80;
server_name;
indexindex.htmlindex.htmindex.php;
root/home/wwwroot/lnmp;
location~.*.php
{
try_files$uri=404;
fastcgi_passunix:/tmp/php-cgi.sock;
fastcgi_indexindex.php;
includefcgi.conf;
includepathinfo.conf;
}
location/status{
stub_statuson;
access_logoff;
}
location~.*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires30d;
}
location~.*.(js|css)?$
{
expires12h;
}
access_log/襲叢home/wwwlogs/lnmp.loglnmp;
}
將ThinkPHP的URL模式設置成PATHINFO。
ThinkPHP就可以在nginx中運行了。
4. thinkphp__ROOT__、__PUBLIC__ 在哪個文件里定義的
thinkphp__ROOT__在ThinkPHP.php中定義;__PUBLIC__在ContentReplaceBehavior.class.php文件中定義。
1、因為__ROOT__ php常量都會在ThinkPHP.php中定義,而thinkphp__ROOT_就屬於__ROOT__ php常量,因此其定義的路徑就是Thinkphp/ThinkPHP.php。
2、__ROOT__、__PUBLIC__ 模板常量這兩者都會在ContentReplaceBehavior.class.php文件中定義,因此其定義的路徑是.class.php。
(4)thinkphp包含php文件擴展閱讀
ThinkPHP提供了靈活的配置功能,採用最有效率的PHP返回數組方式定義,支持慣例配置、項目配置、調試配置和模塊配置,並且會自動生成配置緩存文件,無需重復解析的開銷。對於有些簡單的應用也無需配置任何配置文件,而對於復雜的要求,還可以增加模塊配置文件,另外ThinkPHP的動態配置可以使在開發過程中靈活地調整配置參數。