标签归档:PHP

使用Homestead来部署Laravel 5.3

本文写于:2016年9月22日 13:25:29,如果时间久远部分细节可能存在变动,请访问相关网站获取最新信息

Laravel 致力于让整个 PHP 开发过程变得让人愉悦,包括本地开发环境,为此官方为我们提供了一整套本地开发环境 —— Laravel Homestead。

Laravel Homestead 是一个打包好各种 Laravel 开发所需要的工具及环境的 Vagrant 盒子(Vagrant 提供了一个便捷的方式来管理和设置虚拟机),该盒子为我们提供了优秀的开发环境,有了它,我们不再需要在本地环境安装 PHP、HHVM、Web服务器以及其它工具软件,我们也完全不用再担心误操作搞乱操作系统 —— 因为 Vagrant 盒子是一次性的,如果出现错误,可以在数分钟内销毁并重新创建该 Vagrant 盒子!

Homestead可以运行在 Windows、Mac 以及 Linux 系统上,其中已经安装好了Nginx、PHP7.0、MySQL、Postgres、Redis、Memcached、Node以及很多其它开发 Laravel 应用所需要的东西。

如果你使用的是Windows,需要开启系统的硬件虚拟化(VT-x),这通常可以通过BIOS来开启。

1. 安装VirtualBox

下载地址:https://www.virtualbox.org/wiki/Downloads

安装过程中一路下一步就可以了

2. 安装Vagrant和Laravel盒子

下载地址:https://www.vagrantup.com/downloads.html

安装过程没有什么特殊操作,别忘了在安装后重启操作系统

重启完成之后,可以通过下面的命令来查看安装是否成功

vagrant --version

然后我们使用下面的命令下载Laravel Homestead Vagrant盒子

vagrant box add laravel/homestead

这一步会花费很长时间,部分地区可能还会被,可以使用VPN或者把curl.exe加入你的代理来解决(比如使用Proxifier搭配SS)

3. 安装PHP

我们到:http://windows.php.net/download 下载对应的PHP版本,我使用的是php-7.0.10-nts-Win32-VC14-x64.zip

PHP高版本可能需要安装对应的VC库,这里给出下载链接

VC11:https://www.microsoft.com/zh-CN/download/details.aspx?id=30679

VC14:https://www.microsoft.com/zh-CN/download/details.aspx?id=48145

一般我们把X86和X64的全部安装

把下载下来的PHP解压到你想要的位置,比如D:\php,然后别忘了把这个路径添加到你的用户环境变量里。完成后,重开cmd窗口输入php -v 应该可以显示你安装的php版本

然后我们进入刚才的php安装目录,拷贝php.ini-development 重命名为php.ini ,然后打开编辑,用查找找到下面的行,将其前面的分号去掉,然后保存。

extension_dir = "ext"
extension=php_openssl.dll
extension=php_mbstring.dll

4. 安装nodejs

下载地址:https://nodejs.org/en/download/

找到对应的安装包下载安装就可以了,安装完成后可以在cmd中使用node -v 来检测是否安装成功。

然后我们全局安装gulp

npm install -g gulp

5. 安装Composer

下载地址:https://getcomposer.org/download/

安装过程中如果php路径没有显示请检查你的环境变量,如果出现SSL没有启动的问题请检查你是否参照上文修改了php.ini中extension的配置。

安装完成后在cmd输入composer –version 来检查是否安装成功。

