Неустранимая ошибка: вызов неопределенной функции sem_get () - PullRequest
6 голосов
/ 09 марта 2011

Я новичок в PHP и пытаюсь запустить код, полученный от кого-то еще, на моей машине для разработки Windows.Я установил PHP 5 и Apache 2.2, но когда я пытаюсь запустить его, я получаю сообщение об ошибке:

Fatal error: Call to undefined function sem_get()

Строка, из которой он выдается:

private function UpdateCounter($semkey, $memkey, $count)
{
    $sem_h = sem_get($semkey, 1);//this line is the problem
    ...
}

Ответы [ 2 ]

9 голосов
/ 09 марта 2011

Функция sem_get() обеспечивается компонентом Семафор, Общая память и IPC .

Цитирую введение его руководства:

Это расширение недоступно на Платформы Windows.

7 голосов
/ 28 июля 2013

Я не знаю, будет ли это работать должным образом, но я нашел обходной путь для sem_get в Windows :

if (!function_exists('sem_get')) {
    function sem_get($key) {
        return fopen(__FILE__ . '.sem.' . $key, 'w+');
    }
    function sem_acquire($sem_id) {
        return flock($sem_id, LOCK_EX);
    }
    function sem_release($sem_id) {
        return flock($sem_id, LOCK_UN);
    }
}

Кроме того, мне нужно ftok на Windows тоже:

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));
        }
    }
}
...