技术圈开发者交流群:

Laravel从现有数据库逆向生成数据库迁移文件,包括索引和外键!

熟悉laravel的同学都知道,laravel的数据迁移和数据填充,能够随着源代码的改变而同步记录同步数据库结构的变化,也就是对数据库的版本控制。

但是,有的项目开发之初,数据库结构的变化会比较频繁,每个都手动创建migrate文件的,工作量会比较大,或者老项目已有数据库,如果手动为所有的已存在的表去创建迁移文件的会非常耗时,还容易出错。

这里,就给大家分享一下如何逆向生成迁移文件。

PHP 2018年01月04日 1803

Laravel中利用Scout集成Elasticsearch搜索引擎

Elasticsearch(以下简称es)是一个实时的分布式搜索和分析引擎。

在搜索引擎方面,不仅仅有Elasticsearch,像另一篇提到的Algolia,还有sphinx、Solr等等,这里不做评价和比较,本篇主要介绍laravel中如何使用Elasticsearch。

PHP 2017年11月07日 66323

Laravel 全文检索 Scout集成Algolia

你是否在检索千百万级数据时为性能和速度而担忧呢,即使优化了sql,创建了数据库索引,还是不尽如人意呢?

下面就主要介绍laravel如何集成Algolia

Algolia是法国初创公司为你提供毫秒级的数据库实时搜索服务,天下武功无坚不摧,唯快不破。记住哦,是毫秒级。

本文基于laravel5.5,其他版本大同小异。

PHP 2017年10月29日 68908

Laravel数据库迁移和填充(支持中文)

经常我们做项目都团队协作开发,每个人都在自己本地的数据库,如果你曾经出现过让同事手动在数据库结构中添加字段的情况,数据库迁移可以解决你这个问题。

不仅如此,在线上部署的时候,也避免了手动导入数据库或手动修改数据结构的麻烦,数据迁移帮你方便的维护着数据结构。

数据填充,让我们测试的时候需要大量的假数据不再一条一条的去造数据,可以轻松的批量填充大量数据。

本文基于Laravel5.5,其他版本大同小异。

PHP 2017年10月28日 70733

PHP时间转换今天昨天前天几天前

经常在朋友圈,QQ空间、微博上看到动态的发布时间、评论时间,都显示,昨天,前天,几天前,比起直接显示几月几日几分几秒要优雅的多。

于是自己的项目也想采用这种优雅直观的方式,网上找了各种计算相差几天的的例子,都是直接将时间戳相见除以86400,比如现在是17:08,动态更新的时间为前天22:00,这种方式计算的相差天数为1,而不是两天前。

实际情况应该是,昨天任何时间都算一天前,前天任意时间都算2天前,所以自己琢磨了一番,去动态更新时间与今天23:59:59相差的时间秒数与86400(24 x 3600)相除后,向下取整,这样就得到了相差的天数,比如昨天00:00~昨天23:59:59的任何时间与今天的23:59:59,都相差 86400~(86400 x 2) 天,也就是2天。

PHP 2017年10月21日 40570

laravel批量更新多条记录

熟悉laravel的童鞋都知道,laravel有批量一次性插入多条记录,却没有一次性按条件更新多条记录。

是否羡慕thinkphp的saveAll,是否羡慕ci的update_batch,但如此优雅的laravel怎么就没有类似的批量更新的方法呢?

