升级php7+安装laravel过程中遇到的问题汇总
2016-11-27 11:31
756 查看
一、起因
最近想尝试体验下laravel框架,由于框架对php版本大于5.6.4,自己服务器的php版本才5.4,因此一次性升级到php7。参考官网的laravel服务器要求:https://laravel.com/docs/5.3/installation
PHP >= 5.6.4
OpenSSL PHP Extension
PDO PHP Extension
Mbstring PHP Extension
Tokenizer PHP Extension
XML PHP Extension
二、Ubuntu通过apt-get升级PHP7
添加ppa(https://www.linuxdashen.com/debian%E5%92%8Cubuntu%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%8D%87%E7%BA%A7php7)sudo apt-get install python-software-properties software-properties-common sudo add-apt-repository ppa:ondrej/php sudo apt-get update
安装PHP7
sudo apt-get install php7.0-fpm php7.0-mysql php7.0-common php7.0-curl php7.0-mbstring
三、验证php7.0是否安装成功
php -v
发现还是老的版本,同时发现有一个ph7.0命令:
root:~# php7.0 -v PHP 7.0.13-1+deb.sury.org~precise+1 (cli) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.13-1+deb.sury.org~precise+1, Copyright (c) 1999-2016, by Zend Technologies
通过浏览器访问phpinfo()发现还是老的版本,默认使用的还是老版本,存在两个版本共存,下面通过php-fpm修改。
四、升级php-fpm
升级php7.0的同时会自动升级php-fpm到7.0,执行ps -ef | grep php-fpm发现有一个原有的
php-fpm和一个
/etc/php/7.0/fpm/php-fpm.conf,把老的kill掉,再通过浏览器执行,发现报502错误。*
解决方式:在php-fpm配置文件(
/etc/php/7.0/fpm/php-fpm.conf)加上下面几行即可。
[www] user=www group=www listen = 127.0.0.1:9000
重启
php-fpm
service php-fpm restart
验证访问成功,并执行phpinfo()确认是php7.0最新版
原因:php-fpm是绑定本地9000端口,nginx通过
fastcgi_pass 127.0.0.1:9000;将请求转发到本地9000端口上。
五、配置laravel目录到nginx上
下载laravel一键安装包(http://www.golaravel.com/download/):解压到nginx的root目录
配置nginx,注意
root一定要指向到public目录:
# 完整版 server { listen 80 default_server; # 设定网站根目录 root /alidata/www/default/laravel-master/public; # 网站默认首页 index index.php index.html index.htm; # 服务器名称,server_domain_or_IP 请替换为自己设置的名称或者 IP 地址 server_name test.com # 修改为 Laravel 转发规则 location / { try_files $uri $uri/ /index.php?$query_string; } # PHP 支持 location ~ \.php$ { try_files $uri /index.php =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
浏览器访问
test.com验证:
六、使用lavarel报PDOException异常
使用lavarel操作mysql抛异常,数据库的配置是正确的,完整异常信息如下:Whoops, looks like something went wrong. 1/1 PDOException in Connector.php line 55: could not find driver in Connector.php line 55 at PDO->__construct('mysql:host=127.0.0.1;dbname=wechat', 'vernon', 'vernon', array('0', '2', '0', false, false)) in Connector.php line 55 at Connector->createConnection('mysql:host=127.0.0.1;dbname=wechat', array('driver' => 'mysql', 'host' => '127.0.0.1', 'database' => 'wechat', 'username' => 'vernon', 'password' => 'vernon', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, 'engine' => null, 'name' => 'mysql'), array('0', '2', '0', false, false)) in MySqlConnector.php line 24 at MySqlConnector->connect(array('driver' => 'mysql', 'host' => '127.0.0.1', 'database' => 'wechat', 'username' => 'vernon', 'password' => 'vernon', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, 'engine' => null, 'name' => 'mysql')) in ConnectionFactory.php line 61 at ConnectionFactory->Illuminate\Database\Connectors\{closure}() at call_user_func(object(Closure)) in Connection.php line 864 at Connection->getPdo() in Connection.php line 732 at Connection->reconnectIfMissingConnection() in Connection.php line 621 at Connection->run('SELECT * FROM wechat.t_6hc LIMIT 1', array(), object(Closure)) in Connection.php line 342 at Connection->select('SELECT * FROM wechat.t_6hc LIMIT 1') at call_user_func_array(array(object(MySqlConnection), 'select'), array('SELECT * FROM wechat.t_6hc LIMIT 1')) in DatabaseManager.php line 317 at DatabaseManager->__call('select', array('SELECT * FROM wechat.t_6hc LIMIT 1')) in Facade.php line 218 at Facade::__callStatic('select', array('SELECT * FROM wechat.t_6hc LIMIT 1')) in MemberController.php line 14 at MemberController->test2() at call_user_func_array(array(object(MemberController), 'test2'), array()) in Controller.php line 78 at Controller->callAction('test2', array()) in ControllerDispatcher.php line 146 at ControllerDispatcher->call(object(MemberController), object(Route), 'test2') in ControllerDispatcher.php line 94 at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52 at Pipeline->Illuminate\Routing\{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102 at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 96 at ControllerDispatcher->callWithinStack(object(MemberController), object(Route), object(Request), 'test2') in ControllerDispatcher.php line 54 at ControllerDispatcher->dispatch(object(Route), object(Request), 'App\Http\Controllers\MemberController', 'test2') in Route.php line 174 at Route->runController(object(Request)) in Route.php line 140 at Route->run(object(Request)) in Router.php line 724 at Router->Illuminate\Routing\{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52 at Pipeline->Illuminate\Routing\{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102 at Pipeline->then(object(Closure)) in Router.php line 726 at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 699 at Router->dispatchToRoute(object(Request)) in Router.php line 675 at Router->dispatch(object(Request)) in Kernel.php line 246 at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52 at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44 at CheckForMaintenanceMode->handle(object(Request), object(Closure)) at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124 at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 at Pipeline->Illuminate\Routing\{closure}(object(Request)) at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102 at Pipeline->then(object(Closure)) in Kernel.php line 132 at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99 at Kernel->handle(object(Request)) in index.php line 55
google后发现是配置问题:http://stackoverflow.com/questions/35240414/laravel-5-pdoexception-could-not-find-driver
解决步骤:
- 找到php.ini(通过phpinfo()查看)
- 找到这行
extension=php_pdo_mysql.dll,取消注释
- 增加一行
extension=pdo_mysql.so
- 执行安装
sudo apt-get install php-mysql
解决。
七、service php-fpm restart
提示Unknown job
使用service php-fpm restart提示以下错误:
root:/alidata/server/nginx/conf/vhosts# service php-fpm start Rather than invoking init scripts through /etc/init.d, use the service(8) utility, e.g. service php-fpm start initctl: Unknown job: php-fpm Since the script you are attempting to invoke has been converted to an Upstart job, you may also use the start(8) utility, e.g. start php-fpm
原因php-fpm是一个upstart任务,应该改用
restart php-fpm
搞定。
八、感受
碰碰撞撞升级好了PHP7和安装好laravel,过程比较曲折和受挫,还好最后都解决了,我给的建议是遇到问题要学会google,并发挥自己的理解能力,很多时候其实错误提示已经很明显告知具体是什么错误,要学会看英语文档。结果很重要,中间的解决过程、解决思路更重要。享受过程,对技术保持热情。相关文章推荐
- PHP7升级过程遇到的一些问题
- CentOS5.6中安装zimbra7.1中遇到的问题汇总(不含详细安装过程)
- Gerrit 安装过程中遇到的问题汇总。
- sublume安装插件过程中遇到的问题汇总。
- Openstack安装过程中遇到的问题汇总
- ubuntu下安装composer到使用composer安装laravel的过程及常见问题汇总
- 在安装jupyter notebook过程中遇到pip升级问题,如照片所示,请问如何解决,跪谢
- MySQL 下载安装 过程中遇到的各 问题汇总 记录
- Cocoa pods的安装使用以及过程中可能会遇到问题的汇总
- 安装JForum的过程中遇到的问题 ( by quqi99 )
- 求助高手帮忙解决oracle 10g安装后升级遇到的问题,!!!成分感谢!!!!
- 我在SQL Server安装过程中遇到过的问题
- 解决了安装kchmviewer的过程中遇到的一个小问题
- VC 使用过程中所遇到的一些问题,汇总在这里,希望对后来者有些许帮助
- SQL SERVER 2000安装遇到的问题小汇总
- [原创]SQL Server 2008 安装过程中遇到“性能计数器注册表配置单元一致性”检查失败 问题的解决方法
- Microsoft SQL Server Desktop Engine安装过程中遇到的问题(2)
- 解决了安装kchmviewer的过程中遇到的一个小问题
- SQL Server2005安装过程中遇到的一些问题