php 按照laravel5.5,Laravel5.5 综合使用

使用 Laravel5.5 开发一个自动交割的项目,把使用到的开源扩展包及特性整理起来,以供后续使用。

一、安装IDE提示工具

Laravel IDE Helper 是一个极其好用的代码提示及补全工具,可以给编写代码带来极大的便利。

1、安装

# 如果只想在开发环境安装请加上 --dev

composer require barryvdh/laravel-ide-helper

安装 doctrine/dbal 「请装上它,在为模型注释字段的时候必须用到它」

# 如果只想在开发环境安装请加上 --dev

composer require "doctrine/dbal: ~2.3"

三个常用命令

php artisan ide-helper:generate - 为 Facades 生成注释

php artisan ide-helper:models - 为数据模型生成注释

php artisan ide-helper:meta - 生成 PhpStorm Meta file

二、Monolog日志包

日志的重要程度不言而喻, 不管是在开发过程中, 还是部署到生产环境后, 都是经常使用的.

随着 psr-3 的出现, 终于统一了 php 中日志的风格.但是, 好用的记录日志系统, 也很重要.

monolog 是我遇到的最好的日志系统.而且, laravel 中也是用的 monolog。

安装

composer require monolog/monolog

用法

use Monolog\Logger;

use Monolog\Handler\StreamHandler;

// create a log channel

$log = new Logger('name');

$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));

// $logger->pushHandler(new StreamHandler(storage_path() . '/logs/spider.log'));

// add records to the log

$log->warning('Foo');

$log->error('Bar');

三、抓包工具

Guzzle 是一个十分强大的php的模拟HTTP client的第三方库,可以通过composer安装

Goutte 是一个用来解析HTML文档的第三方库,可以通过composer安装

安装

composer require fabpot/goutte

composer require guzzlehttp/guzzle

创建命令

php artisan make:command Spider

命令参数

// concurrency为并发数 keyWords为查询关键词

protected $signature = 'command:spider {concurrency} {keyWords*}';

实战

namespace App\Console\Commands;

use Goutte\Client as GoutteClient;

use GuzzleHttp\Client as GuzzleClient;

use GuzzleHttp\Pool;

use Illuminate\Console\Command;

use Monolog\Logger;

use Monolog\Handler\StreamHandler;

class Spider extends Command

{

private $totalPageCount;

private $counter = 1;

private $concurrency = 7; // 同时并发抓取

private $logger = null;

private $urls = [

'https://www.feixiaohao.com/currencies/bitcoin/', // BTC

'https://www.feixiaohao.com/currencies/decred/', // DCR

];

/**

* The name and signature of the console command.

*

* @var string

*/

protected $signature = 'test:spider-request'; //concurrency为并发数 keyWords为查询关键词

/**

* The console command description.

*

* @var string

*/

protected $description = 'php spider';

/**

* Create a new command instance.

*

* @return void

*/

public function __construct()

{

parent::__construct();

}

/**

* Execute the console command.

*

* @return mixed

*/

public function handle()

{

// 实例化一个日志实例, 参数是 channel name

$logger = new Logger('spider');

$logger->pushHandler(new StreamHandler(storage_path() . '/logs/spider.log'));

$this->totalPageCount = count($this->urls);

$guzzleClent = new GuzzleClient();

$client = new GoutteClient();

$client->setClient($guzzleClent);

$request = function ($total) use ($client){

foreach ($this->urls as $url){

yield function () use($client, $url){

return $client->request('GET',$url);

};

}

};

// @DOC http://docs.guzzlephp.org/en/stable/quickstart.html?highlight=pool

// /Users/kaiyiwang/Code/digcoin/vendor/symfony/dom-crawler/Crawler.php

$pool = new Pool($guzzleClent,$request($this->totalPageCount), [

'concurrency' => $this->concurrency,

'fulfilled' => function ($response, $index) use ($logger){

$res = $response->html();

// print_r($res);

$logger->info($res);

$this->info("请求第 $index 个请求,连接 " . $this->urls[$index]);

$this->countedAndCheckEnded();

},

'rejected' => function ($reason, $index){

$this->error("rejected" );

$this->error("rejected reason: " . $reason );

$this->countedAndCheckEnded();

},

]);

// 开始发送请求

$promise = $pool->promise();

$promise->wait();

}

public function countedAndCheckEnded()

{

if ($this->counter < $this->totalPageCount){

$this->counter++;

return;

}

$this->info("请求结束!");

}

// 运行命令:php artisan test:spider-request

}

> php artisan test:spider-request

bVbfahp?w=682&h=91

四、定时任务

CRON是一个守护进程,它驻留在你的linux服务器中,大部分时间都没有唤醒,但是每一分钟它都会睁开双眼,看看是否运行任何给定的任务,你使用crontab文件与该守护进程通信,在大多数常见的设置文件可以位于/etc/crontab,crontab文件可能看起来像这样:

0 0 1 * * /home/full-backup

0 0 * * * /home/partial-backup

30 5 10 * * /home/check-subscriptions

1.添加系统定时任务

在laravel中添加定时任务很简单,首先在系统crontab 添加一个artisan的定时任务,每分钟执行一次。

> crontab -e

// /home/vagrant/Code/digcoin/ laravel项目在服务器的地址

* * * * * php /home/vagrant/Code/digcoin/artisan schedule:run >> /dev/null 2>&1

bVbfcfV?w=753&h=450

2.项目中添加定时命令

在 App\Console\Kernel 类的 schedule 方法中定义预定的命令:

protected function schedule(Schedule $schedule)

{

// $schedule->command('inspire')

// ->hourly();

// php artisan test:spider-request, 每十分钟调用一次

$schedule->command('test:spider-request')

->everyFifteenMinutes()->withoutOverlapping();

}

添加好了之后,我们可以直接使用这个命令测试定时任务是否可以执行:

> php /home/vagrant/Code/digcoin/artisan test:spider-request

OK,只需要简单的两步便可实现laravel的定时任务添加。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

usb声卡驱动_iCON ProDrive第三代USB声卡驱动全新发布!

2019年3月&#xff0c;iCON官方发布了一款全球首创——全新一代“ProDrive III”USB声卡驱动&#xff0c;iCON所有系列USB声卡(包括带声卡的MIDI键盘)已全面启用ProDrive III &#xff01;iCON ProDrive III由iCON的国际工程师团队微调的高品质模拟元件和电路&#xff0c;可同时…

分数小数互换图_重复控制器学习心得(二)——超前环节的分数化和校正因子的引入...

本文仅作为学习记录&#xff0c;欢迎各位提出宝贵建议1、超前补偿环节的分数化在上周我学习了分数阶RC的实现方式&#xff0c;无独有偶&#xff0c;超前补偿环节也可以应用插值的方式来近似分数阶补偿。整数阶超前补偿的弊端主要有二&#xff1a;一、当采样频率和固定频率的比值…

java中execquery(),javaee登录界面

首先在此之前我们应该正确安装数据库&#xff0c;以及eclipse(javaee)文件包。1.首先在javaee中建立新的项目2.右键点击WebContent-New-JSP File&#xff0c;新建jsp(动态)文件。(想在哪个文件夹里添加jsp文件&#xff0c;就直接右击文件夹新建&#xff0c;注意一定不要展开文件…

电子工程专业评副高总结_微电子科学与工程专业怎么样?

专业简介080704 微电子科学与工程培养目标&#xff1a;本专业培养德、智、体等方面全面发展&#xff0c;具备微电子科学与工程专业扎实的自然科学基础、系统的专业知识和较强的实验技能与工程实践能力&#xff0c;能在微电子科学技术领域从事研究、开发、制造和管理等方面工…

vue if判断_vue循环判断

<!DOCTYPE html> <html><head><meta charset"utf-8"><title>条件与循环</title><script src"https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script></head><body><h1>判断示例<…

显示器驱动有什么用_科普一下:电脑显示器用什么接口好,主流接口有哪些?...

如今是新的“视”界&#xff0c;生活中总与各种屏幕打交道&#xff0c;难免会遇到选择视频接线的问题&#xff0c;要想搞清楚这点&#xff0c;我们只要通过了解现今常用的几种视频接线就会有个大致的认识。经常会有一些朋友困扰&#xff0c;电脑显示器用什么接口最好&#xff0…

更改应用程序图标_在 Windows 10 version 1903 中查看应用程序是否支持 DPI 感知

在显示屏幕上&#xff0c;每英寸点数(DPI)定义构成面板的每个物理单元的像素数。传统上&#xff0c;显示器每英寸输出 96 个像素。但随着技术的发展&#xff0c;各大公司的产品已经开始增加同一物理空间中的像素数&#xff0c;也就造成了屏幕的 DPI 达到 200 甚至更高&#xff…

tina中信号带宽_关于通频带,3dB带宽,三阶截点和1dB压缩点,截止频率,频率范围,带宽,特征频率(中心频率),截止频率和增益(db)...

1、通频带通频带用于衡量放大电路对不同频率信号的放大能力。由于放大电路中电容、电感及半导体器件结电容等电抗元件的存在&#xff0c;在输入信号频率较低或较高时&#xff0c;放大倍数的数值会下降并产生相移。通常情况下&#xff0c;放大电路只适用于放大某一个特定频率范围…

php+控制器+数据库,Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法_PHP...

本文实例讲述了Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;前言&#xff1a;laravel创建数据库&#xff0c;实际可以手动创建&#xff0c;如古老的phpmyadmin 等均可以。一、数据库连接&#xff1a…