Google了一下,发现stackoverflow( https://stackoverflow.com/questions/26133977/laravel-bulk-update )上已经有人写好了,但是并不能防止sql注入。

PHP 2017年10月13日 7733

[PHP函数每日一例] substr_cn 字符串截取支持中文html

字符串截取支持中文html

/**
 * 清除html标签,字符串截取
 * 支持中文
 * @author TechLee
 */
function substr_cn($str, $length = 0, $start = 0, $charset = "utf-8", $suffix = true)
{
    $str = function_exists('clear_tags') ? clear_tags($str) : strip_tags($str);
    if ($length > 0 && mb_strlen($str, $charset) <= $length) {
        return $str;
    }
    $slice = $length > 0 ? mb_substr($str, $start, $length, $charset) : $str;
    if ($suffix) {
        return $slice . "…";
    }
    return $slice;
}

echo substr_cn('PHP是世界上最好的语言,是宇宙第一语言!', 10);

// 输出:

PHP 2017年09月12日 30359

[PHP函数每日一例] clear_tags 清除HTML标签

单纯用php原生函数 strip_tags 清除仍有残留和空格,下面的方法完美解决,将html转换为纯文本。

/**
 * 清除html标签
 */
function clear_tags($str)
{
    $str = strip_tags($str);
    //首先去掉头尾空格
    $str = trim($str);
    $str = preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", "", strip_tags($str));
    //接着去掉两个空格以上的
    $str = preg_replace('/\s(?=\s)/', '', $str);
    //最后将非空格替换为一个空格
    $str = preg_replace('/[\n\r\t]/', ' ', $str);
    return $str;
}

// echo clear_tags('<p>Hello,World!!!</p>');

// 输出:

// Hello,World!!!


PHP 2017年09月11日 25132

基于Laravel5.5的模块化开发

laravel 安装后是单模块应用,但通常情况下,我们的项目往往会有很多模块,如果按单模块去做,文件目录会异常庞大,不利于维护,耦合性太大。 那么下面就详细说一下利用最新laravel5.5如何进行分模块开发。

composer create-project --prefer-dist laravel/laravel ./
PHP 2017年09月11日 1202

php格式化输出json

格式化输出json,php版本要求5.4或更高

    /**
     * 浏览器友好的变量输出json格式
     * @param mixed     $var 变量
     * @param boolean   $echo 是否输出 默认为true 如果为false 则返回输出字符串
     * @return void|string
     * @author TechLee
     */
    function ddj($var, $echo = true)
    {
        header('content-type:application/json;charset=utf8');
        $output = json_encode($var, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
        if ($echo) {
            echo ($output);
            return;
        } else {
            return $output;
        }
    }


PHP 2017年09月08日 26064

php格式化输出代替var_dump/print_r

PHP输出变量函数print_r和var_dump,没有格式化,易读性太差

下面结合thinkphp礼包dump函数改进的

    /**
     * 浏览器友好的变量输出
     * @param mixed     $var 变量
     * @param boolean   $echo 是否输出 默认为true 如果为false 则返回输出字符串
     * @param string    $label 标签 默认为空
     * @return void|string
     * @author TechLee
     */
    function ddp($var, $echo = true, $label = null, $flags = ENT_SUBSTITUTE)
    {
        $label = (null === $label) ? '' : rtrim($label) . ':';
        ob_start();
        var_dump($var);
        $output = ob_get_clean();
        $output = preg_replace('/\]\=\>\n(\s+)/m', '] => ', $output);

        if (!extension_loaded('xdebug')) {

            $output = htmlspecialchars($output, $flags);

        }

PHP 2017年09月08日 26565

PHP批量检查并清除bom头

Cannot send session cache limiter - headers already sent (output started at...) on line ...

在Windows下用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会在文件头前面加上几个不可见的字符(EF BB BF),就是所谓的BOM(Byte order Mark)

<?php
if (isset($_GET['dir'])) {
    // config the basedir
    $basedir = $_GET['dir'];
} else {
    $basedir = '.';
}

$auto = 1;

checkdir($basedir);

PHP 2017年08月26日 20258

PHP7.1中AES加密解密方法 mcrypt_module_open()替换方案


mcrypt 扩展已经过时了大约10年,并且用起来很复杂。因此它被废弃并且被 OpenSSL 所取代。 从PHP 7.2起它将被从核心代码中移除并且移到PECL中。


PHP手册在7.1迁移页面给出了替代方案,就是用OpenSSL取代MCrypt.

/**
 * [AesSecurity aes加密,支持PHP7.1]
 */
class AesSecurity
{
    /**
     * [encrypt aes加密]
     * @param    [type]                   $input [要加密的数据]
     * @param    [type]                   $key   [加密key]
     * @return   [type]                          [加密后的数据]
     */
    public static function encrypt($input, $key)
    {
        $data = openssl_encrypt($input, 'AES-128-ECB', $key, OPENSSL_RAW_DATA);
        $data = base64_encode($data);
        return $data;
    }
    /**
     * [decrypt aes解密]
     * @param    [type]                   $sStr [要解密的数据]
     * @param    [type]                   $sKey [加密key]
     * @return   [type]                         [解密后的数据]
     */
    public static function decrypt($sStr, $sKey)
    {
        $decrypted = openssl_decrypt(base64_decode($sStr), 'AES-128-ECB', $sKey, OPENSSL_RAW_DATA);
        return $decrypted;
    }
}


可据需求,自行改编。

PHP 2017年08月16日 3733
鄂ICP备19028750号-1 @copyright 2024 tech1024.com