ID: 29479 Comment by: lindsay dot snider at gmail dot com Reported By: black at scene-si dot org Status: Suspended Bug Type: Feature/Change Request Operating System: linux PHP Version: 6CVS New Comment:
Here is a shorter version based off of xdecock's code which has been working well. I see value in having this available when using PHP in CLI mode. ------------------------------------------- #include <php.h> #include <SAPI.h> #include <dlfcn.h> #include <string.h> static char *argv0 = NULL; #define MAX_TITLE_LENGTH 128 void setproctitle(char *title) { char buffer[MAX_TITLE_LENGTH]; int tlen = strlen(title); memset(buffer, 0x20, MAX_TITLE_LENGTH); buffer[MAX_TITLE_LENGTH-1] = '\0'; if( tlen < (MAX_TITLE_LENGTH-1) ) memcpy(buffer, title, tlen); if( argv0 ) snprintf(argv0, MAX_TITLE_LENGTH, "%s", buffer); } void set_proctitle_init() { sapi_module_struct *symbol = NULL; symbol = (sapi_module_struct *)dlsym(NULL, "sapi_module"); if( symbol ) argv0 = symbol->executable_location; } PHP_FUNCTION(setproctitle) { char *title; long tlen; if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",&title, &tlen) == FAILURE) RETURN_FALSE; setproctitle(title); } Previous Comments: ------------------------------------------------------------------------ [2007-06-06 12:54:17] xdecock at gmail dot com I've tried to make a port of the apache thing used for wikipedia to a more generic one. If it can be usefull for anyone (only tested it on cli, as i search the way of doing this for cli primary) Not sure how good is this method, at first seen, it works proctitle.h & config.m4 are almost the same (except for MREQUEST_INIT & MREQUEST_SHUTDOWN), but it is not usefull for CLI the url for those files: http://wikipedia.svn.sourceforge.net/viewvc/wikipedia/trunk/extensions/pecl-proctitle/php_proctitle.h?revision=9174&view=markup #proctitle.c /* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2003 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | [EMAIL PROTECTED] so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: | +----------------------------------------------------------------------+ $Id$ */ #define MAXTITLE 1024 #ifdef HAVE_CONFIG_H #include "config.h" #endif #include <syslog.h> #include "php.h" #include "php_ini.h" #include "SAPI.h" #include "ext/standard/info.h" #include "php_proctitle.h" #include <dlfcn.h> /* If you declare any globals in php_proctitle.h uncomment this: ZEND_DECLARE_MODULE_GLOBALS(proctitle) */ /* True global resources - no need for thread safety here */ static int le_proctitle; static char *proctitle_argv=NULL; static char process_base_name[MAXTITLE+1]; #ifndef HAVE_PROCTITLE void setproctitle(char *title) { if (proctitle_argv){ sprintf(proctitle_argv,process_base_name,title); } } #endif /* {{{ proctitle_functions[] * * Every user visible function must have an entry in proctitle_functions[]. */ function_entry proctitle_functions[] = { PHP_FE(setproctitle, NULL) /* For testing, remove later. */ {NULL, NULL, NULL} /* Must be the last line in proctitle_functions[] */ }; /* }}} */ /* {{{ proctitle_module_entry */ zend_module_entry proctitle_module_entry = { #if ZEND_MODULE_API_NO >= 20010901 STANDARD_MODULE_HEADER, #endif "proctitle", proctitle_functions, PHP_MINIT(proctitle), PHP_MSHUTDOWN(proctitle), NULL, /* Replace with NULL if there's nothing to do at request start */ NULL, /* Replace with NULL if there's nothing to do at request end */ PHP_MINFO(proctitle), #if ZEND_MODULE_API_NO >= 20010901 "0.1", /* Replace with version number for your extension */ #endif STANDARD_MODULE_PROPERTIES }; /* }}} */ #ifdef COMPILE_DL_PROCTITLE ZEND_GET_MODULE(proctitle) #endif /* {{{ PHP_MINIT_FUNCTION */ PHP_MINIT_FUNCTION(proctitle) { sapi_module_struct *symbol; if(!proctitle_argv) { symbol=(sapi_module_struct *)dlsym(NULL,"sapi_module"); if (symbol){ sprintf(process_base_name,"PHP %s: %%s",symbol->name); proctitle_argv=symbol->executable_location; } } setproctitle("php_init"); return SUCCESS; } /* }}} */ /* {{{ PHP_MSHUTDOWN_FUNCTION */ PHP_MSHUTDOWN_FUNCTION(proctitle) { setproctitle("php_deinit"); return SUCCESS; } /* }}} */ /* {{{ PHP_MINFO_FUNCTION */ PHP_MINFO_FUNCTION(proctitle) { php_info_print_table_start(); php_info_print_table_header(2, "proctitle support", "enabled"); php_info_print_table_end(); } /* }}} */ PHP_FUNCTION(setproctitle) { char *string = NULL; int str_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &string, &str_len) == FAILURE) { setproctitle("System: Erreur"); RETURN_NULL(); } setproctitle(string); RETURN_BOOL(1); } /* }}} */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 * vim<600: noet sw=4 ts=4 */ ------------------------------------------------------------------------ [2006-08-22 21:22:51] jdoak at google dot com Is there currently a way to do this in php 5? It doesn't appear that the pecl module listed below is actually around any longer: http://cvs.sourceforge.net/viewcvs.py/wikipedia/extensions/pecl-proctitl e/ and a search for it turned up nothing. I'm just curious if this has been implemented or is this possible now on linux systems? ------------------------------------------------------------------------ [2006-05-15 16:56:36] jerj at coplanar dot net It appears someone has implemented this: http://cvs.sourceforge.net/viewcvs.py/wikipedia/extensions/pecl-proctitle/ I'm going to try and compile it now. ------------------------------------------------------------------------ [2006-02-18 10:39:35] dan812 at hotmail dot com This would be a very nice feature. Using perl you can change $0 variable. PHP do lack this functionality. ---From perlvar doc----- $0 Contains the name of the program being executed. On some (read: not all) operating systems assigning to $0 modifies the argument area that the "ps" program sees. On some platforms you may have to use special "ps" options or a different "ps" to see the changes. Modifying the $0 is more useful as a way of indicating the current program state than it is for hiding the program you're running. (Mnemonic: same as sh and ksh.) Note that there are platform specific limitations on the the maximum length of $0. In the most extreme case it may be limited to the space occupied by the original $0. In some platforms there may be arbitrary amount of padding, for example space characters, after the modified name as shown by "ps". In some platforms this padding may extend all the way to the original length of the argument area, no matter what you do (this is the case for example with Linux 2.2). Note for BSD users: setting $0 does not completely remove "perl" from the ps(1) output. For example, setting $0 to "foobar" may result in "perl: foobar (perl)" (whether both the "perl: " prefix and the " (perl)" suffix are shown depends on your exact BSD variant and version). This is an operating system feature, Perl cannot help it. In multithreaded scripts Perl coordinates the threads so that any thread may modify its copy of the $0 and the change becomes visible to ps(1) (assuming the operating system plays along). Note that the the view of $0 the other threads have will not change since they have their own copies of it. --------------------------- Regards. Daniel <a href="http://www.xcomprar.com/">venda</a> ------------------------------------------------------------------------ [2005-10-06 15:44:30] [EMAIL PROTECTED] Feel free to provide one. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/29479 -- Edit this bug report at http://bugs.php.net/?id=29479&edit=1