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 comp.lang.php on 01/16/07 01:47

petersprc wrote:
> 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

>
> 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

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