【问题标题】:PHP pthreads: Fatal error: Class 'Thread' not foundPHP pthreads:致命错误:找不到类“线程”
【发布时间】:2014-05-19 01:20:56
【问题描述】:

我在我的网络服务器上使用 php5.5。现在我想使用 pthreads。这是我的 php 配置:http://dd19010.kasserver.com/infophp.php55

实现此代码后.....

 <?php

class AsyncOperation extends Thread
{
    public function __construct($threadId)
    {
        $this->threadId = $threadId;
    }

    public function run()
    {
        printf("T %s: Sleeping 3sec\n", $this->threadId);
        sleep(3);
        printf("T %s: Hello World\n", $this->threadId);
    }
}

$start = microtime(true);
for ($i = 1; $i <= 5; $i++) {
    $t[$i] = new AsyncOperation($i);
    $t[$i]->start();
}
echo microtime(true) - $start . "\n";
echo "end\n";

?>

...问题就是这个错误:致命错误:在中找不到类“线程”。 我是否必须包含一些 include_once 或类似的东西才能使其工作? 我该怎么办??

【问题讨论】:

  • 您确定模块已加载到 PHP 中吗?根据phpinfo,找不到与线程相关的内容。

标签: php multithreading pthreads


【解决方案1】:

您好,我遇到了这个问题并设法解决了。

首先,考虑你的 PHP 的 VC 版本和扩展的 VC 版本。在我的中,我附加了来自http://windows.php.net/downloads/pecl/releases/pthreads/ 的带有版本VC14 的扩展pthreads.dll,但我的PHP VC 版本是VC11。寻找与您的 PHP 的 VC 版本相匹配的较低版本。

第二,也许你错过了 PHP 页面的第 3 步。它指出您需要将pthreadVC2.dll 复制到不同的文件夹。这是完整的说明。

  1. 使用 phpinfo() 找出您的“PHP Extension Build”版本。你可以使用这个 - http://localhost/?phpinfo=1

  2. 下载与您的 php 版本(32 位或 64 位)和 php 扩展构建(当前使用 VC11)匹配的 pthread。使用此链接下载 - http://windows.php.net/downloads/pecl/releases/pthreads/

  3. 解压 - 将 php_pthreads.dll 移动到 'bin\php\ext\' 目录。 将 pthreadVC2.dll 移动到 'bin\php\' 目录。 将 pthreadVC2.dll 移至“bin\apache\bin”目录。 将 pthreadVC2.dll 移至 'C:\windows\system32' 目录。

  4. 打开 php\php.ini 并添加 extension=php_pthreads.dll

参考:https://secure.php.net/manual/en/pthreads.installation.php

【讨论】:

    【解决方案2】:

    1) 创建一个php文件
    phpinfo(); --> 运行
    示例:信息
    PHP 版本:5.6.31
    编译器:MSVC11 (Visual C++ 2012)
    架构:x64

    2)转到网站:
    http://windows.php.net/downloads/pecl/releases/pthreads/
    示例 2.0.9 文件
    编译器:VC11
    架构:x64
    php_pthreads-2.0.9-5.6-ts-vc11-x64.zip下载。

    3)解压php_pthreads.dll 和 pthreadVC2.dll。
    wamp\bin\php\php5.6.31\ext\ --> 复制php_pthreads.dll
    wamp\bin\php\php5.6.31\ --> 复制 pthreadVC2.dll
    wamp\bin\apache\apache2.4.27\bin --> 复制 pthreadVC2.dll

    4)现在编辑 php.ini
    wamp\bin\apache\apache2.4.27\bin\php.ini\ --> 添加扩展=php_pthreads.dll
    wamp\bin\php\php5.6.31\php.ini\ --> 添加扩展=php_pthreads.dll

    5)现在重启 Wamp

    【讨论】:

      【解决方案3】:

      您的 phpinfo 显示您的 php 禁用了线程安全。您需要安装一个线程安全的 php 版本才能使用 pthreads。不过,这可能会也可能不会解决您当前的问题。

      您可能还需要将pthreadsVC2.dll 复制到您的网络服务的 bin 目录中。

      /etc/php55/fpm/
      

      您正在寻找其中包含 php.ini 的文件夹。

      确保 php.ini 文件中添加了以下行:

      extension=php_pthreads.dll
      

      【讨论】:

      • 这是正确的,第一个问题是你正在运行 nts PHP ...先排序 ...
      • 我联系了我的虚拟主机提供商,他们说他们无法提供启用了线程安全的 php……但我非常需要线程……还有其他方法吗?
      • 唯一的办法就是切换 Web 主机。因此,您需要权衡多线程是否对您的项目如此重要以至于值得 Web 主机切换的剧变,或者是否有其他实现可以使用
      • 好吧@KyoheiKaneko,你知道php中的其他线程选项吗?
      • 我不相信有任何其他多线程选项可用于 php afaik。如果有的话,它们极有可能还需要线程安全。如果你需要多线程,你需要线程安全的 php。
      【解决方案4】:

      我正在使用 WAMP,发现 pthreadVC2.dll 应该转到 Apache 文件夹:

      C:\wamp\bin\apache\apache2.4.9\bin

      README.md 中写的不同,您不需要将它放在 PHP 文件夹中,但 php_pthreads.dll 仍应转到:

      C:\wamp\bin\php\php5.5.12\ext

      之后,在这个文件中搜索:

      C:\wamp\bin\apache\apache2.4.9\bin\php.ini

      对于;extension=php_pgsql.dll 并在其后的新行中添加extension=php_pthreads.dll(是的,它是Apache 文件夹中的bin\php.ini,而不是PHP 文件夹中的那个)。

      退出 WAMP 并重新启动它。您现在应该在 PHP > PHP extensions 下的 WAMP 菜单中看到新的 php_pthreads 扩展。

      【讨论】:

      • 谢谢!现在我可以在我的 Windows 环境中加载 pthreads 扩展。真诚地,我不明白为什么 dll 应该进入 apache 文件夹而不是 php 文件夹,但它可以工作:-)
      【解决方案5】:

      我认为您需要在 php.ini 文件中包含扩展名,因为我在配置中看不到它。您可以看到每个库都有自己的部分,如 MySQL,但线程没有。我从来没有使用过线程,但这应该是一个很好的起点。

      【讨论】:

        【解决方案6】:

        默认情况下,线程没有在 PHP 中实现,根据你的 phpinfo,它似乎没有被加载。查看PHP manual,了解如何设置/配置模块。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-03-20
          • 2022-01-02
          • 2013-09-27
          • 2013-08-16
          • 2016-08-21
          • 2014-05-08
          • 2012-08-02
          • 2012-01-02
          相关资源
          最近更新 更多