Phpscript останавливается после 4-го сна

У меня есть файл csv, содержащий данные около 3500 пользователей. Я хочу импортировать этих пользователей в свою базу данных и отправить им электронное письмо о том, что они зарегистрированы. У меня такой код:

public function importUsers()
    {
        $this->load->model('perk/engagement_model');
        $this->load->model('user/users_model');
        $this->load->model('acl/aclUserRoles_model');
        $allengagements = $this->engagement_model->getAll();

        $filename = base_url() . 'assets/overdracht_users.csv';
        $file = fopen($filename, "r");

        $count = 0;
        $totalImported = 0;
        $importFails = array();
        $mailFails = array();
        while (($mappedData = fgetcsv($file, 10000, ";")) !== FALSE)
        {
            $count++;
            //Skip first line because it is the header
            if ($count > 1) {
                if (!empty($mappedData[0])) {
                    $email = $mappedData[0];

                    $user = $this->users_model->getByEmail($email);
                    if (!$user) {
                        $user = new stdClass();
                        $user->email = $mappedData[0];
                        $user->first_name = $mappedData[1];
                        $user->family_name = $mappedData[2];
                        $user->address_line1 = $mappedData[3];
                        $user->address_postal_code = $mappedData[4];
                        $user->address_city = $mappedData[5];
                        $user->address_country = 'BE';
                        $user->volunteer_location = $mappedData[5];
                        $user->volunteer_location_max_distance = 50;
                        $user->phone = $mappedData[6];
                        if (!empty($mappedData[7])) {
                            $user->birthdate = $mappedData[7] . "-01-01 00:00:00";
                        } else {
                            $user->birthdate = null;
                        }
                        foreach ($allengagements as $eng) {
                            if ($eng->description == $mappedData[8]) {
                                $engagement = $eng->engagement_id;
                            }
                        }
                        $user->engagement = $engagement;
                        if (!empty($mappedData[9])) {
                            $date_created = str_replace('/', '-', $mappedData[9]);
                            $date_created = date('Y-m-d H:i:s', strtotime($date_created));
                        } else {
                            $date_created = date('Y-m-d H:i:s');
                        }
                        $user->created_at = $date_created;
                        if (!empty($mappedData[10])) {
                            $date_login = str_replace('/', '-', $mappedData[10]);
                            $date_login = date('Y-m-d H:i:s', strtotime($date_login));
                        } else {
                            $date_login = null;
                        }
                        $user->last_login = $date_login;
                        $user->auth_level = 1;
                        $user->is_profile_public = 1;
                        $user->is_account_active = 1;

                        $combinedname = $mappedData[1] . $mappedData[2];
                        $username = str_replace(' ', '', $combinedname);
                        if (!$this->users_model->isUsernameExists($username)) {
                            $uniqueUsername = $username;
                        } else {
                            $counter = 1;
                            while ($this->users_model->isUsernameExists($username . $counter)) {
                                $counter++;
                            }
                            $uniqueUsername = $username . $counter;
                        }

                        $user->username = $uniqueUsername;

                        $userid = $this->users_model->add($user);
                        if (!empty($userid)) {
                            $totalImported++;
                            //Add the user in the volunteer group in ACL
                            $aclData = [
                                'userID'      => $userid,
                                'roleID'      => 1,
                                'addDate'     => date('Y-m-d H:i:s')
                            ];
                            $this->aclUserRoles_model->add($aclData);

                            //Registration mail to volunteer
                            $mail_data['name'] = $user->first_name . ' ' . $user->family_name;
                            $mail_data['username'] = $user->username;

                            $this->email->from(GENERAL_MAIL, 'Test');
                            $this->email->to($user->email);
                            //$this->email->bcc(GENERAL_MAIL);
                            $this->email->subject('Test');
                            $message = $this->load->view('mail/register/registration',$mail_data,TRUE);
                            $this->email->message($message);

                            $mailsent = $this->email->send();
                            if (!$mailsent) {
                                array_push($mailFails, $mappedData);
                            }
                        } else {
                            array_push($importFails, $mappedData);
                        }

                        if ($count % 50 == 0) {
                            var_dump("count is " . $count);
                            var_dump("we are sleeping");
                            $min=20;
                            $max=40;
                            $randSleep = rand($min,$max);
                            sleep($randSleep);
                            var_dump("end of sleep (which is " . $randSleep . "seconds long)");
                        }
                        var_dump($user);
                    } else {
                        array_push($importFails, $mappedData);
                    }
                }
            }
        }
        var_dump("Totale aantal rijen in het bestand (met header) : " . $count);
        var_dump("Totale aantal geimporteerd in de database : " . $totalImported);
        var_dump("Totale aantal gefaalde imports in de database : " . count($importFails));
        var_dump("Deze zijn gefailed : ");
        var_dump($importFails);
    }

Если я не добавляю пользователей в базу данных или не отправляю письмо, а просто var_dump () $ user, я могу видеть, что все 3500+ пользователей правильно созданы в объектах php (чтобы они могли быть правильно вставлены) .

Проблема в том, что я хочу добавить случайный сон, от 20 до 40 секунд после каждых 50 отправленных мною писем.

Итак, я начал проводить некоторое тестирование и, закомментировав вставку и почтовый код, я начал запускать скрипт, заметив, что после некоторого количества (а не 50 вообще) он просто останавливается на некоторое время, затем продолжает и показывает мне var_dumps в мой футляр if внизу, его можно показать здесь, на скриншотах ниже. Первый снимок экрана показывает, что код ненадолго останавливается (обратите внимание, что я использую только var_dumping, я еще не добавляю что-то в базу данных и не отправляю электронное письмо). Phpscript останавливается после 4-го сна

На этом снимке экрана показано, что происходит после того, как скрипт достигнет 200: Phpscript останавливается после 4-го сна

С этого момента сценарий просто полностью останавливается. Я пробовал это 3 раза, и каждый раз он останавливается ровно на 200. Что здесь происходит??

попробуйте этот ini_set('max_execution_time', 0);

Felix 21.05.2018 13:02

проверьте max_execution_time в своей версии PHP и увеличьте размер.

Muthusamy 21.05.2018 13:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
2
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Скорее всего, вы достигли лимитов PHP по умолчанию. временно удалите ограничения PHP по умолчанию с помощью:

ini_set('memory_limit',-1);
set_time_limit(0);

затем перезапустите скрипт и проверьте результат.

Причин может быть несколько, но чтобы узнать точную, включите вывод ошибок с помощью.

ini_set('display_errors',1);
ini_set('display_startup_errors',1);

и если проблема не в ограничениях, ошибки расскажут вам больше.

ПОДСКАЗКА: использование журналов по-прежнему лучше, чем вывод ошибок для посетителей, но я предполагаю, что вы тестируете это на своем компьютере.

Работает как шарм! Спасибо!

Dennis 21.05.2018 19:01

Другие вопросы по теме