MAMP 环境下为 php 添加 pcntl 扩展

一、前言:

pcntl 介绍:

pcntl 扩展可以支持 PHP 的多线程操作。(非Unix类系统不支持此模块)

phpize 介绍:

phpize 可以用来给 PHP 动态的添加扩展。比如编译 PHP 时忘记添加某扩展,后来想添加该扩展,即可以使用 phpize 动态的添加该扩展。

本文将介绍如何使用 phpize 给 Mac下的集成环境 MAMP 添加 PHP 的 pcntl 扩展。类 Unix 的环境都可以使用本方法安装,注意灵活变通。

二、安装:

下面演示的是给 MAMP的PHP 5.6.10版本添加 pcntl扩展。

下载和本地 PHP 版本对应的源码包,地址为:

http://www.php.net/releases/

然后按照如下步骤进行编译:

# 解压源码包并初始化目录
$ tar -xzvf php-5.6.10.tar.gz
$ mv php-5.6.10 php
$ mkdir -p /Applications/MAMP/bin/php/php5.6.10/include
$ mv php /Applications/MAMP/bin/php/php5.6.10/include

# 检测系统配置
$ cd /Applications/MAMP/bin/php/php5.6.10/include/php
$ ./configure

# 添加一些标志来告诉系统怎样编译。MAMP PHP已经建成这样,如果不这样做,编译的共享对象将无法工作。
$ MACOSX_DEPLOYMENT_TARGET=10.10
$ CFLAGS="-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp"
$ CCFLAGS="-arch i386 -arch x86_64 -g -Os -pipe"
$ CXXFLAGS="-arch i386 -arch x86_64 -g -Os -pipe"
$ LDFLAGS="-arch i386 -arch x86_64 -bind_at_load"
$ export CFLAGS CXXFLAGS LDFLAGS CCFLAGS MACOSX_DEPLOYMENT_TARGET

# 编译 pcntl.so 文件
$ cd ext/pcntl
$ phpize
$ ./configure
$ make

# 将编译出来的扩展文件pcntl.so 移动到php的扩展目录
$ cp modules/pcntl.so /Applications/MAMP/bin/php/php5.6.10/lib/php/extensions/no-debug-non-zts-20131226/    

# 向php.ini 文件中添加该扩展
$ echo "extension=pcntl.so" >> /Applications/MAMP/bin/php/php5.6.10/conf/php.ini

# pcntl现在应该已经启用,要检查是否安装成功,只需运行:
$ /Applications/MAMP/bin/php/php5.6.10/bin/php --ri pcntl
pcntl
pcntl support => enabled

如出现以上信息,则说明该扩展已安装成功。

参考资料:

PHP 官网:http://php.net/manual/zh/book.pcntl.php


交友互动:

本文首发于马燕龙个人博客,欢迎分享,转载请标明出处。
马燕龙个人博客:http://www.mayanlong.com
马燕龙个人微博:http://weibo.com/imayanlong
马燕龙Github主页:https://github.com/yanlongma

使用 Composer 安装 Laravel 框架

前言:

1. Composer 安装 Laravel 有两种方式:

第一种是通过 Composer 的 create-project 命令安装 Laravel 框架,
第二种是先通过 Composer 安装 Laravel 安装器,然后通过安装器安装 Laravel 框架。

2. 为什么 Composer 可以安装 Laravel 框架呢?

其实 Laravel框架也是一个 Composer包,我们可以通过如下命令查看:

$ composer show --all laravel/laravel

一、create-project

第一种通过 Composer的 create-project 命令安装 Laravel 框架,

$ composer create-project laravel/laravel --prefer-dist [别名]

二、Laravel 安装器

第二种是先通过 Composer 安装 Laravel 安装器,然后通过安装器安装 Laravel 框架。

1. 使用 composer 全局安装 Laravel 安装器

$ composer global require "laravel/installer"

2. 配置PATH环境变量

将 ~/.composer/vendor/bin 添加到 PATH 环境变量中,这样可执行文件 laravel 就能被你的系统检测到了。

编辑 ~/.bash_profile 文件, vim ~/.bash_profile 加入如下代码:

export PATH="~/.composer/vendor/bin:$PATH"

3. 检测是否配置成功

