macOS 下配置 MAMP 开发环境(Mac + Apache + Mysql + PHP)

macOS 中已经内置了 PHP、Python、Ruby、Perl 等常用的脚本语言,以及 Apache HTTP 服务器,所以使用起来非常方便。本文以最新的 macOS Sierra 10.12 配置 MAMP 开发环境为例,本文同样适用其它 macOS 版本的配置,macOS Sierra 10.12 中内置的 PHP 版本为 5.6。

一、配置Apache

macOS Sierra 已内置 Apache 服务器,不需要我们自己编译安装,只需开启 Apache 即可使用。

开关服务

可以通过如下命令进行开启、关闭以及重启:

$ sudo apachectl start | stop | restart

开启后,打开浏览器,访问http://localhost/index.html.en如果出现It works!,则 Apache 可以正常使用。

修改配置

配置文件在 /etc/apache2/httpd.conf 文件中,如果需要配置,修改该文件重启即可。比如咱们对如下配置项进行修改:

#. 默认 Web 根目录配置项为:

DocumentRoot "/Library/WebServer/Documents"

我们修改为当前宿主目录下的webroot目录(我的账号为sean),修改后为:

DocumentRoot "/Users/sean/webroot"

还可以修改目录的相关权限:

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

<Directory "/Users/sean/webroot">
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

#. 还可以修改以当前用户运行Apache,省的以后老是需要修改权限,只需要做如下修改:

# User _www
User sean

当然这个配置只能在开发环境配置,正式服务器配置成这样会存在安全隐患。

配置好后重启 Apache,在 /Users/sean/webroot 目录下新建 index.html,内容为 ”Hello World!“,访问 http://localhost,如果出现 Hello World!,则配置成功。

二、配置 PHP

macOS Sierra 已内置了 PHP 5.6,因此我们只需要在 Apache 的配置中加载 PHP 模块即可。php、phpize 等命令都在 /usr/bin 目录下。

加载 PHP 模块

