【问题标题】:Laravel script stops running after some timeLaravel 脚本在一段时间后停止运行
【发布时间】:2013-10-25 21:39:42
【问题描述】:

我有这个 php 脚本运行了很长一段时间,但过了一段时间(由于浏览器限制,当它停止加载页面时)它停止执行代码。

基本上,它的作用是使用 API 获取 10000 篇文章,并将它们一一存储在我自己的数据库中。在循环了大约 1200 多篇文章后,谷歌浏览器的旋转/加载图标停止了,我得到的只是一个空白页。当我检查数据库时,我可以在数据库中看到结果,但是脚本并没有按应有的方式遍历所有文章并且它停止了。

我知道从 CLI 运行会在停止加载时删除默认的浏览器时间限制,但我不知道如何从命令行调用 Laravel 中的某个控制器方法 ?

【问题讨论】:

    标签: command-line laravel


    【解决方案1】:

    发出 Artisan 命令。请参阅http://laravel.com/docs/commands 上的文档

    【讨论】:

    • 我已经检查了该链接,但显然我无法调用特定的 controller 方法。你基本上只能访问我所理解的模型。
    【解决方案2】:

    由于您实际上是在为数据库播种,一种快速而肮脏的方法是使用 db:seed 为您做这件事:

    class MyTableSeeder extends Seeder {
    
        public function run()
        {
    
                // Do whatever you need to
    
        }
    
    }
    

    在 DatabaseSeeder 上启用它:

    class DatabaseSeeder extends Seeder {
    
        public function run()
        {
            $this->call('MyTableSeeder');
        }
    
    }
    

    并执行它:

    php artisan db:seed
    

    更好的方法是创建 Artisan Command。这是我写的另一个答案来教如何创建它:Select all rows with a date of right now

    【讨论】:

    • 是的哈哈,但是在这里播种有点作弊。我想制作一个 Artisan 命令并将代码从控制器移动到命令将是可行的方法。
    • 是的,如果它是一次性的,你可以通过欺骗来完成任务,但如果你每天都使用它,Artisan Command 是最好的选择。
    • 是的,它实际上应该是一个 cron-job 脚本。
    • 我写的那个答案也有关于 cron 的信息。看看吧。
    • 哦,看起来不错。谢谢!
    【解决方案3】:
    1. 从网络服务器中删除超时限制(主要来自配置文件)
    2. 使用set_time_limit(0) 强制 PHP 无限期地执行您的代码。

    【讨论】:

    • 我已经这样做了,当它达到 30 秒的最大执行时间时,它消除了 PHP 错误。但这不是 PHP 错误,我不再收到任何错误,代码运行良好。这是一个浏览器的事情,它会在一段时间后停止。我做了同样的事情,但是在程序编程和通过浏览器编程时,我会得到同样的错误,但是当从命令行执行时,脚本会完成它的工作。现在我是通过 Laravel 进行的,我需要知道如何通过命令行调用控制器方法。
    • @ToniPerić 这听起来像是一个 hack,但您是否尝试过从命令行请求到您的类/方法的路由,然后将其保存在文本文件中?例如(在安装 wget 的 Linux 系统上)wget http://example.com/{route_to_method} > output.txt
    • 好主意,我已经尝试过了,不幸的是它不起作用。不过感谢您的努力!我能做的只是将所有代码从控制器移动到命令行,然后我将在两个地方拥有相同的代码。冗余问题。
    猜你喜欢
    • 2013-12-21
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    相关资源
    最近更新 更多