新打开一个终端,输入如下命令:

$ laravel --version
Laravel Installer version 1.3.3

如果出现该信息,说明安装器已安装成功。

4. 安装Laravel

打开终端,输入如下命令即可安装:

$ laravel new blog

5. 安装最新的开发版本

如果童鞋们对最新的开发版本比较感兴趣,可以下载进行测试,加上 --dev 参数即可:

$ laravel new demo --dev

交友互动:

本文首发于马燕龙个人博客,欢迎分享,转载请标明出处。
马燕龙个人博客:http://www.mayanlong.com
马燕龙个人微博:http://weibo.com/imayanlong
马燕龙Github主页:https://github.com/yanlongma

Composer 常用命令总结(三)

init(初始化)

该命令用于创建 composer.json 文件,并进行基础信息配置:

$ composer init

可以配置Package name、Description、Author、Minimum、Package Type、License、dependencies 及 dev dependencies 信息。

完成后配置文件内容如下:

{
    "name": "test/test",
    "description": "test init",
    "type": "library",
    "license": "License Description",
    "authors": [
        {
            "name": "mayanlong",
            "email": "json_vip@163.com"
        }
    ],
    "require": {}
}

search(搜索)

根据名称搜索相关的包,成功后会列出符合的相关包的信息,本处以搜索 monolog 为例:

$ composer search monolog 
monolog/monolog Sends your logs to files, sockets, inboxes, databases and various web services
kdyby/monolog Integration of Monolog into Nette Framework

show(详情)

根据包的名称,列出包的相关信息,本处以查看 monolog/monolog 为例:

$ composer show -all monolog/monolog
name     : monolog/monolog
descrip. : Sends your logs to files, sockets, inboxes, databases and various web services
keywords : log, logging, psr-3
versions : dev-master, 2.0.x-dev, 1.x-dev, 1.21.0, 1.20.0, 1.19.0, 1.18.2, 1.18.1, 1.18.0, 1.17.2, 1.17.1, 1.17.0, 1.16.0, 1.15.0, 1.14.0, 1.13.1, 1.13.0, 1.12.0, 1.11.0, 1.10.0, 1.9.1, 1.9.0, 1.8.0, 1.7.0, 1.6.0, 1.5.0, 1.4.1, 1.4.0, 1.3.1, 1.3.0, 1.2.1, 1.2.0, 1.1.0, 1.0.2, 1.0.1, 1.0.0, 1.0.0-RC1

想查看更多信息,就亲自将该命令复制到命令行执行吧。

install (安装)

我们先在 composer.json 配置中添加一个 monolog/monolog 依赖库,如下:

{
    "name": "test/test",
    "description": "test init",
    "type": "library",
    "license": "License Description",
    "authors": [
        {
            "name": "mayanlong",
            "email": "json_vip@163.com"
        }
    ],
    "require": {
        "monolog/monolog": "1.21.*",
    }
}

然后通过如下命令进行安装依赖

$ composer install

update (更新)

如果我们新增或者删除了某个依赖,可以通过如下命令进行更新

$ composer update    

如果只想安装或更新一个依赖,可以使用如下命令:

$ composer update monolog/monolog [...]

require (申明依赖)

我们也可以用命令直接添加依赖,可以根据自己的需要选择拉取的版本,执行该命令后将自动下载,命令如下:

$ composer require symfony/http-foundation
$ composer require "symfony/http-foundation @dev"
$ composer require "symfony/http-foundation 4.0"
$ composer require "symfony/http-foundation ~4.0"
$ composer require "symfony/http-foundation ^4.0"

符号含义不清楚的可以查看 Composer 官网:https://getcomposer.org/doc/articles/versions.md#next-significant-release-operators

clear-chache (清除本地缓存)

安装一个包后过,就会缓存该包到本地,再次下载会优先从本地获取,如果不需要可以清掉这些本地缓存,命令如下:

$ composer clear-cache
Cache directory does not exist (cache-vcs-dir):
Clearing cache (cache-repo-dir): /root/.composer/cache/repo
Clearing cache (cache-files-dir): /root/.composer/cache/files
Clearing cache (cache-dir): /root/.composer/cache
All caches cleared.

--version(查看版本)

