PHP: ftok - Manual

downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

msg_get_queue Semaphore

Last updated: Fri, 26 Jan 2007

view this page in

# ftok

(PHP 4 >= 4.2.0, PHP 5)

ftok -- Convert a pathname and a project identifier to a System V IPC key

## Description

int ftok ( string pathname, string proj )

The function converts the `pathname` of an existing accessible file and a project identifier (`proj`) into a `integer` for use with for example shmop_open() and other System V IPC keys. The `proj` parameter must be a one character string.

On success the return value will be the created key value, otherwise `-1` is returned.

See also shmop_open() and sem_get().

add a note User Contributed Notes
ftok
mbowie at buzmo dot com
20-Oct-2004 02:41
`If you're planning to use ftok() to generate an IPC identifier to share with other applications, note that PHP uses the ASCII value of the proj parameter to generate the key, not the proj (aka id) parameter itself.
The result of this is that if you're using "1" as the id on the PHP side, you'll need to use 49 elsewhere.
This may not be the case under all OS's, but certainly is for FreeBSD which requires the id parameter passed to ftok to be an int.
Also of note, ipcs and ipcrm are extremely useful for debugging SysV queues etc.
References:
http://www.freebsd.org/cgi/man.cgi?query=ftok
http://www.asciitable.com`
abk at avatartechnology dot com
17-Jun-2004 01:17
`Thanks to daniele_dll@yahoo.it who got this in turn from linux glibc 2.3.2: http://www.php.net/manual/en/function.shmop-open.php -- I'm putting this here because it might be helpful to others.
function ftok($pathname, $proj_id) {
$st = @stat($pathname);
if (!$st) {
return -1;
}
$key = sprintf("%u", (($st['ino'] & 0xffff) | (($st['dev'] & 0xff) << 16) | (($proj_id & 0xff) << 24)));
return $key;
}`
david dot rech at virusmedia dot de
26-May-2004 07:50
`Missing ftok() on Windows? Here's my little workaround:
<?php
if( !function_exists('ftok') )
{
function ftok($filename = "", $proj = "")
{
if( empty($filename) || !file_exists($filename) )
{
return -1;
}
else
{
$filename = $filename . (string) $proj;
for($key = array(); sizeof($key) < strlen($filename); $key[] = ord(substr($filename, sizeof($key), 1)));
return dechex(array_sum($key));
}
}
}?>
NOTE: There *may* be duplicate keys, even if probability is low.
The key's were NOT computed like the original UNIX ftok() because i.e. fileinode() is also missing on windows. Normally ftok() computes a key based on the file inode and the system minor id of the harddrive the file resides.
Behaviour is like PHPs ftok(), -1 is returned if file is missing or $filename is empty, computed int as hex on success.
--
Regards,
David Rech`
kimaz at swecom dot org
02-May-2004 06:35
`You dont have to use ftok() for specifying an System V IPC identifier, though its a good thing to do so.
Passing a regular int to, e.g. msg_get_queue, will have the same effect aslong as you use that value when reading/writing.
I use it for some minor tasks generating small queue's.`
andreyKEINSPAM at php dot net
24-Apr-2004 09:43
`This function is not part neither of ext/sysvsem nor ext/sysvshm but comes with the core functions of PHP (from ext/standard).`
add a note
msg_get_queue Semaphore

Last updated: Fri, 26 Jan 2007
show source | credits | stats | sitemap | contact | advertising | mirror sites
Copyright © 2001-2007 The PHP Group
All rights reserved.
This mirror generously provided by: Yahoo! Inc.
Last updated: Sat Mar 10 11:33:19 2007 PST