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;一、当采样频率和固定频率的比值…

php密码怎么用md5,如何使用PHP使用MD5加密此密码?

下面的代码来自一个用PHP编写的登录脚本.它检查密码的数据库不使用MD5加密密码,但是当登录脚本检查数据库中的密码时,它正在检查原始密码而不加密.我熟悉md5()函数但是如何将其合并到以下内容中:session_start();$username $_POST[username];$password $_POST[password];if (…

python嵩天课后题及答案第二章_课后参考答案-第二章部分习题参考答案

习题21-7题&#xff0c;见教材相关章节内容。8&#xff0e;Job1与Job2同时到达&#xff0c;根据短作业优先算法&#xff0c;这时应该先执行Job2&#xff0c;Job2执行完毕时9.0&#xff0c;系统中有job1与job3两个作业&#xff0c;job3较短&#xff0c;所以先执行job3&#xff0…

java中execquery(),javaee登录界面

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

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

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

php预处理获取改变行数,php – 使用MySQLi预处理语句时无法获取行数...

如果要使用mysqli_stmt :: $num_rows(即,检查预准备语句中的行数),则需要在执行预准备语句之后使用$stmt-> store_result(),然后才能检查其数量行.这意味着在我们检查返回的行数之前,结果存储在内存中.$stmt $conn->prepare($sql);$stmt->bind_param(ss,$log_usernam…

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>判断示例<…

java的一些题目,一些Java题目

1.String str new String("abc"); 请问定义了几个对象。定义了两个对象&#xff0c;一个"abc", 一个是new String().2.面向对象的东西&#xff1a;abstract & interface的各自的作用&#xff0c;区别。3.面向对象的特征&#xff0c;以及怎么实现的。1…

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

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

php-cgi并发,对于php-fpm和cgi,还有并发响应的理解

参考链接&#xff1a;首先搞清楚php-fpm与cgi的关系cgicgi是一个web server与cgi程序(这里可以理解为是php解释器)之间进行数据传输的协议&#xff0c;保证了传递的是标准数据。php-cgiphp-cgi是php解释器&#xff0c;就是上文提到的cgi程序。FastcgiFastcgi是用来提高cgi程序(…

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

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

python程序分析,用Python编写分析Python程序性能的工具的教程

用Python编写分析Python程序性能的工具的教程来源&#xff1a;中文源码网 浏览&#xff1a; 次 日期&#xff1a;2018年9月2日【下载文档: 用Python编写分析Python程序性能的工具的教程.txt 】(友情提示:右键点上行txt文档名->目标另存为)用Python编写分析Python程序…

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;持续…

php本地文件打包代码,PHP实战:几行代码轻松实现PHP文件打包下载zip

《PHP实战&#xff1a;几行代码轻松实现PHP文件打包下载zip》要点&#xff1a;本文介绍了PHP实战&#xff1a;几行代码轻松实现PHP文件打包下载zip&#xff0c;希望对您有用。如果有疑问&#xff0c;可以联系我们。PHP应用//获取文件列表function list_dir($dir){$result arra…

python的django项目中怎么添加app_django下如何创建多个app并设置urls

1、创建第二个app假设我们项目P下面已经有了一个默认的app&#xff0c;名字是app1。现在我想创建第二个app&#xff0c;名字时app2。进入pychram下的Terminal中&#xff0c;运行命令&#xff1a;python manage.py startapp app2此外&#xff0c;我在每个app下都建立一个urls.py…