然后,我们把修改composer的源到composer中国镜像(http://pkg.phpcomposer.com/),加快速度。修改方式是打开cmd执行下面的命令

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

6. 安装Git

下载地址:https://git-scm.com/downloads

安装过程中请注意在下面的步骤中

d6ea26a1b609b7f56f09dfbcff58d3de

确保选择Use Git from the Windows Command Prompt选项,其他步骤下一步即可。

安装完成后在cmd输入git –version 来检查是否安装成功。

在 Windows 开始菜单找到 Git Bash 并运行,在打开的窗口中执行下面命令,一路回车使用默认选项即可,这将生成SSH Key。(别忘了修改你的email地址)

ssh-keygen -t rsa -C "[email protected]"

7. 安装laravel Install

打开cmd运行下面的命令

composer global require "laravel/installer"

8. 安装Laravel 5.3

打开你准备放置Laravel 5.3 RC1项目的文件夹,在当前文件夹运行cmd来安装laravel(可能需要科学上网)

laravel new demo

完成后,你的项目将被安装到demo文件夹下。我们使用cd demo 来进入demo目录

接着,我们安装所有的依赖

npm install

注意:从这一步开始我们后面的cmd运行目录均为demo文件夹下

9. 安装homestead

在cmd中运行下面指令安装homestead,我这里采用的是项目局部安装

composer require laravel/homestead --dev

执行完后,执行下面命令生成Homestead.yaml

vendor\bin\homestead make

生成之后的内容大概如下

---
ip: "192.168.10.10"
memory: 2048
cpus: 1
hostname: demo
name: demo
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: "C:/Users/XXX/PhpstormProjects/demo"
      to: "/home/vagrant/demo"

sites:
    - map: homestead.app
      to: "/home/vagrant/demo/public"

databases:
    - homestead

# blackfire:
#     - id: foo
#       token: bar
#       client-id: foo
#       client-token: bar

# ports:
#     - send: 50000
#       to: 5000
#     - send: 7777
#       to: 777
#       protocol: udp

在这个文件中,我们的虚拟机IP是192.168.10.10。

10. 启动Vagrant,所有步骤完成

我们在cmd运行vagrant up 来启动虚拟机,这一步骤的首次运行可能时间较长。

启动过程中可以观察到端口转发,我们本地的127.0.0.1的8000端口被转发到了192.168.10.10的80端口。

启动完成后我们ping一下192.168.10.10,如果不通的话请打开“控制面板\网络和 Internet\网络和共享中心”,就是适配器管理这个页面,找到最新添加的VM Box Host Only Network。如何判断最新呢,就是根据最后面#后面的数字。这里面是#2这个

qq%e6%88%aa%e5%9b%be20160922142455

右键进入IPV4设置,修改如下

qq%e6%88%aa%e5%9b%be20160922142719

确认之后再ping,ping通后我建议你再运行一下vagrant halt 和vagrant up ,重启虚拟机。

最后别忘了在hosts文件中添加下面的内容,把域名指向虚拟机IP,这样以后我们就可以通过http://homestead.app 来访问我们的项目了

192.168.10.10	homestead.app

运行完后,我们打开http://homestead.app/ 就可以看到我们的laravel了

QQ截图20160822160513

注意:即使关闭当前cmd窗口虚拟机也不会关闭,想关闭虚拟机请打开cmd运行vagrant halt

PHP中Curl将cookies原始字符串转换为数组

在Curl中我们有些时候需要将cookies字符串转换为数组,可以用下面的方法

public function setCookieString($string)
{
    $result = array();
    if(preg_match_all('/\s*([^;=]+)=([^;]+)/i',$string,$matches) > 0){
        if(isset($matches[1]) && isset($matches[2])){
            if(count($matches[1]) == count($matches[2])){
                foreach ($matches[1] as $handle => $key) {
                    $result[$key] = $matches[2][$handle];
                }
            }
        }
    }
    return $result;
}

参数只能放cookies字符串,如下图绿色框的部分

QQ截图20160510223551

tmc=1.170236450.59236819.1462889961066.1462889961066.1462889961066; tma=170236450.72078710.1438771475412.1449463856228.1449536313927.12; tmd=202.170236450.72078710.1438771475412.

 

二维码图片识别HTTP API,支持PHP,JavaScript等语言。PHP, JavaScript QR Code Reader API

项目地址:https://mydansun.github.io/QrCode-Reader-Node.js/

 

本地版本

实现图片中的二维码识别,基于Node.js

基于 LazarSoft / jsqrcode https://github.com/LazarSoft/jsqrcode

可以从拍摄的图片中提取二维码,比如下面的图片

部署方法请到Github查看 https://mydansun.github.io/QrCode-Reader-Node.js/

test

在线版本

https://qr.api.onlyke.com/reader?url=[图片地址]

一个例子:https://qr.api.onlyke.com/reader?url=https://github.com/mydansun/QrCode-Reader-Node.js/raw/master/test/test.jpg

API服务器在日本,小站运营,捐赠配置请联系我!!

返回数据

识别错误

{
    "status":0,
    "error":"这里是错误信息"
}

识别成功

{
    "status": 1,
    "content": "这是二维码的文本内容"
}

 

PHP7.0+Nginx-1.8.0禁止跨虚拟主机执行脚本

在你的Nginx每个虚拟主机的Server中写如下代码(貌似PHP5.3以上版本就支持了,不过我是7.0的版本)

#PHP Prohibit cross-Hosting
fastcgi_param  PHP_VALUE  "open_basedir=$document_root:/tmp/";

当然,你也可以把这段代码放在Conf的fastcgi.conf或者fastcgi_params里,这要看你在Server中include了哪个文件。

在CentOS6.5上用rpm方法安装mysql最新版本5.7.10

首先,下载mysql-5.7.10-1.el6.x86_64.rpm-bundle.tar

wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.10-1.el6.x86_64.rpm-bundle.tar
tar -xvf mysql-5.7.10-1.el6.x86_64.rpm-bundle.tar

你也可以到mysql的官方网站下载:http://dev.mysql.com/downloads/

QQ截图20151216190001

 

安装依赖

yum install numactl

下载完了之后进入到相应目录,执行下面的命令

rpm -ivh mysql-community-common-5.7.10-1.el6.x86_64.rpm mysql-community-libs-5.7.10-1.el6.x86_64.rpm mysql-community-client-5.7.10-1.el6.x86_64.rpm mysql-community-server-5.7.10-1.el6.x86_64.rpm mysql-community-devel-5.7.10-1.el6.x86_64.rpm

然后执行下面命令初始化,执行生会在/var/log/mysqld.log生成随机密码,最后一行可以看到

mysqld --initialize

最后别忘了启动mysqld服务,更改root密码,设置开机启动和映射管道文件(php将默认使用/tmp/mysql.sock)

chown -R mysql.mysql /var/lib/mysql
service mysqld start
/usr/bin/mysqladmin -u root -p'你的初始化密码' password '你的新密码'
chkconfig mysqld on
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

一步一步学Laravel,PHP 5.4.0 起的traits多继承特性

自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。

Traits 是一种为类似 PHP 的单继承语言而准备的代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集。Traits 和类组合的语义是定义了一种方式来减少复杂性,避免传统多继承和混入类(Mixin)相关的典型问题。

Trait 和一个类相似,但仅仅旨在用细粒度和一致的方式来组合功能。Trait 不能通过它自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用类的成员不需要继承。

Trait 示例


优先级

从基类继承的成员被 trait 插入的成员所覆盖。优先顺序是来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法。
优先顺序示例

sayHello();
?>

以上例程会输出:Hello World!
从基类继承的成员被插入的 SayWorld Trait 中的 sayHello 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。
另一个优先级顺序的例子

sayHello();
?>

以上例程会输出:Hello Universe!

多个 trait

通过逗号分隔,在 use 声明列出多个 trait,可以都插入到一个类中。
多个 trait 的用法的例子

sayHello();
$o->sayWorld();
$o->sayExclamationMark();
?>

以上例程会输出:Hello World!

冲突的解决

如果两个 trait 都插入了一个同名的方法,如果没有明确解决冲突将会产生一个致命错误。
为了解决多个 trait 在同一个类中的命名冲突,需要使用 insteadof 操作符来明确指定使用冲突方法中的哪一个。
以上方式仅允许排除掉其它方法,as 操作符可以将其中一个冲突的方法以另一个名称来引入。
冲突解决的例子


在本例中 Talker 使用了 trait A 和 B。由于 A 和 B 有冲突的方法,其定义了使用 trait B 中的 smallTalk 以及 trait A 中的 bigTalk。
Aliased_Talker 使用了 as 操作符来定义了 talk 来作为 B 的 bigTalk 的别名。

修改方法的访问控制


本文引用自:http://www.jb51.net/article/61260.htm