
January 15th, 2007, 12:15 PM
| | | when memory_get_usage() isn't available to you...?
I wrote my own version of memory_get_usage() if that function is not
available:
[PHP]
if (!function_exists('memory_get_usage')) {
/**
* Determine the amount of memory you are allowed to have
*
* @access public
* @return long
* @link
http://us2.php.net/manual/en/function.memory-get-usage.php#64156
* @see link regarding usage of memory_get_usage() homegrown function
* @see DBActionPerformer
*/
function memory_get_usage() {
// NEW 1/15/2007: EMERGENCY PATCH TO REINTRODUCE DBActionPerformer
if (!class_exists('DBActionPerformer')) {
global $basePath;
if (!class_exists('MethodGeneratorForActionPerformer' ))
require_once("$basePath/include/classes.inc.php");
require_once("$basePath/include/db_action.inc.php");
}
$dbAP =& new DBActionPerformer(); // NO DB ACTION REQUIRED HERE JUST
THE CLASS OBJECT INSTANCE FOR getKommandOSArray() METHOD
list($memKommand, $memRedirect) =
@array_values($dbAP->getKommandOSArray('allowed-memory'));
$outputArray = array();
exec("$memKommand $memRedirect", $outputArray);
if ($_ENV['windir'] || $_SERVER['windir']) {
return preg_replace( '/[\D]/', '', $outputArray[5]) * 1024;
} else {
$outputArray = @explode(' ', $outputArray[0]);
return $outputArray[1] * 1024;
}
}
}
[/PHP]
This function works in *nix and Win XP Pro and Win 2003 Server with no
problems.
However, the dev environment is using Win XP Home with PHP 5.2.0 and
the function is not only not available, my homegrown version breaks as
well because "tasklist" is a DOS program only available to Win XP Pro
and Win 2003 Server, definitely not to XP Home.
Because of this I need another variation of my function but don't have
any idea where to begin to look. "pslist" is also not an option
because the business requirement for the app is that it must be a
dual-functioning (Windows and *nix) PHP PORTABLE web application, so
you have to pack it up and go every time, so having executables along
like "pslist" is not always a viable option.
Suggestions?
Thanx
Phil | 
January 15th, 2007, 07:35 PM
| | | Re: when memory_get_usage() isn't available to you...?
If you were willing to include pslist inside your app's directory, you
could use it only when necessary, thus preserving portability. For
example:
if (substr(PHP_OS,0,3) == 'WIN') {
// Only run pslist on windows
exec(dirname(__FILE__) . '/win/pslist -m ' . getmypid(),
$lines, $rc);
[...]
} else {
// Something else for unix
}
Another way might be to use the win32 API functions and call
GetProcessMemoryInfo from psapi.dll. Here's an example of calling a
win32 function: http://us2.php.net/manual/en/ref.w32api.php#39181
If you have the php_win32ps.dll extension loaded, you can could call
win32_ps_stat_proc(getmypid()).
comp.lang.php wrote: Quote:
I wrote my own version of memory_get_usage() if that function is not
available:
>
[PHP]
if (!function_exists('memory_get_usage')) {
/**
* Determine the amount of memory you are allowed to have
*
* @access public
* @return long
* @link
http://us2.php.net/manual/en/function.memory-get-usage.php#64156
* @see link regarding usage of memory_get_usage() homegrown function
* @see DBActionPerformer
*/
function memory_get_usage() {
// NEW 1/15/2007: EMERGENCY PATCH TO REINTRODUCE DBActionPerformer
if (!class_exists('DBActionPerformer')) {
global $basePath;
if (!class_exists('MethodGeneratorForActionPerformer' ))
require_once("$basePath/include/classes.inc.php");
require_once("$basePath/include/db_action.inc.php");
}
$dbAP =& new DBActionPerformer(); // NO DB ACTION REQUIRED HERE JUST
THE CLASS OBJECT INSTANCE FOR getKommandOSArray() METHOD
list($memKommand, $memRedirect) =
@array_values($dbAP->getKommandOSArray('allowed-memory'));
$outputArray = array();
exec("$memKommand $memRedirect", $outputArray);
if ($_ENV['windir'] || $_SERVER['windir']) {
return preg_replace( '/[\D]/', '', $outputArray[5]) * 1024;
} else {
$outputArray = @explode(' ', $outputArray[0]);
return $outputArray[1] * 1024;
}
}
}
[/PHP]
>
This function works in *nix and Win XP Pro and Win 2003 Server with no
problems.
>
However, the dev environment is using Win XP Home with PHP 5.2.0 and
the function is not only not available, my homegrown version breaks as
well because "tasklist" is a DOS program only available to Win XP Pro
and Win 2003 Server, definitely not to XP Home.
>
Because of this I need another variation of my function but don't have
any idea where to begin to look. "pslist" is also not an option
because the business requirement for the app is that it must be a
dual-functioning (Windows and *nix) PHP PORTABLE web application, so
you have to pack it up and go every time, so having executables along
like "pslist" is not always a viable option.
>
Suggestions?
>
Thanx
Phil
| | 
January 16th, 2007, 01:15 AM
| | | Re: when memory_get_usage() isn't available to you...?
petersprc wrote: Quote:
If you were willing to include pslist inside your app's directory, you
could use it only when necessary, thus preserving portability. For
example:
>
if (substr(PHP_OS,0,3) == 'WIN') {
// Only run pslist on windows
exec(dirname(__FILE__) . '/win/pslist -m ' . getmypid(),
$lines, $rc);
[...]
} else {
// Something else for unix
}
>
| I tried your first suggestion and while it found and installed
pslist.exe with no problems at all, I never retrieved the memory usage,
or any memory usage:
if (!function_exists('memory_get_usage')) {
/**
* Determine the amount of memory you are allowed to have
*
* @access public
* @return long
* @see actual_path
* @link http://us2.php.net/manual/en/functio...sage.php#64156 How to
use memory_get_usage() function in this context
* @link http://groups.google.com/group/comp....35b76328c2bab1
Upgrade to client status of memory_get_usage() for use within Windows
XP Home
*/
function memory_get_usage() {
global $clientFolderPath;
$outputArray = array();
if (($_SERVER['windir'] || $_ENV['windir']) &&
@is_dir(actual_path(realpath("$clientFolderPath/win"))) &&
@is_file(actual_path(realpath("$clientFolderPath/win/pslist.exe")))
) {
exec('"' . actual_path($clientFolderPath) . '/win/pslist" -m ' .
getmypid(), $outputArray, $rc);
print_r(trim(substr($outputArray[8], 38, 10)) . " is your memory\n");
return trim(substr($outputArray[8], 38, 10));
} elseif ($_SERVER['windir'] || $_ENV['windir']) {
exec('tasklist /FI "PID eq ' . getmypid() . '" /FO LIST',
$outputArray);
return preg_replace( '/[\D]/', '', $outputArray[5] ) * 1024;
} else {
exec('ps -o rss -p ' . getmypid(), $outputArray);
return $outputArray[1] * 1024;
}
}
} What do I need to be able to do this? This one lost me. Quote:
>
If you have the php_win32ps.dll extension loaded, you can could call
win32_ps_stat_proc(getmypid()).
| Sorry, no can do here either. win32ps.dll is only available for PHP
5.1.2 and PHP 6.0, there is no version for PHP 5.2.0 publically
available, thus, there is no match and PHP won't install the DLL file
as a result.
if (!function_exists('memory_get_usage')) {
/**
* Determine the amount of memory you are allowed to have
*
* @access public
* @return long
* @see actual_path
* @link http://us2.php.net/manual/en/functio...sage.php#64156 How to
use memory_get_usage() function in this context
* @link http://groups.google.com/group/comp....35b76328c2bab1
Upgrade to client status of memory_get_usage() for use within Windows
XP Home
*/
function memory_get_usage() {
global $clientFolderPath;
$outputArray = array();
if (($_SERVER['windir'] || $_ENV['windir']) &&
extension_loaded('win32ps')) {
return win32_ps_stat_proc(getmypid());
} elseif (($_SERVER['windir'] || $_ENV['windir']) &&
@is_dir(actual_path(realpath("$clientFolderPath/win"))) &&
@is_file(actual_path(realpath("$clientFolderPath/win/pslist.exe")))
) {
print_r(trim(substr($outputArray[8], 38, 10)) . " is your memory\n");
return trim(substr($outputArray[8], 38, 10));
} elseif ($_SERVER['windir'] || $_ENV['windir']) {
exec('tasklist /FI "PID eq ' . getmypid() . '" /FO LIST',
$outputArray);
return preg_replace( '/[\D]/', '', $outputArray[5] ) * 1024;
} else {
exec('ps -o rss -p ' . getmypid(), $outputArray);
return $outputArray[1] * 1024;
}
} Quote:
>
comp.lang.php wrote: Quote:
I wrote my own version of memory_get_usage() if that function is not
available:
[PHP]
if (!function_exists('memory_get_usage')) {
/**
* Determine the amount of memory you are allowed to have
*
* @access public
* @return long
* @link
http://us2.php.net/manual/en/function.memory-get-usage.php#64156
* @see link regarding usage of memory_get_usage() homegrown function
* @see DBActionPerformer
*/
function memory_get_usage() {
// NEW 1/15/2007: EMERGENCY PATCH TO REINTRODUCE DBActionPerformer
if (!class_exists('DBActionPerformer')) {
global $basePath;
if (!class_exists('MethodGeneratorForActionPerformer' ))
require_once("$basePath/include/classes.inc.php");
require_once("$basePath/include/db_action.inc.php");
}
$dbAP =& new DBActionPerformer(); // NO DB ACTION REQUIRED HERE JUST
THE CLASS OBJECT INSTANCE FOR getKommandOSArray() METHOD
list($memKommand, $memRedirect) =
@array_values($dbAP->getKommandOSArray('allowed-memory'));
$outputArray = array();
exec("$memKommand $memRedirect", $outputArray);
if ($_ENV['windir'] || $_SERVER['windir']) {
return preg_replace( '/[\D]/', '', $outputArray[5]) * 1024;
} else {
$outputArray = @explode(' ', $outputArray[0]);
return $outputArray[1] * 1024;
}
}
}
[/PHP]
This function works in *nix and Win XP Pro and Win 2003 Server with no
problems.
However, the dev environment is using Win XP Home with PHP 5.2.0 and
the function is not only not available, my homegrown version breaks as
well because "tasklist" is a DOS program only available to Win XP Pro
and Win 2003 Server, definitely not to XP Home.
Because of this I need another variation of my function but don't have
any idea where to begin to look. "pslist" is also not an option
because the business requirement for the app is that it must be a
dual-functioning (Windows and *nix) PHP PORTABLE web application, so
you have to pack it up and go every time, so having executables along
like "pslist" is not always a viable option.
Suggestions?
Thanx
Phil
| | | 
January 16th, 2007, 01:45 AM
| | | Re: when memory_get_usage() isn't available to you...?
Try running it from the command line first, you may need to click the
license dialog on the first run. Then try printing the $outputLines to
see what you got.
comp.lang.php wrote: Quote:
petersprc wrote: Quote:
If you were willing to include pslist inside your app's directory, you
could use it only when necessary, thus preserving portability. For
example:
if (substr(PHP_OS,0,3) == 'WIN') {
// Only run pslist on windows
exec(dirname(__FILE__) . '/win/pslist -m ' . getmypid(),
$lines, $rc);
[...]
} else {
// Something else for unix
}
| >
I tried your first suggestion and while it found and installed
pslist.exe with no problems at all, I never retrieved the memory usage,
or any memory usage:
>
if (!function_exists('memory_get_usage')) {
/**
* Determine the amount of memory you are allowed to have
*
* @access public
* @return long
* @see actual_path
* @link http://us2.php.net/manual/en/functio...sage.php#64156 How to
use memory_get_usage() function in this context
* @link http://groups.google.com/group/comp....35b76328c2bab1
Upgrade to client status of memory_get_usage() for use within Windows
XP Home
*/
function memory_get_usage() {
global $clientFolderPath;
$outputArray = array();
if (($_SERVER['windir'] || $_ENV['windir']) &&
@is_dir(actual_path(realpath("$clientFolderPath/win"))) &&
>
@is_file(actual_path(realpath("$clientFolderPath/win/pslist.exe")))
) {
exec('"' . actual_path($clientFolderPath) . '/win/pslist" -m ' .
getmypid(), $outputArray, $rc);
print_r(trim(substr($outputArray[8], 38, 10)) . " is your memory\n");
>
return trim(substr($outputArray[8], 38, 10));
} elseif ($_SERVER['windir'] || $_ENV['windir']) {
exec('tasklist /FI "PID eq ' . getmypid() . '" /FO LIST',
$outputArray);
return preg_replace( '/[\D]/', '', $outputArray[5] ) * 1024;
} else {
exec('ps -o rss -p ' . getmypid(), $outputArray);
return $outputArray[1] * 1024;
}
}
}
>
>>
What do I need to be able to do this? This one lost me.
> Quote:
If you have the php_win32ps.dll extension loaded, you can could call
win32_ps_stat_proc(getmypid()).
| >
Sorry, no can do here either. win32ps.dll is only available for PHP
5.1.2 and PHP 6.0, there is no version for PHP 5.2.0 publically
available, thus, there is no match and PHP won't install the DLL file
as a result.
>
if (!function_exists('memory_get_usage')) {
/**
* Determine the amount of memory you are allowed to have
*
* @access public
* @return long
* @see actual_path
* @link http://us2.php.net/manual/en/functio...sage.php#64156 How to
use memory_get_usage() function in this context
* @link http://groups.google.com/group/comp....35b76328c2bab1
Upgrade to client status of memory_get_usage() for use within Windows
XP Home
*/
function memory_get_usage() {
global $clientFolderPath;
$outputArray = array();
if (($_SERVER['windir'] || $_ENV['windir']) &&
extension_loaded('win32ps')) {
return win32_ps_stat_proc(getmypid());
} elseif (($_SERVER['windir'] || $_ENV['windir']) &&
@is_dir(actual_path(realpath("$clientFolderPath/win"))) &&
>
@is_file(actual_path(realpath("$clientFolderPath/win/pslist.exe")))
) {
print_r(trim(substr($outputArray[8], 38, 10)) . " is your memory\n");
>
return trim(substr($outputArray[8], 38, 10));
} elseif ($_SERVER['windir'] || $_ENV['windir']) {
exec('tasklist /FI "PID eq ' . getmypid() . '" /FO LIST',
$outputArray);
return preg_replace( '/[\D]/', '', $outputArray[5] ) * 1024;
} else {
exec('ps -o rss -p ' . getmypid(), $outputArray);
return $outputArray[1] * 1024;
}
} Quote:
comp.lang.php wrote: Quote:
I wrote my own version of memory_get_usage() if that function is not
available:
>
[PHP]
if (!function_exists('memory_get_usage')) {
/**
* Determine the amount of memory you are allowed to have
*
* @access public
* @return long
* @link
http://us2.php.net/manual/en/function.memory-get-usage.php#64156
* @see link regarding usage of memory_get_usage() homegrown function
* @see DBActionPerformer
*/
function memory_get_usage() {
// NEW 1/15/2007: EMERGENCY PATCH TO REINTRODUCE DBActionPerformer
if (!class_exists('DBActionPerformer')) {
global $basePath;
if (!class_exists('MethodGeneratorForActionPerformer' ))
require_once("$basePath/include/classes.inc.php");
require_once("$basePath/include/db_action.inc.php");
}
$dbAP =& new DBActionPerformer(); // NO DB ACTION REQUIRED HERE JUST
THE CLASS OBJECT INSTANCE FOR getKommandOSArray() METHOD
list($memKommand, $memRedirect) =
@array_values($dbAP->getKommandOSArray('allowed-memory'));
$outputArray = array();
exec("$memKommand $memRedirect", $outputArray);
if ($_ENV['windir'] || $_SERVER['windir']) {
return preg_replace( '/[\D]/', '', $outputArray[5]) * 1024;
} else {
$outputArray = @explode(' ', $outputArray[0]);
return $outputArray[1] * 1024;
}
}
}
[/PHP]
>
This function works in *nix and Win XP Pro and Win 2003 Server with no
problems.
>
However, the dev environment is using Win XP Home with PHP 5.2.0 and
the function is not only not available, my homegrown version breaks as
well because "tasklist" is a DOS program only available to Win XP Pro
and Win 2003 Server, definitely not to XP Home.
>
Because of this I need another variation of my function but don't have
any idea where to begin to look. "pslist" is also not an option
because the business requirement for the app is that it must be a
dual-functioning (Windows and *nix) PHP PORTABLE web application, so
you have to pack it up and go every time, so having executables along
like "pslist" is not always a viable option.
>
Suggestions?
>
Thanx
Phil
| | | | 
January 16th, 2007, 01:55 AM
| | | Re: when memory_get_usage() isn't available to you...?
petersprc wrote: Quote:
Try running it from the command line first, you may need to click the
license dialog on the first run. Then try printing the $outputLines to
see what you got.
| Sorry I can't paste it here, my terminal window is being utterly
uncooperative tonight
I do not see the 7th element, I only see 4 elements, the 4th being a
tab-delimited list of numbers
Phil Quote:
>
comp.lang.php wrote: Quote:
petersprc wrote: Quote:
If you were willing to include pslist inside your app's directory, you
could use it only when necessary, thus preserving portability. For
example:
>
if (substr(PHP_OS,0,3) == 'WIN') {
// Only run pslist on windows
exec(dirname(__FILE__) . '/win/pslist -m ' . getmypid(),
$lines, $rc);
[...]
} else {
// Something else for unix
}
>
| I tried your first suggestion and while it found and installed
pslist.exe with no problems at all, I never retrieved the memory usage,
or any memory usage:
if (!function_exists('memory_get_usage')) {
/**
* Determine the amount of memory you are allowed to have
*
* @access public
* @return long
* @see actual_path
* @link http://us2.php.net/manual/en/functio...sage.php#64156 How to
use memory_get_usage() function in this context
* @link http://groups.google.com/group/comp....35b76328c2bab1
Upgrade to client status of memory_get_usage() for use within Windows
XP Home
*/
function memory_get_usage() {
global $clientFolderPath;
$outputArray = array();
if (($_SERVER['windir'] || $_ENV['windir']) &&
@is_dir(actual_path(realpath("$clientFolderPath/win"))) &&
@is_file(actual_path(realpath("$clientFolderPath/win/pslist.exe")))
) {
exec('"' . actual_path($clientFolderPath) . '/win/pslist" -m ' .
getmypid(), $outputArray, $rc);
print_r(trim(substr($outputArray[8], 38, 10)) . " is your memory\n");
return trim(substr($outputArray[8], 38, 10));
} elseif ($_SERVER['windir'] || $_ENV['windir']) {
exec('tasklist /FI "PID eq ' . getmypid() . '" /FO LIST',
$outputArray);
return preg_replace( '/[\D]/', '', $outputArray[5] ) * 1024;
} else {
exec('ps -o rss -p ' . getmypid(), $outputArray);
return $outputArray[1] * 1024;
}
}
} What do I need to be able to do this? This one lost me. Quote:
>
If you have the php_win32ps.dll extension loaded, you can could call
win32_ps_stat_proc(getmypid()).
| Sorry, no can do here either. win32ps.dll is only available for PHP
5.1.2 and PHP 6.0, there is no version for PHP 5.2.0 publically
available, thus, there is no match and PHP won't install the DLL file
as a result.
if (!function_exists('memory_get_usage')) {
/**
* Determine the amount of memory you are allowed to have
*
* @access public
* @return long
* @see actual_path
* @link http://us2.php.net/manual/en/functio...sage.php#64156 How to
use memory_get_usage() function in this context
* @link http://groups.google.com/group/comp....35b76328c2bab1
Upgrade to client status of memory_get_usage() for use within Windows
XP Home
*/
function memory_get_usage() {
global $clientFolderPath;
$outputArray = array();
if (($_SERVER['windir'] || $_ENV['windir']) &&
extension_loaded('win32ps')) {
return win32_ps_stat_proc(getmypid());
} elseif (($_SERVER['windir'] || $_ENV['windir']) &&
@is_dir(actual_path(realpath("$clientFolderPath/win"))) &&
@is_file(actual_path(realpath("$clientFolderPath/win/pslist.exe")))
) {
print_r(trim(substr($outputArray[8], 38, 10)) . " is your memory\n");
return trim(substr($outputArray[8], 38, 10));
} elseif ($_SERVER['windir'] || $_ENV['windir']) {
exec('tasklist /FI "PID eq ' . getmypid() . '" /FO LIST',
$outputArray);
return preg_replace( '/[\D]/', '', $outputArray[5] ) * 1024;
} else {
exec('ps -o rss -p ' . getmypid(), $outputArray);
return $outputArray[1] * 1024;
}
} Quote:
>
comp.lang.php wrote:
I wrote my own version of memory_get_usage() if that function is not
available:
[PHP]
if (!function_exists('memory_get_usage')) {
/**
* Determine the amount of memory you are allowed to have
*
* @access public
* @return long
* @link
http://us2.php.net/manual/en/function.memory-get-usage.php#64156
* @see link regarding usage of memory_get_usage() homegrown function
* @see DBActionPerformer
*/
function memory_get_usage() {
// NEW 1/15/2007: EMERGENCY PATCH TO REINTRODUCE DBActionPerformer
if (!class_exists('DBActionPerformer')) {
global $basePath;
if (!class_exists('MethodGeneratorForActionPerformer' ))
require_once("$basePath/include/classes.inc.php");
require_once("$basePath/include/db_action.inc.php");
}
$dbAP =& new DBActionPerformer(); // NO DB ACTION REQUIRED HERE JUST
THE CLASS OBJECT INSTANCE FOR getKommandOSArray() METHOD
list($memKommand, $memRedirect) =
@array_values($dbAP->getKommandOSArray('allowed-memory'));
$outputArray = array();
exec("$memKommand $memRedirect", $outputArray);
if ($_ENV['windir'] || $_SERVER['windir']) {
return preg_replace( '/[\D]/', '', $outputArray[5]) * 1024;
} else {
$outputArray = @explode(' ', $outputArray[0]);
return $outputArray[1] * 1024;
}
}
}
[/PHP]
This function works in *nix and Win XP Pro and Win 2003 Server with no
problems.
However, the dev environment is using Win XP Home with PHP 5.2.0 and
the function is not only not available, my homegrown version breaks as
well because "tasklist" is a DOS program only available to Win XP Pro
and Win 2003 Server, definitely not to XP Home.
Because of this I need another variation of my function but don't have
any idea where to begin to look. "pslist" is also not an option
because the business requirement for the app is that it must be a
dual-functioning (Windows and *nix) PHP PORTABLE web application, so
you have to pack it up and go every time, so having executables along
like "pslist" is not always a viable option.
Suggestions?
Thanx
Phil
| | | |
Posting Rules
| You may not post new threads You may not post replies You may not post attachments You may not edit your posts HTML code is Off | | | | | | What is Bytes?
We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights.
Get the best answers to your questions from over network members.
|