您正在查看: 标签 php 下的文章

laravel 中 Facades的原理以及代码剖析

Facades

原理

In the context of a Laravel application, a facade is a class that provides access to an object from the container. The machinery that makes this work is in the Facade class. Laravel's facades, and any custom facades you create, will extend the base Illuminate\Support\Facades\Facade class.

A facade class only needs to implement a single method: getFacadeAccessor. It's the getFacadeAccessor method's job to define what to resolve from the container. The Facade base class makes use of the __callStatic() magic-method to defer calls from your facade to the resolved object.

简单来说,门面是通过一个魔术方法__callStatic()把静态方法映射到真正的方法上。

本文我们用Route来举例,

Route::get('/', function(){
    # 
}

- 阅读剩余部分 -

laravel Encryption 详解

laravel Encryption 详解

简介

Encryption是laravel自带的一个加密模块,让我们先来看看文档说明

Configuration

Before using Laravel's encrypter, you should set the key option of your config/app.php configuration file to a 32 character, random string. If this value is not properly set, all values encrypted by Laravel will be insecure.

意思就是在使用laravel的encrypter前,需要在config/app.php设置一下key(秘钥)和cipher(加密方式)。

# from config/app.php
'key' => env('APP_KEY'),
'cipher' => 'AES-256-CBC',

env方法指明了读取.env文件的APP_KEY,这个只能够通过 php artisan key:generate生成,也是整个应用程序的key,cipher表明了加密的方式,默认AES-256-CBC

- 阅读剩余部分 -

centos7 下安装php7&mysql

花了半天时间把另外一个服务器安装php7,并且安装mariadb

在此做下记录

首先按照官网来安装php7 php官网

但是其中configure是错误的,会导致报错

./configure --enable-fpm --with-mysql

改为

./configure --enable-fpm --with-mysqli

到这里基本安装php7就没什么大问题了,期间在./configure的时候可能会提示确实某些包,百度然后yum安装就好了

2.安装mysql

yum install mysql mysql-devel

然后会下载安装相应的mariadb版本

接着安装 yum install mariadb-server (我也不知道为什么mysql没有mysql-server)

安装完mariadb服务器版就多了mysql用户组,然后就进行权限赋值

chmod -R mysql:mysql /var/lib/mysql

接着设置开机启动以及启动
systemctl enable mariadb.service
systemctl start mariadb.service

然后运行 mysql -uroot

最后设置密码

UPDATE mysql.user SET Password=PASSWORD('password') where USER='root';
flush privileges;

花了半天时间把另外一个服务器安装php7,并且安装mariadb

在此做下记录

首先按照官网来安装php7 php官网

但是其中configure是错误的,会导致报错

./configure --enable-fpm --with-mysql

改为

./configure --enable-fpm --with-mysqli

到这里基本安装php7就没什么大问题了,期间在./configure的时候可能会提示确实某些包,百度然后yum安装就好了

2.安装mysql

yum install mysql mysql-devel

然后会下载安装相应的mariadb版本

接着安装 yum install mariadb-server (我也不知道为什么mysql没有mysql-server)

安装完mariadb服务器版就多了mysql用户组,然后就进行权限赋值

chmod -R mysql:mysql /var/lib/mysql

接着设置开机启动以及启动
systemctl enable mariadb.service
systemctl start mariadb.service

然后运行 mysql -uroot

最后设置密码

UPDATE mysql.user SET Password=PASSWORD('password') where USER='root';
flush privileges;

Apache多个域名绑定到不同的子目录

  1. 修改host文件

    用记事本打开C:WindowsSystem32driversetchosts文件,最末尾加上两行,保存退出:

    127.0.0.1 localhost.com

    127.0.0.1 www.localhost.com

  2. 修改Apache的配置文件

    打开httpd.conf的文件,在最下面加上

    <VirtualHost localhost.com>  
        ServerAdmin raywill@qq.com  
        DocumentRoot D:\myweb\php  
        ServerName localhost.com  
        ErrorLog logs/m-error_log.txt  
        CustomLog logs/m_log.txt common  
    </VirtualHost>  
    

然后重启Apache。

访问localhost.com,然后你就发现大功告成了

原文链接

  1. 修改host文件

    用记事本打开C:WindowsSystem32driversetchosts文件,最末尾加上两行,保存退出:

    127.0.0.1 localhost.com

    127.0.0.1 www.localhost.com

  2. 修改Apache的配置文件

    打开httpd.conf的文件,在最下面加上

    <VirtualHost localhost.com>  
        ServerAdmin raywill@qq.com  
        DocumentRoot D:\myweb\php  
        ServerName localhost.com  
        ErrorLog logs/m-error_log.txt  
        CustomLog logs/m_log.txt common  
    </VirtualHost>  
    

然后重启Apache。

访问localhost.com,然后你就发现大功告成了

原文链接

laravel的artisan命令

新建控制器
php artisan make:controller Admin/AdminHomeController
新建model
php artisan make:model Comment
新建migration
php artisan make:migration create_comments_table
生成密匙
php artisan key:generate
执行生成数据库操作
php artisan migrate

新建控制器
php artisan make:controller Admin/AdminHomeController
新建model
php artisan make:model Comment
新建migration
php artisan make:migration create_comments_table
生成密匙
php artisan key:generate
执行生成数据库操作
php artisan migrate

PHP中指定日期上某段时间

$date = '2015-08-15';
//输出 '2015-08-16'
echo date('Y-m-d', strtotime('+1 day', strtotime($date)));
//输出 '2015-08-21'
echo date('Y-m-d', strtotime('+5 days', strtotime($date)));
//输出 '2015-09-16'
echo date('Y-m-d', strtotime('+1 month', strtotime($date)));
//输出 '2016-09-16'
echo date('Y-m-d', strtotime('+1 year', strtotime($date)));

看到百度上都是在当前日期加时间,并没有指定时间,故此做下笔记

$date = '2015-08-15';
//输出 '2015-08-16'
echo date('Y-m-d', strtotime('+1 day', strtotime($date)));
//输出 '2015-08-21'
echo date('Y-m-d', strtotime('+5 days', strtotime($date)));
//输出 '2015-09-16'
echo date('Y-m-d', strtotime('+1 month', strtotime($date)));
//输出 '2016-09-16'
echo date('Y-m-d', strtotime('+1 year', strtotime($date)));

看到百度上都是在当前日期加时间,并没有指定时间,故此做下笔记

Windows更新xampp中的php版本

首先,先下载最新的PHP版本,官方下载地址

我下载的是32位的线程安全版本(不知为什么64位会报错,也许因为xampp原本版本是32位)

下载后放在一个php命名的文件夹中,然后把xampp中的php备份,建议直接命名为php1即可

然后把之前的php文件夹复制进xampp中

不知为何php中没有php.ini,没事,直接从之前的php1的文件夹中复制一份进来即可

然后重启Apache

这里额外说一下,不知为何重启后我的程序会弹出个缺少libssh2.dll的框

百度了一下,直接从网上下载压缩包进来

解压完后,会有三个文件,libssh2.dll、php_ssh.dll、php_ssh2.pdb

将 php_ssh.dll、php_ssh2.pdb 放到你的 php 扩展目录下 php/ext/ 下

将libssh2.dll 复制到 c:/windows/system32 和 c:/windows/syswow64 各一份

php.ini中加入 extension=php_ssh2.dll

重启apache,即可使用php执行ssh连接操作了

首先,先下载最新的PHP版本,官方下载地址

我下载的是32位的线程安全版本(不知为什么64位会报错,也许因为xampp原本版本是32位)

下载后放在一个php命名的文件夹中,然后把xampp中的php备份,建议直接命名为php1即可

然后把之前的php文件夹复制进xampp中

不知为何php中没有php.ini,没事,直接从之前的php1的文件夹中复制一份进来即可

然后重启Apache

这里额外说一下,不知为何重启后我的程序会弹出个缺少libssh2.dll的框

百度了一下,直接从网上下载压缩包进来

解压完后,会有三个文件,libssh2.dll、php_ssh.dll、php_ssh2.pdb

将 php_ssh.dll、php_ssh2.pdb 放到你的 php 扩展目录下 php/ext/ 下

将libssh2.dll 复制到 c:/windows/system32 和 c:/windows/syswow64 各一份

php.ini中加入 extension=php_ssh2.dll

重启apache,即可使用php执行ssh连接操作了

Centos 更新源yum

因为打算去尝试使用laraval,需要5.6的环境,终于在多次升级PHP失败后成功了

以更新PHP为例

检查当前安装的PHP包

yum list installed | grep php

如果有安装的PHP包,先删除他们

 yum remove php.x86_64 php-cli.x86_64 php-common.x86_64 php-gd.x86_64 php-ldap.x86_64 php-mbstring.x86_64 php-mcrypt.x86_64 php-mysql.x86_64 php-pdo.x86_64

更新源yum

Centos 5.X
  rpm -Uvh http://mirror.webtatic.com/yum/el5/latest.rpm
  CentOs 6.x
  rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm
  CentOs 7.X
rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

如果想删除上面安装的包,重新安装
rpm -qa | grep webstatic
rpm -e 上面搜索到的包即可

运行yum install

yum install php56w.x86_64 php56w-cli.x86_64 php56w-common.x86_64 php56w-gd.x86_64 php56w-ldap.x86_64 php56w-mbstring.x86_64 php56w-mcrypt.x86_64 php56w-mysql.x86_64 php56w-pdo.x86_64

注:如果想升级到5.6把上面的55w换成56w就可以了。

安装PHP FPM

yum install php55w-fpm
注:如果想升级到5.6把上面的55w换成56w就可以了

因为打算去尝试使用laraval,需要5.6的环境,终于在多次升级PHP失败后成功了

以更新PHP为例

检查当前安装的PHP包

yum list installed | grep php

如果有安装的PHP包,先删除他们

 yum remove php.x86_64 php-cli.x86_64 php-common.x86_64 php-gd.x86_64 php-ldap.x86_64 php-mbstring.x86_64 php-mcrypt.x86_64 php-mysql.x86_64 php-pdo.x86_64

更新源yum

Centos 5.X
  rpm -Uvh http://mirror.webtatic.com/yum/el5/latest.rpm
  CentOs 6.x
  rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm
  CentOs 7.X
rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

如果想删除上面安装的包,重新安装
rpm -qa | grep webstatic
rpm -e 上面搜索到的包即可

运行yum install

yum install php56w.x86_64 php56w-cli.x86_64 php56w-common.x86_64 php56w-gd.x86_64 php56w-ldap.x86_64 php56w-mbstring.x86_64 php56w-mcrypt.x86_64 php56w-mysql.x86_64 php56w-pdo.x86_64

注:如果想升级到5.6把上面的55w换成56w就可以了。

安装PHP FPM

yum install php55w-fpm
注:如果想升级到5.6把上面的55w换成56w就可以了

Centos下安装php的pdo以及gd库

因为自己的Linux服务器一直坚持使用yum安装,也比较厌烦编译安装

pdo的扩展:

yum install php-pdo

pdo的mysql扩展:

yum install php-pdo_mysql

gd库扩展:

yum install php-gd

安装完就,service php-fpm restart 就ok了

因为自己的Linux服务器一直坚持使用yum安装,也比较厌烦编译安装

pdo的扩展:

yum install php-pdo

pdo的mysql扩展:

yum install php-pdo_mysql

gd库扩展:

yum install php-gd

安装完就,service php-fpm restart 就ok了

解决PHP的MD5加密与JAVA的MD5加密不一致

最新在做一个项目,用到了很久没写过的android,并且需要对其进行加密

结果发现两边结果(PHP以及android)怎么样加密后的都不一样,自己便上网搜了一下便知道原因了

因为编码的问题,需要对android端进行编码转换

接下来就贴一下android端正确的MD5加密代码

public static String md5(byte[] source) {
    try{
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update( source );
        StringBuffer buf=new StringBuffer();
        for(byte b:md.digest())
            buf.append(String.format("%02x", b&0xff) );
        return buf.toString();
    }catch( Exception e ){
        e.printStackTrace(); return null;
    }
}

从代码可以看出,这里传入的参数是byte[],而不是String,这里就需要事先对需要加密的字符串转成

字节,便用到一个方法getBytes(Charset.forName("UTF-8")) ,之前因为范2直接使用

getByte(“utf-8”)而一直出错 - -。

这样,PHP以及android端的MD5加密就一致了。

最新在做一个项目,用到了很久没写过的android,并且需要对其进行加密

结果发现两边结果(PHP以及android)怎么样加密后的都不一样,自己便上网搜了一下便知道原因了

因为编码的问题,需要对android端进行编码转换

接下来就贴一下android端正确的MD5加密代码

public static String md5(byte[] source) {
    try{
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update( source );
        StringBuffer buf=new StringBuffer();
        for(byte b:md.digest())
            buf.append(String.format("%02x", b&0xff) );
        return buf.toString();
    }catch( Exception e ){
        e.printStackTrace(); return null;
    }
}

从代码可以看出,这里传入的参数是byte[],而不是String,这里就需要事先对需要加密的字符串转成

字节,便用到一个方法getBytes(Charset.forName("UTF-8")) ,之前因为范2直接使用

getByte(“utf-8”)而一直出错 - -。

这样,PHP以及android端的MD5加密就一致了。