You are here: Re: when memory_get_usage() isn't available to you...? « All PHP « IT news, forums, messages
Re: when memory_get_usage() isn't available to you...?

Posted by petersprc on 01/16/07 01:33

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:
> petersprc wrote:
> > 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/function.memory-get-usage.php#64156 How to
> use memory_get_usage() function in this context
> * @link
> http://groups.google.com/group/comp.lang.php/browse_frm/thread/475095e024649b24/7335b76328c2bab1?lnk=arm#7335b76328c2bab1
> 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;
> }
> }
> }
>
>
> > 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
>
> What do I need to be able to do this? This one lost me.
>
> >
> > 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/function.memory-get-usage.php#64156 How to
> use memory_get_usage() function in this context
> * @link
> http://groups.google.com/group/comp.lang.php/browse_frm/thread/475095e024649b24/7335b76328c2bab1?lnk=arm#7335b76328c2bab1
> 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;
> }
> }
> >
> > 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

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация