致命错误:调用未定义的函数 sem_get()

发布于 2024-10-21 06:11:07 字数 342 浏览 0 评论 0原文

我是 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
    ...
}

I'm new to PHP and I'm trying to run code I got from someone else on my Windows development machine. I installed PHP 5 and Apache 2.2, but when I try to run it I get the error:

Fatal error: Call to undefined function sem_get()

The line it's being thrown from is:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

草莓酥 2024-10-28 06:11:08

我不知道这是否会按预期工作,但我找到了 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);
    }
}

另外,我也需要 Windows 上的 ftok

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

I don't know if that will work as expected, but I found a workaround for sem_get on 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);
    }
}

Also, I needed ftok on Windows too:

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));
        }
    }
}
╰ゝ天使的微笑 2024-10-28 06:11:07

sem_get() 函数由信号量、共享内存和 IPC 组件。

引用其手册部分的简介

此扩展程序不适用于
Windows 平台。

The sem_get() function is provided by the Semaphore, Shared Memory and IPC component.

Quoting the introduction of it's manual section :

This extension is not available on
Windows platforms.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文