目录

为什么要使用Homestead来开发Laravel应用

使用Homestead来开发Laravel应用的原因:1、快速搭建;2、一致性;3、易于部署;4、方便调试;5、跨平台支持。快速搭建是指Homestead提供了预配置的Laravel开发环境,无需手动进行配置,使用很方便,只需几个命令即可启动开发环境。

一、使用Homestead来开发Laravel应用的原因

1、快速搭建

Homestead提供了预配置的Laravel开发环境,无需手动进行配置,使用很方便,只需几个命令即可启动开发环境。

2、一致性

Homestead使用虚拟机来提供标准化的开发环境,保证开发者之间的开发环境一致,从而避免了由于环境不同带来的问题。

3、易于部署

在开发完成后,可以将完整的Homestead虚拟机映像上传到云服务器上,这样就可以非常简单地部署应用程序,并且可以保证应用程序在云服务器上运行的环境与本地开发环境一致。

4、方便调试

Homestead提供了许多工具来方便开发和调试,包括PHPMyAdmin、Xdebug、Laravel Debugbar等。

5、跨平台支持

Homestead能够在Windows、Linux和MacOS等操作系统上运行,无论团队中使用何种操作系统的开发人员都可以使用相同的开发环境。

二、使用非Homestead环境开发Laravel应用会遇到的问题

1、多个 Laravel 应用数据库连接错乱

在多个基于 Laravel 的 Web 应用中,当应用 A 进行一个长时间操作时(PHP 会运行超过 30s+),在这期间,在应用 B 中进行数据库操作时,B 应用会连接到 A 应用中的数据库,而非 B 的数据库。

下面的这段错误就是因为不知道为何连接到了 A 数据库而出现的:

2/2 QueryException in Connection.php line 655: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'database_a.member_user' doesn't exist (SQL: select * from member_user limit 1)
    in Connection.php line 655
    at Connection->runQueryCallback('select * from member_user limit 1', array(), object(Closure)) in Connection.php line 611
    at Connection->run('select * from member_user limit 1', array(), object(Closure)) in Connection.php line 324
    at Connection->select('select * from member_user limit 1')
    at call_user_func_array(array(object(MySqlConnection), 'select'), array('select * from member_user limit 1')) in DatabaseManager.php line 296
    at DatabaseManager->__call('select', array('select * from member_user limit 1')) in Facade.php line 216
    at DatabaseManager->select('select * from member_user limit 1') in Facade.php line 216
    at Facade::__callStatic('select', array('select * from member_user limit 1')) in IndexController.php line 35
    at DB::select('select * from member_user limit 1') in IndexController.php line 35
    at IndexController->index(object(ConfigService), object(WechatQrcodeService))
    at call_user_func_array(array(object(IndexController), 'index'), array(object(ConfigService), object(WechatQrcodeService))) in Controller.php line 256
    at Controller->callAction('index', array(object(ConfigService), object(WechatQrcodeService))) in ControllerDispatcher.php line 164
    at ControllerDispatcher->call(object(IndexController), object(Route), 'index') in ControllerDispatcher.php line 112
    at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request))
    at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
    at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
    at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 114
    at ControllerDispatcher->callWithinStack(object(IndexController), object(Route), object(Request), 'index') in ControllerDispatcher.php line 69
    at ControllerDispatcher->dispatch(object(Route), object(Request), '\App\Controller\Wecolour\IndexController', 'index') in Route.php line 203

原因分析:getenv() 和 putenv() 不是一个线程安全的函数,意味着如果两个线程同时调用这个函数,就会出现问题。而且服务器的环境正好是:Apache + worker 模式,这种模式下,php 运行环境是以线程模式运行的,所以才出现了上述的问题。

2、Lavarel 应用突然无法登录

Laravel 登录报错 Crypt : The Mac is invalid

原因分析:Windows 下的 .env 没加载上,导致系统底层的加密解密功能出错。

3、Laravel 不支持高并发

用 $.post 刷一个 url 的时候(用鼠标点按钮触发,大概一秒钟 3、4 次),按这个速度,大概每隔个十几二十次,就会报一个 500 错误:Whoops, looks like something went wrong.

原因分析:运行环境问题,尽量不要用 windows 作为运行环境,可以使用 homestead。

4、.env 不支持中文

能通过 .env 写入 Environment,getenv() 函数调用不出来。具体而言,在使用 laravel 开发的过程中,把项目名称放入了 .env 配置文件里面再用 env() 方法调用,发现三个中文的情况下只能返回 default 值。

原因分析:在 Mac 上能正常,Windows上三个字不能显示。

三、Laravel简介

1、什么是Laravel

Laravel是当今最熟练,流行和广泛使用的开源框架之一。Laravel具有多种功能,例如模板引擎,MVC架构支持,安全性高,开发者工具,数据库迁移等。这些Laravel高级功能使它比其他PHP框架更好。它为高端Web应用程序开发提供了基准测试和功能丰富的解决方案。该框架已完全落实,并提供了有效使用它所需的优异实践。

2、为什么要使用Laravel

Laravel是精确的PHP框架,可以无缝满足各种规模的开源应用程序开发需求,也是开发人员的理想选择。其庞大的社区支持可快速解决编程问题。此外,它还提供学习论坛。Laravel由于出色和丰富的功能,Laravel已成为较好的PHP框架。比如开发公司可以通过laravel的高级功能来创建引人入胜且基于高性能的Web应用程序。他们可以极少的使用重复编码任务来做到这一点。

3、Laravel的优势

  • Laravel框架可以实现身份验证而无后顾之忧。一切均已正确配置为组织良好的授权逻辑以及所需的对各种资源的控制访问权限。
  • 该框架通过SwiftMailer库提供了一个干净,易于使用的API。Laravel还提供了驱动程序,允许应用程序快速启动,通过本地或启用云的服务发送邮件或通知。
  • Laravel支持流行的缓存后端,因此开发人员可以快速配置缓存。
  • Laravel与先进的Monolog日志库集成在一起,对开发人员很有帮助,该库为一系列强大的日志处理程序提供技术支持。
  • 每个Laravel路由都在app / Http / routes.php文件中定义,该文件由框架自动加载。它还通过接受URL和闭包并提供了一种强大的方法来标识路由方式。

延伸阅读1:常见PHP框架

  • Laravel
  • CodeIgniter
  • Symfony
  • CakePHP
  • Yii
  • Zend Framework