小编zen*_*zen的帖子

Laravel运行多个计划任务

我目前有一个计划的控制台命令,每5分钟运行一次,没有重叠,如下所示:

 $schedule->command('crawler')
             ->everyFiveMinutes()
             ->withoutOverlapping()
             ->sendOutputTo('../_laravel/storage/logs/scheduler-log.txt');
Run Code Online (Sandbox Code Playgroud)

所以它工作得很好,但是我目前有大约220个页面需要大约3个小时才能以5分钟的增量完成,因为我只是强迫它在每个时间间隔抓取10个页面,因为每个页面由于各种各样需要20-30秒来爬行因素.每个页面都是数据库中的记录.如果我最终要抓取10,000个页面,则此方法不起作用,因为它需要超过24小时,并且每个页面应该每天重新抓取一次.

因此,我的供应商最多允许10个并发请求(或更高的计划),那么同时运行它的最佳方式是什么?如果我只是复制调度程序代码,它是否会运行相同的命令两次或者如果我重复它10次运行10次?任何会导致的问题?

然后我需要将参数传递给控制台,如1,2,3等...我可以用它来确定要爬行的页面?即1将是1-10个记录,2个将是接下来的11-20个记录,依此类推.

使用这个StackOverfow答案,我想我知道如何传递它,像这样:

 $schedule->command('crawler --sequence=1')
Run Code Online (Sandbox Code Playgroud)

但是如何在Command班级中阅读该参数?它只是成为一个常规的PHP变量,即$sequence

php laravel laravel-5 laravel-scheduler

10
推荐指数
1
解决办法
4041
查看次数

从表格单元格内容中获取最高编号

我试图从具有特定类的表格单元格中获得最高数字(下面的示例中为8).我假设我必须将它转换为数组,然后对它进行math.max吗?

这是我的HTML代码:

<table>
    <tr>
        <td class="id">3</td>
    </tr>
    <tr>
        <td class="id">8</td>
    </tr>
    <tr>
        <td class="id">4</td>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的,但它只返回384.所以math.max不适用于它.

var varID = $('.id').text();
var varArray= jQuery.makeArray(varID);
alert (varArray);
Run Code Online (Sandbox Code Playgroud)

jquery

8
推荐指数
2
解决办法
7783
查看次数

如何在雅虎的YQL中使用API​​密钥?

我正在使用此YQL命令以XML格式访问股票报价信息.问题是它在一堆命中之后保持超时和拒绝.我想我需要插入我的API密钥,所以它不认为它是机器人.

我正在使用SharePoint来处理XML.

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22AAPL%22)&env=store://datatables.org/alltableswithkeys
Run Code Online (Sandbox Code Playgroud)

这就是极限所说的.

Per application limit (identified by your Access Key): 100,000 calls per day.
Per IP limits: /v1/public/: 1,000 calls per hour; /v1/yql/: 10,000 calls per hour.
Run Code Online (Sandbox Code Playgroud)

我试图获得每天100,000次通话的应用限制.或者我想每小时10,000次通话也很好.有什么建议?谢谢你的帮助.

api sharepoint yql

7
推荐指数
1
解决办法
2855
查看次数

是否只允许从特定页面访问链接?

我正在尝试拥有一个只能从已批准的网站访问的页面,但我不确切知道如何处理它.我是否只需提供一段PHP代码,生成随机密钥并将其附加到URL,该密钥仅对一次访问有效?

或者是否可以在其他域中设置cookie,然后在最终目的地读取?也许它在初始页面上是1px iframe?

或者我只是想做一些永远不会起作用的事情?

javascript php

6
推荐指数
1
解决办法
2229
查看次数

如何设置将存储表格数据的数据库表?

我将有一个拥有数百万个表的网站(带有数据的文字HTML表),所以我需要存储它.我正在努力解决每个表行是否应该作为单独的记录存储在数据库中的问题,或者我是否应该将整个表存储为JSON编码数据(或类似格式).

