Get unique worker/thread/process/request ID in PHP Get unique worker/thread/process/request ID in PHP multithreading multithreading

Get unique worker/thread/process/request ID in PHP


Up until recently, I used apache_getenv("UNIQUE_ID"), and it worked perfectly with a crc32 or another hash function.

Nowadays I'm just using the following, in order to remove dependency on Apache and this mod.

$uniqueid = sprintf("%08x", abs(crc32($_SERVER['REMOTE_ADDR'] . $_SERVER['REQUEST_TIME'] . $_SERVER['REMOTE_PORT'])));

It's unique enough to understand which logs belong to which request. If you need more precision, you can use other hash functions.

Hope this helps.


zend_thread_id():

int zend_thread_id ( void ) 

This function returns a unique identifier for the current thread.

Although:

This function is only available if PHP has been built with ZTS (Zend Thread Safety) support and debug mode (--enable-debug).


You could also try yo call mysql_thread_id(), when you use that API for your database access (or mysqli::$thread_id when using mysqli).


PHP does not seem to have a function for this available, but your web server might be able to pass the identifier via environment variables. There is for example an Apache module called "mod_unique_id"[1] which generates a unique identifier for each request and stores it as an environment variables. If the variable is present, it should be visible via $_SERVER['unique_id'] [2]

"Pure PHP" solution could be to write a script that generates suitable random identifier, stores it via define("unique_id", val) and then use auto_prepend_file [3] option in php.ini to include this in every script that executes. This way the unique id would be created when the request starts processing and it would be available during the processing of the request.