|
Posted by petersprc on 01/15/07 19:25
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:
> 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
[Back to original message]
|