该命令用于用于查看 Composer 版本信息,命令如下:

$ composer --version
Composer version 1.5.2 2017-09-11 16:59:25

self-update (更新版本)

Composer 用了一段时间后,发现使用后会提示更新版本,命令如下:

$ composer self-update
Updating to version 1.5.6 (stable channel).
   Downloading (100%)
Use composer self-update --rollback to return to version 1.5.2

如果该版本有问题或者想用之前版本,可以回退到之前的版本,命令如下:

$ composer self-update --rollback 1.5.2
Rolling back to version 2017-09-11_16-59-25-1.5.2.

本文首发于马燕龙个人博客,欢迎分享,转载请标明出处。
马燕龙个人博客:http://www.mayanlong.com
马燕龙个人微博:http://weibo.com/imayanlong
马燕龙Github主页:https://github.com/yanlongma

Laravel 5.2 教程 - 队列

一、简介

Laravel 队列组件提供一个统一的 API 集成了许多不同的队列服务,队列允许你延后执行一个耗时的任务,例如延后至指定的时间才发送邮件,进而大幅的加快了应用程序处理请求的速度。

由于本例子用到邮件功能,不了解的童鞋请移步(Laravel 5.2 教程 - 邮件)

二、配置

1. 配置文件

队列配置文件存放在config/queue.php。在该文件中你将会找到框架自带的每一个队列驱动的连接配置,包括数据库、Beanstalkd、 IronMQ、 Amazon SQS、 Redis以及同步(本地使用)驱动。其中还包含了一个null队列驱动以拒绝队列任务。

.env 配置默认是同步sync 本文章演示使用database方式

2. 迁移队列需要的数据表

php artisan queue:table
php artisan migrate

三、编写任务类

1. 生成任务类

默认情况下,应用的所有队列任务都存放在app/Jobs目录。

php artisan make:job SendReminderEmail

该命令将会在app/Jobs目录下生成一个新的类,并且该类实现了IlluminateContractsQueueShouldQueue接口,告诉Laravel该任务应该被推送到队列而不是同步运行。

2. 编写任务类

下面是一个通过队列发送邮件的简单例子:

<?php

    namespace App\Jobs;

    use App\Jobs\Job;
    use Illuminate\Queue\SerializesModels;
    use Illuminate\Queue\InteractsWithQueue;
    use Illuminate\Contracts\Queue\ShouldQueue;
    use Mail;

    class SendReminderEmail extends Job implements ShouldQueue
    {
        use InteractsWithQueue, SerializesModels;

        protected $email;

        /**
         * 创建一个新的任务实例
         *
         * @param $email
         */
        public function __construct($email)
        {
            $this->email = $email;
        }

        /**
         * 执行任务
         *
         * @return void
         */
        public function handle()
        {
            // 发送邮件
            Mail::raw('Queue test', function($message) {

                $message->subject('测试邮件,勿回');
                $message->to($this->email);
            });
        }
    }

四、推送任务到队列

1. 控制器中

因为Laravel app/Http/Controllers/Controller.php 使用了DispatchesJobs trait。该trait提供了一些允许你方便推送任务到队列的方法,例如dispatch方法:

$this->dispatch(new SendReminderEmail('849291170@qq.com'));    

2. DispatchesJobs trait

如果你想在路由或控制器之外的某些地方分发任务,可以使用DispatchesJobs trait 在任何地方将任务添加到队列。下面是在模型中使用的例子:

<?php

    namespace App;

    use App\Jobs\SendReminderEmail;
    use Illuminate\Database\Eloquent\Model;
    use Illuminate\Foundation\Bus\DispatchesJobs;

    class Student extends Model
    {
        use DispatchesJobs;

        public static function queue()
        {

            dispatch(new SendReminderEmail('849291170@qq.com'));
        }
    }

3. 延迟执行

下面是延迟60秒执行的例子:

$job = (new SendReminderEmail('849291170@qq.com'))->delay(60);
$this->dispatch($job);

五、运行队列监听器

Artisan控制台运行如下命令

php artisan queue:listen

使用--tries开关来指定任务最大可尝试执行次数

php artisan queue:listen --tries=3

六、处理失败的任务