我质疑这一点的原因是我希望允许用户访问每个HTML表格中的更改数据,并且我希望他们能够仅在一个表格单元格中更改数据,而无需通过编辑整张桌子.

看起来如果我将整个表存储为一个值,只更改一个单元格可能会很麻烦,因为我可能只需要每次替换整个表值而不是进行搜索和替换.但是,如果我将每个表行存储为记录,我将有数十亿条记录可能会快速失控,因为我希望将旧版本保存在存储中(在另一个数据库表中).

如果我将每一行存储为单独的记录,它也必须是超级密码关系,因为HTML表格将包含标题,子标题等.

我做了一些计算,这些是粗略的数字:

〜912个企业总数〜美国平均地点800个〜总表729,600个〜表总排量7200万个

以下是从UI角度看表的工作方式,以便您了解如何处理和操作数据.

表格说明

php mysql

5
推荐指数
1
解决办法
590
查看次数

Laravel有很多方法无法正常工作

我有2张桌子,userswebsites.一个用户可以分配多个网站.

public function websites() {
    return $this->hasMany('App\Models\Website');
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

Object of class Illuminate\Database\Eloquent\Relations\HasMany could not be converted to string

如果我尝试将其作为数组输出,print_r我会得到数百行数组,我假设这是由某个地方的错误引起的.

另外,如果我在模型顶部指定,为什么必须App\Models\WebsitehasMany方法中使用?Useruse App\Models\Website;

如果我只是Website在方法中使用,我得到类找不到错误:

Class 'Website' not found

没什么大不了的,但是不必使用完整的命名空间路径就更清晰了.

控制器中的代码:

<?php namespace App\Http\Controllers;

use DB;
use App\User;

class DashboardController extends Controller {

    /*------------------------------------------------------------------
        Dashboard page
    -------------------------------------------------------------------*/
    public function show() {

        //$user = auth()->user();
        $user = User::find(5);

        return $user->websites();

        //return view('dashboard');
    }

};
Run Code Online (Sandbox Code Playgroud)

php laravel eloquent laravel-5

5
推荐指数
1
解决办法
1万
查看次数

主管工人停止加班并且不重新启动(与laravel一起使用)

我终于设法让supervisord服务运行任何时候使用本教程重启服务器,该部分工作得很好.我进行了设置,以便运行10名工人.问题是当我第二天检查时,其中一些工人已停止并且没有重新启动.服务器也没有重新启动.

这是我的程序在supervisord.conf文件中的设置方式:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command= php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
directory=/home/magic/_app/_laravel
numprocs=10
redirect_stderr=true
autostart=true
autorestart=true
startsecs=0
startretries=10
exitcodes=0,2
stopsignal=TERM
stopwaitsecs=10
stdout_logfile=/home/magic/_app/_laravel/storage/logs/supervisor/supervisor.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=10
stdout_capture_maxbytes=0
stdout_events_enabled=false
user=magic
environment=PATH="/usr/local/bin"
Run Code Online (Sandbox Code Playgroud)

我第一次使用启动服务service supervisord start,然后如果我这样做service supervisord status,它会显示下面的过程.我不完全理解它们,但它看起来正确,因为我的工匠命令有10个实例.

|-17991 /usr/bin/python /usr//bin/supervisord --pidfile /tmp/supervisord.pid
|-17992 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-17993 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-17994 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-17995 php /home/magic/_app/_laravel/artisan queue:listen --queue=high,default --tries=5 --sleep=5 --timeout=600
|-17996 …
Run Code Online (Sandbox Code Playgroud)

supervisord laravel laravel-5

5
推荐指数
1
解决办法
1533
查看次数

在WooCommerce中计算现有订单中的送货方式/费率

我实质上是在尝试复制购物车页面上的功能,用户可以在其中添加他们的商品zip code,并计算可用的运费,但是我试图从后端在已经创建的订单中进行操作。

我找不到直接从WC_Order实例执行此操作的方法,因此,我的下一个优点是清除购物车会话,将订单中的所有项目添加到购物车会话,然后尝试进行计算。

到目前为止,这就是我所拥有的。我一直坚持如何计算整个订单的价格。

$order_id       = isset($_POST['order_id'])?$_POST['order_id']:0;
$country        = isset($_POST['country'])?$_POST['country']:0;
$state          = isset($_POST['state'])?$_POST['state']:0;
$postcode       = isset($_POST['postcode'])?$_POST['postcode']:0;
$city           = isset($_POST['city'])?$_POST['country']:0;
$order          = wc_get_order( $order_id );
$order_items    = $order->get_items();

// Don't know if this would save country of logged in user, or only create a temporary guest user session which is what I'd need
if ( $country != '' ) {
    WC()->customer->set_billing_location( $country, $state, $postcode, $city );
    WC()->customer->set_shipping_location( $country, $state, $postcode, $city );
} else {
    WC()->customer->set_billing_address_to_base();
    WC()->customer->set_shipping_address_to_base(); …
Run Code Online (Sandbox Code Playgroud)

php wordpress orders woocommerce shipping-method

5
推荐指数
1
解决办法
391
查看次数

在MySQL中使用预处理语句是否可以防止SQL注入攻击?

我只想验证在MySQL中使用预处理语句是否会阻止SQL注入.

以下代码是否会阻止所有SQL注入攻击?

$var = $_GET['q']; 
$trimmed = trim($var);
if ($trimmed != NULL) {
  $get_fighters = $DBH->prepare(
    'SELECT * 
    FROM fighters 
    WHERE name LIKE :searchTerm 
      OR nickname LIKE :searchTerm 
      OR born_in_city LIKE :searchTerm
      OR born_in_state LIKE :searchTerm
      OR born_in_country LIKE :searchTerm
      ORDER BY name ASC');
  $get_fighters->bindValue(':searchTerm', '%' . $trimmed . '%', PDO::PARAM_STR);
  $get_fighters->setFetchMode(PDO::FETCH_ASSOC);
  $get_fighters->execute();
  $check_results_fighters = $get_fighters->rowCount();

  $get_events = $DBH->prepare(
    'SELECT * 
    FROM events 
    WHERE event_name LIKE :searchTerm
      OR event_arena LIKE :searchTerm
      OR event_city LIKE :searchTerm
      OR event_state LIKE :searchTerm
      OR …
Run Code Online (Sandbox Code Playgroud)

php mysql pdo sql-injection

4
推荐指数
1
解决办法
458
查看次数

谷歌图表不断重绘内存增加

我每秒都会根据新数据重新绘制图表,它的工作原理看起来很棒,但我注意到它每秒增加1 MB的使用量.有任何解决这个问题的方法吗?我注意到如果我只有静态图表,那么内存稳定,但一旦我添加不断重绘(为了更新数据),内存使用永远不会停止.

起初我以为是因为我每次都在创建一个新的图表实例,所以我改变了代码,所以每次只重绘相同的实例,但这根本没有多大帮助.

谁知道怎么修它?我是否需要先以某种方式转储旧图表?

google.setOnLoadCallback(test);

var chart;
var chartOptions;
var chartCreate;

function test() {
    chart = new google.visualization.DataTable();
    chart.addColumn('string', 'Lorem');
    chart.addColumn('number', 'Ipsum');
    chart.addRows([
            ['', 0]
    ]);
    chartOptions = {};
    chartCreate = new google.visualization.LineChart(document.getElementById('chartDiv'));
          chartCreate.draw(chart, chartOptions);
    ]);
}

function test2() {
    chart.removeRows(0, 5);
    for (var i = 0; i < dataSpaceArray.length; ++i) {
        chart.addRow([dataTimeArray[i], dataSpaceArray[i], dataSpeedArray[i]]);
    }
        chartCreate.draw(chart, chartOptions);
}

setTimeout(test2,1000)
Run Code Online (Sandbox Code Playgroud)

javascript google-visualization

4
推荐指数
2
解决办法
5425
查看次数