fork + PHP CodeIgniter: «Сервер MySQL ушел» — Как не потерять соединение при разветвлении с CI?

Я установил fork на свой сервер Ubuntu (используя PHP-Apache-Codeigniter).

У меня есть этот код:

<?php

public function add_keyword() {

$keyword_p = $this->input->post('key_word');

$prod      = $this->input->post('prod_name');
$prod      = $this->kas_model->search_prod_name($prod);
$prod      = $prod[0]->prod_id;

$country   = $this->input->post('key_country');

$keyword = explode(", ", $keyword_p);
var_dump($keyword);
$keyword_count = count($keyword);
echo "the keyword count: $keyword_count";

// Create   fork
$pid = pcntl_fork();
if(!$pid){

for ($i=0; $i < $keyword_count ; $i++) {

// Inserts the inputs to the "keywords" table
$this->kas_model->insert_keyword($keyword[$i], $prod, $country);

// Gets relevant IDs for the inserted prod and keyword
$last_inserted_key = $this->kas_model->get_last_rec('keywords');
$keyword_id        = $last_inserted_key[0]->key_id;
$prod_id           = $last_inserted_key[0]->key_prod;
$prod_id_query     = $this->kas_model->get_prod_row_by_id($prod_id);
$prod_id_a  = $prod_id_query[0]->prod_a_id;
$prod_id_b  = $prod_id_query[0]->prod_b_id;

// Run the keyword query (on API) for today on each one of the keys and insert to DB aslong that the ID isn't 0.
if ( ($prod_id_a != 0) || ( !empty($prod_id_a) ) ) {
$a_tdr = $this->get_var1_a_by_id_and_kw( $prod_id_a, $keyword[$i], $country);
} else {
$a_tdr['var1'] = 0;
$a_tdr['var2'] = 0;
$a_tdr['var3'] = 0;
}

if ( ($prod_id_b != 0) || ( !empty($prod_id_b) ) ) {
$b_tdr = $this->get_var1_b_by_id_and_kw($prod_id_b, $keyword[$i], $country);
} else {
$b_tdr['var1'] = 0;
$b_tdr['var2'] = 0;
$b_tdr['var3'] = 0;
}

$this->kas_model->insert_new_key_to_db($keyword_id, $a_tdr['var1'], $b_tdr['var1'], $a_tdr['var2'], $b_tdr['var2'], $a_tdr['var3'], $b_tdr['var3']);

}
exit($i);
}redirect('main/kas');
}

Что делает функция: эта функция получает 1 или более ключевых слов / с, переменную страны и идентификатор продукта, а также выполняет запрос к внешнему медленному API, получающему переменные (запускает другие функции из этого же контроллера), и добавляет их в база данных.

Решение: при запуске этой функции, и если я вставляю много ключевых слов, страница загружается, загружается и загружается в течение длительного времени, пока это не будет сделано, и только после этого — я смогу продолжить просмотр своего веб-сайта. Поэтому мне сказали, чтобы он разветвлялся, так как он просто отправляет запрос на обработку в фоновом режиме, поэтому, когда я нажимаю кнопку отправки, меня перенаправляют на «main / kas».

В настоящее время: я отключаю соединение MySQL с этой ошибкой:

Сервер MySQL ушел

Но со вставкой 1 вар из всего процесса.

Что я трое до сих пор: Как сказано в этом комментарии:
http://www.php.net/manual/en/function.pcntl-fork.php#70721

Я должен переподключиться к моей БД в родительском, и это должно решить проблему.
Я нашел этот пост с 2009 года тоже: внезапный "Сервер MySQL ушел" ошибка на сайте PHP

Поэтому я продолжил свое «если» этим:

// parent
} else if ( $pid ) {
$this->load->database();
$this->db->reconnect();
}

Я пытался добавить это в конце ребенка тоже (разочарование) и во всех видах вариаций (обычный $link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");) — безуспешно.

Даже пытался использовать только $this->load->database(); или только $this->db->reconnect();,

Какое решение для этого, это так расстраивает: ‘(

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]