任务执行次数达到最大限制后,会被插入到failed_jobs表,失败任务的名字可以通过配置文件config/queue.php来配置。

1. 迁移记录失败队列需要的数据表

php artisan queue:failed-table
php artisan migrate

2. 重试失败任务

要查看已插入到failed_jobs数据表中的所有失败任务,该命令将会列出任务ID,连接,对列和失败时间。

php artisan queue:failed

任务ID可用于重试失败任务,例如,要重试一个ID为5的失败任务,要用到下面的命令:

php artisan queue:retry 5

要重试所有失败任务,使用如下命令即可:

php artisan queue:retry all

如果你要删除一个失败任务,可以使用queue:forget命令:

php artisan queue:forget 5

要删除所有失败任务,可以使用queue:flush命令:

php artisan queue:flush

交友互动:

本文首发于马燕龙个人博客,欢迎分享,转载请标明出处。
马燕龙个人博客:http://www.mayanlong.com
马燕龙个人微博:http://weibo.com/imayanlong
马燕龙Github主页:https://github.com/yanlongma

Composer 中国全量镜像(二)

为什么要使用Composer中国全量镜像?

一般情况下,安装包的数据(主要是 zip 文件)是从 github.com 上下载的,安装包的元数据是从 packagist.org 上下载的。

然而,由于众所周知的原因,国外的网站连接速度很慢,并且随时可能被“墙”。

“Composer 中国全量镜像”所做的就是缓存所有安装包和元数据到国内的机房并通过国内的 CDN 进行加速,这样就不必再去向国外的网站发起请求,这样我们使用Composer时就会更加快速、稳定。

一、查看当前镜像地址

在命令行输入如下命令,即可查看镜像地址:

$ composer config -g repo.packagist
{"type":"composer","url":"https://packagist.org","allow_ssl_downgrade":true}

也可以使用 composer config -l -g 查看所有全局配置

二、启用中国全量镜像服务:

启用中国全量镜像服务有两种方式,具体配置方法如下:

1. 系统全局配置:

即将配置信息添加到 Composer 的全局配置文件 config.json 中。修改composer的全局配置文件(推荐方式),打开命令行并执行如下命令:

composer config -g repo.packagist composer https://packagist.phpcomposer.com

2. 单个项目配置:

即将将配置信息添加到某个项目的 composer.json 文件中。修改当前项目的composer.json配置文件有两种方式,最后都是向文件中添加如下配置信息:

"repositories": {
    "packagist": {
        "type": "composer",
        "url": "https://packagist.phpcomposer.com"
    }
}

2.1 打开命令行并进入项目的根目录(也就是 composer.json 文件所在目录),执行如下命令:

composer config repo.packagist composer https://packagist.phpcomposer.com

该命令将会在当前项目中的 composer.json 文件的末尾自动添加镜像的配置信息

2.2 手动向composer.json文件中添加以上信息

Composer 安装(一)

一、简介

Composer 是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件。

二、为什么要使用Composer

  • 你有一个项目依赖于若干个库。
  • 其中一些库依赖于其他库。
  • 你声明你所依赖的东西。
  • Composer 会找出哪个版本的包需要安装,并安装它们(将它们下载到你的项目中)。

三、安装方式

1. Composer-Setup.exe

Win用户直接下载并运行 Composer-Setup.exe,它将安装最新版本的Composer ,并设置好系统的环境变量,因此你可以在任何目录下直接使用composer命令。(这是安装Composer最简单的方式,但是需要翻墙)

2. 通用安装方式(Win、Linux、Mac都能用),使用composer.phar文件(其实就是下载composer.phar文件,不需要翻墙)

2.1 直接下载composer.phar文件(点击下载)

2.2 打开命令行并执行下列命令安装最新版本的 Composer

$ php -r "readfile('https://getcomposer.org/installer');" | php
Downloading 1.1.3...

Composer successfully installed to: /Users/myl/Desktop/composer.phar
Use it: php composer.phar

这将检查一些PHP的设置,然后下载composer.phar到当前工作目录中。这是Composer的二进制文件。这是一个PHAR 包(PHP 的归档),这是PHP的归档格式可以帮助用户在命令行中执行一些操作。

3. 检测是否安装成功

输入如下命令,如果成功则出现以下信息:

$ php composer.phar
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.1.3 2016-06-26 15:42:08

局部安装和全局安装

四、局部安装

上述下载Composer的过程正确执行完毕后,可以将composer.phar文件复制到任意目录(比如项目根目录下),然后通过 php composer.phar 指令即可使用Composer了!

五、全局安装

全局安装是将Composer安装到系统环境变量PATH所包含的路径下面,然后就能够在命令行窗口中直接执行composer命令了。

1. Mac或Linux系统

打开命令行窗口并执行如下命令将前面下载的composer.phar文件移动到 /usr/local/bin/ 目录下面:

sudo mv composer.phar /usr/local/bin/composer    

如果目录不存在,则创建,命令如下:

mkdir -p /usr/local/bin

2. Win系统

  1. 找到并进入PHP的安装目录(和你在命令行中执行的php指令应该是同一套PHP)。
  2. 将 composer.phar 复制到PHP的安装目录下面,也就是和 php.exe 在同一级目录。
  3. 在 PHP 安装目录下新建一个 composer.bat 文件,并将下列代码保存到此文件中。
    @php "%~dp0composer.phar" %*

3. 检测全局安装是否成功

$ composer --version
Composer version 1.1.3 2016-06-26 15:42:08

六、相关资料

Laravel 5.2 教程 - 文件上传

一、简介

Laravel 有很棒的文件系统抽象层,是基于 Frank de Jonge 的 Flysystem 扩展包。 Laravel 集成的 Flysystem 提供了简单的接口,可以操作本地端空间、 Amazon S3 、 Rackspace Cloud Storage 。更方便的是,它可以非常简单的切换不同保存方式,但仍使用相同的 API 操作!

默认使用本地端空间。当然,你也可以设置多组磁盘,甚至在多个磁盘使用相同的驱动。Laravel文件系统提供了非常强大的功能,但是本文只介绍常用的文件上传功能。

本文通过介绍使用本地端空间来介绍Laravel中文件上传的使用。

二、配置

文件系统的配置文件在 config/filesystems.php 文件中,此处我们新建一个uploads本地磁盘空间用于存储上传的文件,具体配置项及说明如下:

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Filesystem Disk
    |--------------------------------------------------------------------------
    |
    | Here you may specify the default filesystem disk that should be used
    | by the framework. A "local" driver, as well as a variety of cloud
    | based drivers are available for your choosing. Just store away!
    |
    | Supported: "local", "ftp", "s3", "rackspace"
    |
    */

    // 默认使用本地端空间 支持 "local", "ftp", "s3", "rackspace"
    'default' => 'local',

    /*
    |--------------------------------------------------------------------------
    | Default Cloud Filesystem Disk
    |--------------------------------------------------------------------------
    |
    | Many applications store files both locally and in the cloud. For this
    | reason, you may specify a default "cloud" driver here. This driver
    | will be bound as the Cloud disk implementation in the container.
    |
    */

    // 云存储使用 Amazon S3
    'cloud' => 's3',

    /*
    |--------------------------------------------------------------------------
    | Filesystem Disks
    |--------------------------------------------------------------------------
    |
    | Here you may configure as many filesystem "disks" as you wish, and you
    | may even configure multiple disks of the same driver. Defaults have
    | been setup for each driver as an example of the required options.
    |
    */

    'disks' => [

        // 本地端的local空间
        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ],

        // 本地端的public空间
        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'visibility' => 'public',
        ],

        // 新建一个本地端uploads空间(目录) 用于存储上传的文件
        'uploads' => [

            'driver' => 'local',

            // 文件将上传到storage/app/uploads目录
            'root' => storage_path('app/uploads'),

            // 文件将上传到public/uploads目录 如果需要浏览器直接访问 请设置成这个
            //'root' => public_path('uploads'),
        ],

        // Amazon S3 相关配置
        's3' => [
            'driver' => 's3',
            'key' => 'your-key',
            'secret' => 'your-secret',
            'region' => 'your-region',
            'bucket' => 'your-bucket',
        ],

    ],

];

三、代码实现文件上传

1. 控制器代码

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Storage;
use App\Http\Requests;


class FileController extends Controller
{

