全新安装 laravel6,访问时报错:

Declaration of Symfony\Component\Translation\TranslatorInterface::setLocale($locale) must be 

compatible with Symfony\Contracts\Translation\LocaleAwareInterface::setLocale(string $locale)

查看资料发现该问题和环境有关系,解决办法如下:

修改 composer.json 文件, 添加:

"require": {
     ...
     "symfony/translation": "4.3.8",
}

运行

composer update

即可~

一、数据表使用 uuid 作为主键,需要注意哪些事情?

可以在 boot 方法中增加生成 uuid 为主键的方法。如果在生成主键之后需要获取 id,那么需要设置 $incrementing = false。具体如下:

<?php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Uuid;

class Order extends Model
{

    public $incrementing = false;

    /**
     *  Setup model event hooks
     */
    public static function boot()
    {
        parent::boot();
        self::creating(function ($model) {
            $model->id = (string) Uuid::generate(4);
        });
    }
}

二、路由变量含有“/”,该如何定义路由?

有时候,我们需要在路由中传入复杂的变量,比如一段路径,这个时候可以通过在 routeServiceProvider 中定义一个 pattern 来实现变量被正确的解析。

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Route;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;

class RouteServiceProvider extends ServiceProvider
{

    protected $namespace = 'App\Http\Controllers';

    public function boot()
    {
        //
        Route::pattern('path', '[a-zA-Z0-9-_/.:\?]+');
        parent::boot();
    }

}

这样,比如有以下一张动态剪裁的图片,图片的 path 为:

images/201911/bd484d1ef139b1d7f257d6f96baa3ac2.jpeg

构造的 url 为:

http://inspection.test/image/500x335/90/1/c296c89eb4c0fe68/images/201911/bd484d1ef139b1d7f257d6f96baa3ac2.jpeg

路由就可以这样定义了:

Route::get('/image/{width}x{height}/{quality}/{type}/{signature}/{path}', "ImageController@getImage");

三、联表查询中的 where 语句包含联表字段

在处理联表查询时,如果 where 语句中包含联表字段,需要将联表字段用 DB::raw() 进行包裹。

举个例子:

DB::table('trees')
    ->join('tree_types', 'trees.tree_type', '=', 'tree_types.id')
    ->where('trees.status', 1)
    ->where('trees.pick_count', '<', DB::raw("`tree_types`.`pick_limit`"))
    ->update(['trees.production_status' => 1]);

如果 where('trees.pick_count', '<', DB::raw("`tree_types`.`pick_limit`")) 语句中 直接写
where('trees.pick_count', '<', "tree_types.pick_limit"), 你将无法得到希望的查询结果。

一、PBN 是什么?

PBN 是英文 Private Blog Network 的缩写,中文意思大致是“秘密博客网络”,建立多个站点,形成一个网络,然后用这个网络给目标网站建立外链,用于给目标网站的页面增加权重。因为这属于 SEO 作弊,不希望被搜索引擎发现,所以号称是秘密的。

PBN,在国内也被称为站群,是一种高风险高投入高回报的 SEO 手段,属于黑帽SEO的范畴,具有被 Google K站的风险,当然,这种方法所带来的效果也非常明显,是有效的 SEO 高级手段。

但是,不得不说,这条路难度系数也很高,需要很多资源的支持。

二、PBN 的基本原理

那么 PBN 是怎么样给目标网站增加权重呢?

核心思想是这样子:PBN 中的每个站的域名都会有权重。通过在这个站做直接的外链去目标网站的目标页面,就能把这个站本身的权重值传递给目标站。一般是直接用一级外链指向目标网站,为了安全起见,可以选择把站群的外链作为二级外链,从而进一步规避风险。

三、PBN 怎么做?

不得不说,这是一件非常复杂且非常讲究的事情,大体上来说,至少包含以下几个方面:

  1. 购买高权重域名
  2. 购买服务器资源
  3. 制作站点
  4. 部署站点
  5. 通过链接传递权重

删除文件,空间并未释放