打开 Apache 配置文件/etc/apache2/httpd.conf, 找到如下代码,去掉前面的注释(#):

#LoadModule php5_module libexec/apache2/libphp5.so

生成配置文件

默认没有生成 php.ini 配置文件,运行如下命令生成,也可以直接拷贝改名字:

$ sudo cp /etc/php.ini.default /etc/php.ini

测试是否加载成功

重启 Apache 后,在 /Users/sean/webroot 目录下新建 phpinfo.php,内容如下

<?php

phpinfo();

打开浏览器,访问http://localhost/phpinfo.php,如果出现 PHP 的相关信息,则配置成功。

三、安装 Mysql

macOS Sierra 没有内置 Mysql,所以需要自己下载安装。

下载 Mysql

Mysql 官网 下载 .dmg 文件安装即可,本文下载的版本为 Mysql 5.7.16,请按下图指示进行下载:

mysql-download.png

安装 Mysql

下载后,双击安装即可,安装完成后,会设置一个初始的密码,如下图:

mysql-password.png

修改密码

Mysql 的所有命令都在 /usr/local/mysql/bin 目录中,下面我们使用 mysqladmin 命令把 root 用户的初始密码修改为 root123,进入该目录,在命令行执行以下命令:

$ ./mysqladmin -u root -p password root123

回车后输入上图中的初始密码 “h#.a%=reR3)=“ 即可修改成功。

登录 Mysql

下面我们用 root 账号在命令行中登录 Mysql,命令如下:

$ ./mysql -uroot -proot123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 23
Server version: 5.7.16 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
mysql> 

登录后如果出现上图的界面,则 Mysql 安装成功。顺便推荐一个 macOS 中非常好用的 Mysql 客户端工具:Sequel Pro

四、总结

这样我们就配置好了 MAMP 开发环境,下面大家就可以愉快的玩耍了!


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

通过 U 盘启动重装 macOS 系统

重装系统是工作和生活中经常需要做的事情,作为一名开发人员,学会该技能你才是一名合格的程序猿!以后再也不会遇到“程旭元你会装系统吗?”的尴尬了!本文主要介绍怎样通过U盘启动重新安装 macOS 系统,以安装当前最新的 macOS Sierra 10.12 为例。

一、准备工作

1. 准备一个 8G 或以上的U盘,请备份U盘里面的数据,后面的操作会抹掉U盘中的数据;
2. 在 AppStore 中下载 macOS Sierra 安装包;或者通过其他途径下载,拖动至自己的应用程序(Applications)文件夹。

二、格式化U盘

1. 插入U盘,前往「应用程序」->「实用工具」里面找到并打开「磁盘工具」;
2. 在左方列表中找到 U 盘的名称并点击
3. 右边顶部选择「分区」,然后在「分区布局」选择「1个分区」
4. 在分区信息中的 「名称」输入「myl」 (由于后面的命令中会用到此名称,如果你要修改成其它名称,请务必对应修改后面的命令)
5. 在「格式」中选择 「Mac OS 扩展 (日志式)」
6. 这时,先别急着点“应用”,还要先在 「选项」里面,选择「GUID 分区表」
7. 开始格式化

三、制作启动盘

1. 在「应用程序」->「实用工具」里面找到「终端」并打开;
2. 复制下面的命令,并粘贴到「终端」里,按回车运行

$ sudo /Applications/Install\ macOS\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/myl --applicationpath /Applications/Install\ macOS\ Sierra.app --nointeraction

回车后,系统会提示你输入管理员密码,接下来就是等待系统开始制作启动盘了。这时,命令执行中你会陆续看到类似以下的信息:

WARNING: Improper use of the sudo command could lead to data loss
or the deletion of important system files. Please double-check your
typing when using sudo. Type "man sudo" for more information.

To proceed, enter your password, or type Ctrl-C to abort.

Password:
Erasing Disk: 0%... 10%... 20%... 30%...100%...
Copying installer files to disk...
Copy complete.
Making disk bootable...
Copying boot files...
Copy complete.
Done.

等待命令运行完成并显示「Done.」,此时系统启动盘制作完毕!

四、U盘启动安装 macOS Sierra

当你插入制作完成的 macOS Sierra U盘启动盘之后,桌面出现「Install macOS Sierra」的盘符那么就表示启动盘是正常的了。那么怎样通过 USB 启动进行全新的系统安装呢?

其实很简单,步骤如下:

1. 重启 Mac,听到开机启动音之后按下 option 键,在磁盘选择界面选择 U 盘启动,按回车确认
2. 这时选择 U 盘的图标回车,即可通过 U 盘来安装 macOS Sierra 了!你可以直接覆盖安装系统(升级),也可以在磁盘工具里面格式化抹掉整个硬盘,或者重新分区等实现全新的干净的安装。


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

Laravel 5.3 表单实现增删改查 (curd) 快速入门教程(Demo)

一、简介:

一个 Laravel 5.3 表单实现 curd 快速入门教程(Demo)

代码下载:https://github.com/yanlongma/laravel-curd

Laravel 开发交流群(521295157),欢迎加入!

Laravel 系列视频教程:http://www.mayanlong.com/laravel.html

二、安装:

1. 连接数据库

修改 .env 配置文件

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=root

2. 新建数据表

首先创建一个数据库 laravel,然后再创建数据表。

2.1. 使用 Laravel 的迁移创建数据表

php artisan migrate

2.2 手动执行以下 SQL 创建数据表

DROP TABLE IF EXISTS students;

CREATE TABLE IF NOT EXISTS students(

    `id` INT AUTO_INCREMENT PRIMARY KEY ,
    `name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '姓名',
    `age` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年龄',
    `sex` TINYINT UNSIGNED NOT NULL DEFAULT 10 COMMENT '性别',    /* 10.未知 20.男 30.女 */

    `created_at` INT NOT NULL DEFAULT 0 COMMENT '新增时间',
    `updated_at` INT NOT NULL DEFAULT 0 COMMENT '修改时间'

)ENGINE=InnoDB DEFAULT CHARSET=UTF8 COMMENT='学生表';

3. 访问

打开浏览器,输入你的项目地址,访问前请确认自己的地址,如下:

http://localhost:8888/laravel-curd/public/index.php

如果出现以下页面,则安装成功,您就可以开始 Laravel 的学习之旅啦!

curd-2.gif

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   

# require (申明依赖)

我们也可以用命令直接添加依赖,执行该命令后将自动下载,命令如下:

$ composer require symfony/http-foundation

本文首发于马燕龙个人博客,欢迎分享,转载请标明出处。
马燕龙个人博客: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目录下生成一个新的类,并且该类实现了Illuminate\Contracts\Queue\ShouldQueue接口,告诉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文件中添加以上信息