    // 文件上传方法
    public function upload(Request $request)
    {

        if ($request->isMethod('post')) {

            $file = $request->file('picture');

            // 文件是否上传成功
            if ($file->isValid()) {

                // 获取文件相关信息
                $originalName = $file->getClientOriginalName(); // 文件原名
                $ext = $file->getClientOriginalExtension();     // 扩展名
                $realPath = $file->getRealPath();   //临时文件的绝对路径
                $type = $file->getClientMimeType();     // image/jpeg

                // 上传文件
                $filename = date('Y-m-d-H-i-s') . '-' . uniqid() . '.' . $ext;
                // 使用我们新建的uploads本地存储空间(目录)
                $bool = Storage::disk('uploads')->put($filename, file_get_contents($realPath));
                var_dump($bool);

            }

        }

        return view('upload');
    }
}

2. 最基础的 upload.blade.php 模板代码:

<form method="post" enctype="multipart/form-data" >    
    <input type="file" name="picture">
    <button type="submit"> 提交 </button>
</form>

获取到文件后,即可对文件进行各种处理。如果是图片,可以进行各种缩放及裁剪操作。


交友互动:

本文首发于马燕龙个人博客,欢迎分享,转载请标明出处。
马燕龙个人博客:http://www.mayanlong.com
马燕龙个人微博:http://weibo.com/imayanlong
马燕龙Github主页:https://github.com/yanlongma

Laravel 5.2 教程 - 邮件

一、简介

Laravel 的邮件功能基于热门的 SwiftMailer 函数库之上,提供了一个简洁的 API。Laravel为SMTP、Mailgun、Mandrill、Amazon SES、PHP的mail函数、以及sendmail提供了驱动,从而允许你快速通过本地或云服务发送邮件。

本文通过介绍国内常用的SMTP方式来介绍 Laravel 中邮件功能的使用。

二、配置

邮件的配置文件在config/mail.php文件中,配置项及说明如下:

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Mail Driver
    |--------------------------------------------------------------------------
    |
    | Laravel supports both SMTP and PHP's "mail" function as drivers for the
    | sending of e-mail. You may specify which one you're using throughout
    | your application here. By default, Laravel is setup for SMTP mail.
    |
    | Supported: "smtp", "mail", "sendmail", "mailgun", "mandrill",
    |            "ses", "sparkpost", "log"
    |
    */

    // 默认使用 smtp 驱动, 支持 "smtp", "mail", "sendmail", "mailgun", "mandrill", "ses", "sparkpost", "log"
    'driver' => env('MAIL_DRIVER', 'smtp'),

    /*
    |--------------------------------------------------------------------------
    | SMTP Host Address
    |--------------------------------------------------------------------------
    |
    | Here you may provide the host address of the SMTP server used by your
    | applications. A default option is provided that is compatible with
    | the Mailgun mail service which will provide reliable deliveries.
    |
    */

    // smtp 服务器的主机地址
    'host' => env('MAIL_HOST', 'smtp.mailgun.org'),

    /*
    |--------------------------------------------------------------------------
    | SMTP Host Port
    |--------------------------------------------------------------------------
    |
    | This is the SMTP port used by your application to deliver e-mails to
    | users of the application. Like the host we have set this value to
    | stay compatible with the Mailgun e-mail application by default.
    |
    */

    // 端口
    'port' => env('MAIL_PORT', 587),

    /*
    |--------------------------------------------------------------------------
    | Global "From" Address
    |--------------------------------------------------------------------------
    |
    | You may wish for all e-mails sent by your application to be sent from
    | the same address. Here, you may specify a name and address that is
    | used globally for all e-mails that are sent by your application.
    |
    */

    // 配置全局的发件邮箱地址及名称
    'from' => ['address' => "json_vip@163.com", 'name' => "马燕龙个人博客"],

    /*
    |--------------------------------------------------------------------------
    | E-Mail Encryption Protocol
    |--------------------------------------------------------------------------
    |
    | Here you may specify the encryption protocol that should be used when
    | the application send e-mail messages. A sensible default using the
    | transport layer security protocol should provide great security.
    |
    */

    // 协议
    'encryption' => env('MAIL_ENCRYPTION', 'tls'),

    /*
    |--------------------------------------------------------------------------
    | SMTP Server Username
    |--------------------------------------------------------------------------
    |
    | If your SMTP server requires a username for authentication, you should
    | set it here. This will get used to authenticate with your server on
    | connection. You may also set the "password" value below this one.
    |
    */

    // 发件邮箱账号
    'username' => env('MAIL_USERNAME'),

    /*
    |--------------------------------------------------------------------------
    | SMTP Server Password
    |--------------------------------------------------------------------------
    |
    | Here you may set the password required by your SMTP server to send out
    | messages from your application. This will be given to the server on
    | connection so that the application will be able to send messages.
    |
    */

    // 发件邮箱密码
    'password' => env('MAIL_PASSWORD'),

    /*
    |--------------------------------------------------------------------------
    | Sendmail System Path
    |--------------------------------------------------------------------------
    |
    | When using the "sendmail" driver to send e-mails, we will need to know
    | the path to where Sendmail lives on this server. A default path has
    | been provided here, which will work well on most of your systems.
    |
    */

    'sendmail' => '/usr/sbin/sendmail -bs',

];

