您的位置:首页 > 编程语言 > PHP开发

升级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,并发挥自己的理解能力,很多时候其实错误提示已经很明显告知具体是什么错误,要学会看英语文档。结果很重要,中间的解决过程、解决思路更重要。享受过程,对技术保持热情。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php laravel php7