
pcntl_fork()を利用して、子プロセスでファイル収集を行い、親プロセスがそのファイルを解析してDBへ登録するといった単純な2並列のプログラムを書いています。
ところが子プロセスが終了した時点でどうもmysqlのコネクションが切れてしまうようなのです。
以下は上記内容を再現した簡易コードです。
$connect = mysql_pconnect("localhost", "user", "password");
//parent
if ($pid = pcntl_fork()) {
// 本当はここで収集されたファイルを順次解析してDBに登録を行う。
sleep(5); // 子が先に終了するように時間差を。
mysql_query($query="use testdb",$session) || die(sprintf("%s : %s\n", $query, mysql_error()));
pcntl_wait($status);
//child
} else {
// 本当はここでファイルを収集する
sleep(1);
exit(0);
}
上記コードは以下のエラーを吐いて終了します。
use testdb : MySQL server has gone away
mysql_pconnectの代わりにmysql_connectを使ったり、mysql_queryの第二引数に$connectを与えても結果は変わりません。
子プロセスが終了してもmysqlとのコネクションを維持しておきたいのですが解決策はあるでしょうか。
ちなみにPHP CLIで実行しています。
OS: Linux
PHP 5.2.4
No.1ベストアンサー
- 回答日時:
親プロセスと子プロセスで同一のコネクションを使用している所に問題があると思います。
$connect = mysql_pconnect("localhost", "user", "password");
//parent
if ($pid = pcntl_fork()) {
:
:
//child
} else {
$connect = mysql_pconnect("localhost", "user", "password");
:
:
exit(0);
}
と、子プロセスは子プロセス側で別途コネクトして使用するか、
親、子、それぞれでDBにコネクトする必要があるかと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
stringaddslashes 半角¥が消える
-
html用とmysql用のエスケープ処...
-
mysql_resultのエラー
-
ユーザーアカウンントの重複を...
-
【PHP】クエリーの実行に失敗し...
-
実行時エラー3131 FROM 句の構...
-
MySQLでデータベースにデータin...
-
PHPで[]の使い方について
-
ラジオボタンをループすること...
-
like検索の複数キーワードで、...
-
mysqlから取得した配列をカンマ...
-
DB Error: no such field
-
チェックボックスの値の受け渡し
-
PEAR でprepareメソッドがエラーに
-
MySqlのテーブルのサイズを取得...
-
MySQLのINSERT時にたまに重複に...
-
アラートでyes noを作りたいです。
-
mysql php 複数のクエリ
-
エクセルをMysqlに格納
-
ヒアドキュメントでSQLを書く事...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
下記エラーメッセージ解決について
-
文字化けするのはなぜですか
-
ループ内に任意行を差し込む処...
-
PHPでMySQLのデータを検索したい
-
Resource id #3 をフィールドの...
-
sqlから多次元配列に要素を格納...
-
テーブルにINSERTができません...
-
MySQLにデータが書き込まれない
-
リストから詳細画面に遷移する...
-
会員登録したらメールが送られ...
-
phpMyadminとPHP上からの違い?
-
データベースから,そのレコー...
-
PHP と Mysql の連携時に発生す...
-
XAMMPが起動しません。
-
DBから同じ文字があるレコード...
-
phpのデータベースを使用したsq...
-
PHP+MYSQL IF文の初歩
-
for文で表示する画像を10件づつ...
-
MySQLのエラー出力
-
次のエラーメッセージ検証 テ...
おすすめ情報