具体的参数值在.env文件中配置,这里使用的是163邮箱的SMTP服务,配置如下:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.163.com
MAIL_PORT=465
MAIL_USERNAME=json_vip@163.com
MAIL_PASSWORD=对应账号的密码
MAIL_ENCRYPTION=ssl      

三、发送邮件

使用时记得 use Mail;

1. 发送纯文本邮件

$num = Mail::raw('邮件内容', function($message) {

    $message->from('json_vip@163.com', '发件人名称');
    $message->subject('邮件主题');
    $message->to('849291170@qq.com');
});        

2. 发送HTML视图

使用mails目录下的welcome模板,传递的参数用于给模板中的变量赋值:

$num = Mail::send('mails.welcome', ['name' => 'sean'], function($message) {

    $message->to('849291170@qq.com');
});

对应的模板为:

<h1> Welcome, {{ $name }} ! </h>

交友互动:

本文首发于马燕龙个人博客,欢迎分享,转载请标明出处。
马燕龙个人博客:http://www.mayanlong.com
马燕龙个人微博:http://weibo.com/imayanlong
马燕龙Github主页:https://github.com/yanlongma

Laravel 5.2 教程 - 数据填充

一、简介

Laravel提供的填充类(seed),可以让大家很容易的实现填充测试数据到数据库。所有的填充类都位于database/seeds目录。填充类的类名完全由你自定义,但最好还是遵循一定的规则,比如可读性,例如UsersTableSeeder等。

下面以创建学生表的填充为例,来介绍Laravel中数据填充的使用。(点击查看演示数据表结构

二、建立填充文件

1. 使用Artisan的 make:seeder 命令生成students表的填充文件:

php artisan make:seeder StudentsTableSeeder

将会在database/seeds目录下生成一个StudentsTableSeeder.php填充文件。

2. 插入填充代码

打开该文件后,有一个StudentsTableSeeder的类,里面有个run()方法。在run方法中可以插入任何你想插入的数据,可以使用查询构建器手动插入数据,也可以使用 Eloquent 模型工厂。

下面以使用查询构造器为例,完整代码如下:

<?php

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class StudentsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // 使用查询构造器
        DB::table('students')->insert([
            ['name' => 'sean', 'age' => 18, 'sex' => 20],
            ['name' => 'chen', 'age' => 20, 'sex' => 30],
        ]);
    }
}

三、执行填充文件

1. 执行单个填充文件

php artisan db:seed --class=StudentsTableSeeder

2. 批量执行填充文件

使用批量填充文件,需要在database/seeds/DatabaseSeeder类的run()方法中,将你想要运行的填充器类名传递过去即可:

public function run()
{
    $this->call(StudentsTableSeeder::class);
    // $this->call(UsersTableSeeder::class); 
    // 以及其它填充类
}

然后执行如下命令:

php artisan db:seed

这样既可添加测试数据到students表中。


交友互动:

本文首发于马燕龙个人博客,欢迎分享,转载请标明出处。
马燕龙个人博客:http://www.mayanlong.com
马燕龙个人微博:http://weibo.com/imayanlong
马燕龙Github主页:https://github.com/yanlongma