64位百度云 catia v6_福利缩水:百度网盘决定收回部分储存空间

近日&#xff0c;百度网盘公众号对外发布公告称&#xff0c;希望通过合理的资源调配&#xff0c;提升闲置空间使用率&#xff0c;让更多有切实需求的用户享受到优质、稳定、安全的个人云存储服务。因此&#xff0c;对百度网盘的存储空间方案做出调整。具体来看&#xff0c;2018…

物流配送系统设计java,ZigBee物流配送系统设计

目前生产系统的物流配送大部分仍处于较落后的状态&#xff0c;使用单位有物料需求时通过电话或邮件与配送单位进行沟通&#xff0c;这种方式存在沟通不及时和缺少数据记录的缺陷。在出现缺料问题时造成无法追究问题的责任单位&#xff0c;容易出现推脱等问题&#xff0c;对管理…

互联网产品生命周期_我市扎实推进全生命周期公共法律服务产品研发

近日&#xff0c;江苏省司法厅公布全省企业全生命周期公共法律服务产品研发评选活动结果&#xff0c;我市司法局、公证处报送的“区块链公证赋强平台”产品&#xff0c;以总分第一的好成绩荣获全省一等奖。近年来&#xff0c;市司法局充分发挥司法行政职能作用&#xff0c;持续…

stripfxg php,zzcms v8.2 中的众多cve分析

看了一下最近的cve列表&#xff0c;发现有大佬怒刷了好多个cve&#xff0c;这个zzcms都快被审穿了&#xff0c;所以跟进学习一下CMS背景本文跟踪的这个cms&#xff0c;属于一个开源招商网站管理系统&#xff0c;属于比较小的cms&#xff0c;所以很多地方写的不是很完善&#xf…

拉普拉斯变换_拉普拉斯变换——奇妙的数学

无奈学不会工程数学中的拉普拉斯变换&#xff0c;没办法去感知他的存在形式&#xff0c;在YOUTOBE上看到一个讲解拉普拉斯变换的视频&#xff0c;好像懂了些&#xff0c;分享给同样迷茫的小伙伴&#xff0c;下载的时候是有字幕的&#xff0c;发到知乎上就没字幕了&#xff0c;英…

没有足够的值_元丰通宝值多少钱吗?市场价值如何?有没有足够的收藏空间?...

元丰通宝是宋代神宗年间发行的&#xff0c;那么你知道现在元丰通宝值多少钱吗&#xff1f;市场价值如何&#xff1f;有没有足够的收藏空间&#xff1f;宋代虽然没有强大的军事实力&#xff0c;但其国内经济水平得到了发展&#xff0c;在许多朝代都处于领先地位。在元丰通宝的铸…

jsp中java代码无效_来杯咖啡,教你如何优雅的在java中统计代码块耗时

推荐阅读&#xff1a;Sping源码RedisNginxMySQL等七篇实战技术文档&#xff0c;阿里大佬推荐阿里内部&#xff1a;2020年全技术栈文档PPT分享&#xff0c;(万粉总结&#xff0c;回馈粉丝)在我们的实际开发中&#xff0c;多多少少会遇到统计一段代码片段的耗时的情况&#xff0c…

linux 随机抽取文件,shell 随机从文件中抽取若干行的实现方法

shuf -n5 main.txtsort -R main.txt | head -5awk -vN5 -vC"wc -l file" BEGIN{srand();while(nwhile read line;do echo "$line $RANDOM";done < main.txt | sort -k2,2n| awk NR<5{print $1}shuf 命令的选项&#xff1a;-e, --echo &#xff1a;将…

http header 设置编码_【译】http.client

本模块实现了HTTP和HTTPS协议的客户端功能。通常本模块不会被直接使用&#xff0c;而是被urllib.request调用&#xff0c;来处理HTTP和HTTPS相关的URL。备注&#xff1a;HTTPS只有在支持SSL(带有ssl模块)的Python编译器里面才是可用的。(一)模块提供的类class http.client.HTTP…

diskgenius linux 分区,DiskGenius怎么分区,DiskGenius分区教程

DiskGenius分区教程方法一&#xff1a;一、首先&#xff0c;打开DiskGenius软件并单击以选择要操作的硬盘驱动器。二、然后右键单击“快速分区”按钮并单击“确定”。方法2&#xff1a;三、选择要操作的硬盘&#xff0c;单击软件上方的硬盘按钮&#xff0c;单击下面列中的快速分…

sql server management studio性能分析_如何分析一条SQL的性能

来自公众号&#xff1a;谭小谭这篇文章将给大家介绍如何使用 explain 来分析一条 sql 。网上其实已经有非常多的文章都很详细的介绍了 explain 的使用&#xff0c;这篇文章将实例和原理结合起来&#xff0c;尽量让你有更好的理解&#xff0c;相信我&#xff0c;认真看完你应该会…