在linux环境下配置thinkphp3.2.3框架运行环境(nginx1.4.6+php5.5+mysql5.5.36)的一些疑惑杂谈
首先是安装phpstudy
phpStudy Linux版&Win版同步上线 支持Apache/Nginx/Tengine/Lighttpd/IIS7/8/6
phpStudy for Linux 支持Apache/Nginx/Tengine/Lighttpd,
支持php5.2/5.3/5.4/5.5切换
已经在ubuntu14.04上测试成功。
下载版:http://lamp.phpstudy.net/phpstudy.bin
完整版:http://lamp.phpstudy.net/phpstudy-all.bin
安装:
wget -c http://lamp.phpstudy.net/phpstudy.bin
chmod +x phpstudy.bin #权限设置
./phpstudy.bin #运行安装
用时十到几十分钟不等,安装时间取决于电脑的下载速度和配置。
也可以事先下载好完整,安装时无需下载。
安装完成
如何切换php版:
假如你先安装的apache+php5.3
想切换成nginx+php5.4
你就再走一次./phpstudy.bin
但是你会发现有一行是否安装mysql提示选不安装
这样只需要编译nginx+php5.4
从而节省时间,这样只需要几分钟即可。
使用说明:
服务进程管理:phpstudy (start|stop|restart|uninstall)
站点主机管理:phpstudy (add|del|list)
ftpd用户管理:phpstudy ftp (add|del|list)
将项目复制到项目目录
cp -R /root/my_data/project1/. /phpstudy/www
修改nginx服务器的默认端口
进入到cd /phpstudy/server/nginx/Conf/目录下,使用vim编辑器对其编辑。
vim nginx.conf
(此处补充关于vim基本的使用命令:
Vim之所以能得到广大厂商与用户的认可,原因在于Vim编辑器中设置了三种模式—命令模式、末行模式和编辑模式,每种模式分别又支持多种不同的命令快捷键,这大大提高了工作效率,而且用户在习惯之后也会觉得相当顺手。要想高效率地操作文本,就必须先搞清这三种模式的操作区别以及模式之间的切换方法(见图4-1)。
命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。
输入模式:正常的文本录入。
末行模式:保存或退出文档,以及设置编辑环境。
图4-1 Vim编辑器模式的切换方法
在每次运行Vim编辑器时,默认进入命令模式,此时需要先切换到输入模式后再进行文档编写工作,而每次在编写完文档后需要先返回命令模式,然后再进入末行模式,执行文档的保存或退出操作。在Vim中,无法直接从输入模式切换到末行模式。Vim编辑器中内置的命令有成百上千种用法,为了能够帮助读者更快地掌握Vim编辑器,表4-1总结了在命令模式中最常用的一些命令。
表4-1 Vim中常用的命令
命令
作用
dd
删除(剪切)光标所在整行
5dd
删除(剪切)从光标处开始的5行
yy
复制光标所在整行
5yy
复制从光标处开始的5行
n
显示搜索命令定位到的下一个字符串
N
显示搜索命令定位到的上一个字符串
u
撤销上一步的操作
p
将之前删除(dd)或复制(yy)过的数据粘贴到光标后面
末行模式主要用于保存或退出文件,以及设置Vim编辑器的工作环境,还可以让用户执行外部的Linux命令或跳转到所编写文档的特定行数。要想切换到末行模式,在命令模式中输入一个冒号就可以了。末行模式中可用的命令如表4-2所示。
表4-2 末行模式中可用的命令
命令
作用
:w
保存
:q
退出
:q!
强制退出(放弃对文档的修改内容)
:wq!
强制保存退出
:set nu
显示行号
:set nonu
不显示行号
:命令
执行该命令
:整数
跳转到该行
:s/one/two
将当前光标所在行的第一个one替换成two
:s/one/two/g
将当前光标所在行的所有one替换成two
:%s/one/two/g
将全文中的所有one替换成two
?字符串
在文本中从下至上搜索该字符串
/字符串
在文本中从上至下搜索该字符串更多请参考:点击打开链接
URL重写,ThinkPhp3.2.3(简称TP)实现URL重写
Thinkphp的.htaccess文件配置URL的一些重写规则:
在thinkphp的案例中有一个.htaccess文件,里面配置了URL的一些重写规则,如:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
它的作用就是设置URL重写以隐藏URL中含有的index.php。一般来说URL过长或者动态化的URL都不利于SEO因此隐藏的目的就是要达到更好的SEO效果。
明白了.htaccess文件的作用,接下来就是让它工作起来。
要使.htaccess文件起作用,通常需要服务器开启URL_REWRITE模块才能支持。
下面是Apache的配置过程:
1、httpd.conf配置文件中加载了mod_rewrite.so模块 在httpd.conf配置文件搜索 LoadModule rewrite_module modules/mod_rewrite.so (Apache2是这个)去掉前面的#
2、AllowOverride None 将None改为 All 在httpd.conf配置文件找到“AllowOverride None”将None改为 All。这点值得注意的是,“AllowOverride None”在文件中能找到几处,但要改的却只有一处。如图所示:
AllowOverride All
3、确保项目(一般是前台项目)配置文件的URL_MODEL设置为2
4、把.htaccess文件放到入口文件的同级目录下
ThinkPHP 作为 PHP 框架,是单一入口的,那么其原始的 URL 便不是那么友好。但 ThinkPHP 提供了各种机制来定制需要的 URL 格式,配合 Apache .htaccess 文件,更是可以定制出人性化的更利于 SEO 的 URL 地址来。
.htaccess文件是 Apache 服务器中的一个配置文件,它负责相关目录下的网页配置。我们可以利用 .htaccess 文件的 Rewrite 规则来隐藏掉 ThinkPHP URL 中的 index.php 文件(即入口文件),这也是 ThinkPHP URL 伪静态的第一步。
例如原来的 URL 为:
http://127.0.0.1/index.php/Index/insert
去掉 index.php 之后变为:
http://127.0.0.1/Index/insert
如此一来,就变成了 http://服务器地址/应用模块名称/操作名称[/变量参数] 的常见 URL 格式。
更改 Apache httpd.conf 配置文件
提示:如果在虚拟主机商配置,请直接配置第三、四步,因为支持 .htaccess 的空间已经配置好了前面两步。
用编辑器打开 Apache 配置文件 httpd.conf(该文件位于 Apache 安装目录Apache2conf),并按如下步骤修改,。
一、加载了 mod_rewrite.so
确认加载了 mod_rewrite.so 模块(将如下配置前的 # 号去掉):
LoadModule rewrite_module modules/mod_rewrite.so
二、更改 AllowOverride 配置
更改需要读取 .htaccess 文件的目录,将原来的目录注释掉:
#
更改 AllowOverride None 为 AllowOverride FileInfo Options ,更改后的配置如下所示:
#
AllowOverride FileInfo Options
.htaccess 是基于目录来控制的, 该句即表示需要读取 .htaccess 文件的目录,要根据实际具体 Apache 的解析目录来配置。虚拟主机如果提供 .htaccess 控制,一般都已经配置好了。
三、添加 .htaccess 文件 Rewrite 规则
在需要隐藏 index.php 的目录下(本教程中为 E:/html/myapp,也即入口文件所在目录)创建 .htaccess 文件,并写入如下规则代码:
RewriteEngine on
#不显示index.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
如果网站已经有 .htaccess 文件,在里面添加该段配置规则即可。如果不能创建该文件(Windows 平台不能创建),可以从本站下载该文件,但该文件仅配置了隐藏 index.php 的规则.
四、更改项目配置文件
编辑项目配置文件 Conf/config.php ,将 URL 模式配置为 2(Rewrite模式):
'URL_MODEL'=>2,
至此,各个配置已经完成。保存各配置文件后,重启 Apache 服务器并删除 Runtime 目录下的项目缓存文件,在浏览器访问隐藏 index.php 后的地址测试是否成功:
http://127.0.0.1/html/myapp/Index/index
如果访问成功,那么利用 Apache .htaccess 文件的 Rewrite 规则隐藏 index.php 入口文件的配置就成功了。
thinkphp框架在nginx环境下去掉index.php路径显示
将apache下的一个网站迁移到nginx环境中,结果发现网站用的ThinkPHP框架做的开发,默认用的pathinfo。
这是一个很头疼的问题,因为nginx不支持pathinfo,贸然一并打开也担心不安全。
于是查询资料后整理如下:
找到applications/Conf/的配置文件 config.php
return array(
'URL_MODEL'=>2, //关于URL更多说明请参考Tinkphp/Common/convention.php
);
配置 Nginx.conf
在你的虚拟主机下添加
location / {
if (!-e $request_filename){
rewrite ^/(.*)$ /index.php/$1 last;
}
}
(真的重要哈!!!)如果你的项目入口文件在一个子目录内则 // 这一段重写规则相当重要,什么意思呢?
location /目录/ {
if (!-e $request_filename){
rewrite ^/目录/(.*)$ /目录/index.php/$1 last;
}
}
如:
测试成功,注意Tinkphp/Common/convention.php
和网站下的applications/Conf/config.php
两个文件 都要修改。
主要就是改成模式2,rewrite方式就可以了。
linux删除文件命令(因为用到了所以穿插进来说一下)
使用这个rm -rf删除文件的时候一定要格外小心,linux没有回收站的。
直接rm就可以了,不过要加个参数-f 即:rm -f 文件路径
-f 就是直接强行删除,不作任何提示的意思
删除文件使用实例:
rm -f /var/log/httpd/access.log
将会强制删除/var/log/httpd/access.log这个文件
删除目录使用实例:
rm -rf /var/log/httpd/access
将会删除/var/log/httpd/access目录以及其下所有文件、文件夹
需要提醒的是:使用这个rm -rf的时候一定要格外小心,linux没有回收站的
当然,rm还有更多的其他参数和用法,自己去搜一下。
SQLSTATE[HY000] [2002] 错误
使用tp框架 3.2.3 ,在windows上跑的时候没有任何问题,但是部署到linux系统和是哪个,就会报这个错,不知道什么原因,求大神解答
:(
SQLSTATE[HY000] [2002] No such file or directory
错误位置
FILE: /phpstudy/www/mmm/ThinkPHP/Library/Think/Db/Driver.class.php LINE: 109
TRACE
#0 /phpstudy/www/mmm/ThinkPHP/Library/Think/Db/Driver.class.php(109): E('SQLSTATE[HY000]...')
#1 /phpstudy/www/mmm/ThinkPHP/Library/Think/Db/Driver.class.php(1075): Think\Db\Driver->connect()
#2 /phpstudy/www/mmm/ThinkPHP/Library/Think/Db/Driver/Mysql.class.php(47): Think\Db\Driver->initConnect(true)
#3 /phpstudy/www/mmm/ThinkPHP/Library/Think/Model.class.php(138): Think\Db\Driver\Mysql->getFields('inkks_xin')
#4 /phpstudy/www/mmm/ThinkPHP/Library/Think/Model.class.php(126): Think\Model->flush()
#5 /phpstudy/www/mmm/ThinkPHP/Library/Think/Model.class.php(1458): Think\Model->_checkTableInfo()
#6 /phpstudy/www/mmm/ThinkPHP/Library/Think/Model.class.php(101): Think\Model->db(0, '', true)
#7 /phpstudy/www/mmm/ThinkPHP/Common/functions.php(621): Think\Model->__construct('xin', '', '')
#8 /phpstudy/www/mmm/appx/Home/Controller/IndexController.class.php(9): M('xin')
#9 [internal function]: Home\Controller\IndexController->index()
#10 /phpstudy/www/mmm/ThinkPHP/Library/Think/App.class.php(173): ReflectionMethod->invoke(object(Home\Controller\IndexController))
#11 /phpstudy/www/mmm/ThinkPHP/Library/Think/App.class.php(110): Think\App::invokeAction(object(Home\Controller\IndexController), 'index')
#12 /phpstudy/www/mmm/ThinkPHP/Library/Think/App.class.php(204): Think\App::exec()
#13 /phpstudy/www/mmm/ThinkPHP/Library/Think/Think.class.php(120): Think\App::run()
#14 /phpstudy/www/mmm/ThinkPHP/ThinkPHP.php(97): Think\Think::start()
#15 /phpstudy/www/mmm/index.php(7): require('/phpstudy/www/m...')
#16 {main}
一种解决方法:将配置中的localhost改为127.0.0.1就可以了。
ThinkPHP缓存文件写入失败!:./Runtime/Cache/..
最近在学习ThinkPHP框架,从网上down了一个项目,在本地配置这个项目时,出现了一个问题,无法写入/Runtime/Cache缓存,这个问题是权限问题,首先要看看在自己的项目/Application/下有没有Runtime这个文件夹,如果没有,就自己在/Application/建好Runtime文件夹,然后设置Runtime文件夹下及其下面的子文件夹的权限,方法:
在终端进入Runtime文件夹,然后执行命令:chmod -R 777 *,问题就解决了。
分享(share )是快乐的,也是见证个人的成长历程,文章主要为平时学习积累,基于自身认知不足之处在所难免
,也恳请大家指正,共同进步