linux某个目录空间快满了,删除了若干的文件后,使用 df -h 显示还是快满的,但是 df -h * 显示的总的文件大小又没那么大。

某个进程正在使用删除的文件,导致删除后,空间仍然不能释放。

查看rm掉但是仍被占用的文件的列表,使用如下命令:

lsof |grep -i deleted

再使用 ps -aux | grep pid 查到对应的进程号,关闭进程或者 kill 进程,再次查看空间已释放。

lsof命令是什么?

可以列出被进程所打开的文件的信息。被打开的文件可以是

1.普通的文件
2.目录
3.网络文件系统的文件
4.字符设备文件
5.(函数)共享库
6.管道,命名管道
7.符号链接
8.底层的socket字流,网络socket,unix域名socket
9.在linux里面,大部分的东西都是被当做文件的…..还有其他很多

怎样使用lsof

这里主要用案例的形式来介绍lsof 命令的使用

1.列出所有打开的文件:

lsof

备注: 如果不加任何参数,就会打开所有被打开的文件,建议加上一下参数来具体定位

  1. 查看谁正在使用某个文件

lsof /filepath/file

3.递归查看某个目录的文件信息

lsof +D /filepath/filepath2/

备注: 使用了+D,对应目录下的所有子目录和文件都会被列出

  1. 比使用+D选项,遍历查看某个目录的所有文件信息 的方法

lsof | grep ‘/filepath/filepath2/’

  1. 列出某个用户打开的文件信息

lsof -u username

备注: -u 选项,u其实是user的缩写

  1. 列出某个程序所打开的文件信息

lsof -c mysql

备注: -c 选项将会列出所有以mysql开头的程序的文件,其实你也可以写成 lsof | grep mysql, 但是第一种方法明显比第二种方法要少打几个字符了

  1. 列出多个程序多打开的文件信息

lsof -c mysql -c apache

  1. 列出某个用户以及某个程序所打开的文件信息

lsof -u test -c mysql

  1. 列出除了某个用户外的被打开的文件信息

lsof -u ^root

备注:^这个符号在用户名之前,将会把是root用户打开的进程不让显示

  1. 通过某个进程号显示该进行打开的文件

lsof -p 1

  1. 列出多个进程号对应的文件信息

  lsof -p 123,456,789

  1. 列出除了某个进程号,其他进程号所打开的文件信息

  lsof -p ^1

13 . 列出所有的网络连接

  lsof -i

  1. 列出所有tcp 网络连接信息

  lsof -i tcp

  1. 列出所有udp网络连接信息

  lsof -i udp

  1. 列出谁在使用某个端口

  lsof -i :3306

  1. 列出谁在使用某个特定的udp端口

  lsof -i udp:55

特定的tcp端口

  lsof -i tcp:80

  1. 列出某个用户的所有活跃的网络端口

  lsof -a -u test -i

  1. 列出所有网络文件系统

  lsof -N

20.域名socket文件

  lsof -u

  21.某个用户组所打开的文件信息

  lsof -g 5555

  22. 根据文件描述列出对应的文件信息

  lsof -d description(like 2)

  23. 根据文件描述范围列出文件信息

  lsof -d 2-3

想在 mac 上使用 ubuntu 的共享目录,方便对文件和目录的操作,不知道什么原因通过 smb 不能正常访问。

通过搜索,发现 mac 还提供了一个 afp 协议可以用于共享文件夹。

以下操作可以让 Mac 访问 Ubuntu 中的文件,亲测好用。

在Ubuntu上安装 netatalk

sudo apt-get install netatalk

进行 netatalk 的配置

sudo vim /etc/default/netatalk

找到以下配置语句,去除注释。

ATALKD_RUN=no
PAPD_RUN=no
CNID_METAD_RUN=yes
AFPD_RUN=yes
TIMELORD_RUN=no
A2BOOT_RUN=no

配置分享文件夹

sudo vim /etc/netatalk/AppleVolumes.default

~/                            "Home Directory"
/data/                        "data dir for share"

重启nettalk服务

sudo /etc/init.d/netatalk restart

在Mac上进行连接

atp://192.168.yourip