2013-10-25 3 views
0

У меня есть этот скрипт php, который работает довольно долго, но через некоторое время (из-за ограничения браузера, когда он перестает загружать страницу) он прекращает выполнение кода.Сценарий Laravel перестает работать через некоторое время

В основном, это выбор из 10000 статей с использованием API и их хранение по одному в моей собственной БД. После зацикливания примерно 1200+ статей значок разворота/загрузки Google Chrome останавливается, и все, что я возвращаю взамен, - это пустая страница. Когда я проверяю БД, я могу видеть результаты в БД, но, тем не менее, сценарий не перебирал все статьи, как должен, и он остановился.

Я знаю, что работа с CLI удалит ограничение по времени браузера по умолчанию, когда оно перестанет загружаться, но я не знаю как сделать вызов определенного метода контроллера в Laravel из командной строки?

ответ

1

Так как вы на самом деле высева к БД, быстрый и грязный способ заключается в использовании БД: семена, чтобы сделать это для вас:

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

+0

Да, ха-ха, но посев был бы здесь обманом. Я думаю, что сделать команду Artisan и переместить код с контроллера на команду - это путь. –

+0

Да, если это одно время, вы обманываете, чтобы все было сделано, все в порядке, но если вы будете использовать это каждый день, Artisan Command - это путь. –

+0

Да, на самом деле это должен быть сценарий cron-job. –

0
  1. удалить лимит времени ожидания с веб-сервера (в основном из конфигурационного файла)
  2. Используйте set_time_limit(0), чтобы заставить PHP выполнить свой код для неограниченного количества времени.
+0

Я сделал это, и это устранило ошибку PHP при достижении максимального времени выполнения 30 секунд. Но это не ошибка PHP, я больше не получаю никаких ошибок, код работает нормально. Это браузер, где он просто останавливается через определенное время. Я делал то же самое, но при программировании процедур и через браузер я получал бы ту же ошибку, но, выполняя ее из командной строки, скрипт завершил бы ее работу. Теперь, когда я делаю это через Laravel, мне нужно знать, как сделать вызов метода контроллера через командную строку. –

+0

@ ToniPerić Это может звучать как взломать, но попробовали ли вы просить маршрут к вашему классу/методу из командной строки, а затем сохранили его в текстовом файле? Например (в wget-установленных системах Linux) 'wget http://example.com/{route_to_method}> output.txt' – Abdulaziz

+0

Хорошо, я уже пробовал, и к сожалению, он не работает. Спасибо за усилие! Что я могу сделать, это просто переместить весь код с контроллера в командную строку, но тогда у меня будет тот же код в двух местах. Резервирование. –

2

Сделайте команду Artisan. Смотрите документацию на http://laravel.com/docs/commands

+0

Я уже проверил эту ссылку, но, видимо, я не могу позвонить на конкретный ** контроллер **. В основном вы могли только получить доступ к моделям из того, что я понял. –

Смежные вопросы