ID: 25962
User updated by: liu-shan at mediaring dot com
Reported By: liu-shan at mediaring dot com
-Status: Feedback
+Status: Open
Bug Type: Informix related
Operating System: sun
PHP Version: 4.3.2
New Comment:
Hi, below is a sample, just for your reference.
I created a class call c_informix to fulfill connect to informix db and
insert data to it. I write a php program to call this class to insert
500,000 records into to test table, the program would auto died during
process. If you use some tools such as "top" to monitor this php
program, your could see the value of memory increased very fast. As
normal, after insert one record, the memory should release, but real
thing is the memory not release properly, once you continuous to insert
a large records, the momory goes to large value, system will auto kill
this process.
//==== c_informix.php ===
<?
//test.php
define("CONF_DIR", "/test/cbConf");
define("LOG_DIR", "/test/cbLogs/");
include_once(CONF_DIR.'common.php');
include_once(CONF_DIR.'c_informix.php');
set_time_limit(0);
$t_date = date("Ymd");
$debug_file = LOG_DIR . "ls_debug_" . $t_date . ".log";
$ifmx = new c_informix(DB_NAME, DB_USERNAME, DB_USERPASSWORD);
for ($i=1; $i<1000000; $i++)
{
if (!TestInsert($ifmx, $i, $debug_file))
{
$ifmx->close();
break;
}
}
exit;
function TestInsert($ifmx, $acc, $dbg)
{
$result = true;
$Liststmt = "insert into ls_test (lt_acct, lt_requester,
lt_reasoncode)";
$Liststmt .= " values ('${acc}', 'mmmmm', 7000);";
$ret = $ifmx->insert($Liststmt);
if (!$ret)
{
$fstr = "Error - " . $ifmx->errno() . ", " . $ifmx->error() .
" - " . $Liststmt . " - test_db.php";
WriteToLog($dbg, "daemon", "daemon", $fstr);
$result = false;
echo("error = " . $fstr . "\n\n");
}
return $result;
}
?>
//==== c_informix.php ===
class c_informix
{
// public: current error number and error text
var $ErrNo = "";
var $Error = "";
// private: connection parameters
var $Server = "";
var $Password = "";
var $User = "";
var $Conn = "";
function c_informix ($dbserver = "", $dbuser = "" , $dbpassword =
"")
{
$this->Server = $dbserver;
$this->User = $dbuser;
$this->Password = $dbpassword;
if (!empty($this->Server) && !empty($this->User) &&
!empty($this->Password))
{
$this->connect();
}
}
function connect()
{
$numtries = 50;
$this->Conn = @ifx_connect($this->Server, $this->User,
$this->Password);
while (!$this->Conn && $numtries)
{
usleep(20);
$this->Conn = @ifx_connect($this->Server, $this->User,
$this->Password);
$numtries--;
}
if (!$this->Conn)
{
$this->set_error();
return false;
}
return true;
}
function insert ($sql="")
{
$results = false;
if (empty($sql))
{
$this->set_error("DB0002", "Empty command(s)");
}
else if (!eregi("^insert",$sql))
{
$this->set_error("DB0010", "Syntax
Error--".$sql."--");
}
else if (empty($this->Conn))
{
$this->set_error("DB0001", "Connection not
established");
}
else
{
$results = @ifx_query($sql,$this->Conn);
if ($results)
{
$results = @ifx_affected_rows($results);
}
else
{
$results = false;
$this->set_error();
}
}
return $results;
}
function set_error($errcode = "", $error = "")
{
if(!empty($errcode) && !empty($error))
{
$this->Error = $error;
$this->ErrNo = $errcode;
}
else
{
$this->Error = @ifx_errormsg();
$this->ErrNo = strtok(strstr(ifx_error(), "-"),
"]");
}
return true;
}
// public: returns the last error number
function errno()
{
return $this->ErrNo;
}
// public: returns the last error message
function error()
{
return $this->Error;
}
function close()
{
@ifx_close($this->Conn);
}
}
Previous Comments:
------------------------------------------------------------------------
[2003-10-23 22:48:26] [EMAIL PROTECTED]
Not enough information was provided for us to be able
to handle this bug. Please re-read the instructions at
http://bugs.php.net/how-to-report.php
If you can provide more information, feel free to add it
to this bug and change the status back to "Open".
Thank you for your interest in PHP.
------------------------------------------------------------------------
[2003-10-23 04:40:54] liu-shan at mediaring dot com
Description:
------------
I'm PHP programer, I write web application using PHP connect to
informix database, informix CSDK version 2.7.1, no matter I SELECT,
INSERT OR UPDATE data to database, once program exit, but memory still
that, cannot release. it cause os memory leak, I have to reboot server
frequently.
How can I resolve this problem
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=25962&edit=1