PHP pthreads: Неустранимая ошибка: Class 'Thread' не найден

Я использую php5.5 на своем веб-сервере. Теперь я хочу использовать pthreads. Здесь моя php config: 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";

?>

... проблема в этой ошибке: Неустранимая ошибка: класс "Thread" не найден в. Должен ли я включать некоторые include_once или что-то подобное, чтобы заставить его работать? Что мне делать?

Ответ 1

Привет, я столкнулся с этой проблемой и сумел ее решить.

Сначала рассмотрим VC-версию вашего PHP и VC-версию расширения. В моем приложении я добавил расширение pthreads.dll с версией VC14 от http://windows.php.net/downloads/pecl/releases/pthreads/, но моя версия PHP VC - VC11. Ищите более низкую версию, чтобы соответствовать версии VC вашего PHP.

Во-вторых, может быть, вы пропустили шаг № 3 на странице PHP. В нем говорится, что вам нужно скопировать pthreadVC2.dll в другую папку. Здесь полная инструкция.

  1. Узнайте, какая у вас версия PHP Extension Build, с помощью phpinfo(). Вы можете использовать это - http://localhost/? Phpinfo = 1

  2. Загрузите файлы pthreads, соответствующие вашей версии php (32-разрядной или 64-разрядной) и сборке расширения php (в настоящее время используется VC11). Используйте эту ссылку для загрузки - http://windows.php.net/downloads/pecl/releases/pthreads/

  3. Извлеките zip - переместите php_pthreads.dll в каталог "bin\php\ext \". Переместите pthreadVC2.dll в каталог "bin\php \". Переместите pthreadVC2.dll в каталог "bin\apache\bin". Переместите pthreadVC2.dll в каталог "C:\windows\system32".

  4. Откройте php\php.ini и добавьте расширение = php_pthreads.dll

Ссылка: https://secure.php.net/manual/en/pthreads.installation.php

Ответ 2

Ваша phpinfo показывает, что у вас есть php с отключением потока. Вам нужно установить версию php, которая является потокобезопасной для использования pthreads. Это может или не может исправить вашу текущую проблему.

Возможно, вам придется скопировать pthreadsVC2.dll в каталог bin вашего веб-сервиса.

/etc/php55/fpm/

Вы ищете папку с php.ini в ней.

Убедитесь, что в файле php.ini добавлена ​​строка:

extension=php_pthreads.dll

Ответ 3

1) Создайте один файл php
phpinfo(); → Выполнить
Пример: информация
Версия PHP: 5.6.31
Компилятор: MSVC11 (Visual С++ 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\php 5.6.31\ext\- > скопировать php_pthreads.dll
wamp\bin\php\php 5.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\php 5.6.31\ php.ini\- > Добавить расширение = php_pthreads.dll

5) Теперь перезапустите Wamp

Ответ 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\вн

После этого выполните поиск в этом файле:

C:\WAMP\Bin\Apache\apache2.4.9\Bin\php.ini

Для ;extension=php_pgsql.dll и добавьте extension=php_pthreads.dll в новую строку после него (да, это bin\php.ini в папке Apache, а не в папке PHP).

Выйдите из WAMP и запустите его снова. Теперь вы должны увидеть в меню WAMP в разделе PHP > Расширения PHP, новое расширение php_pthreads.

Ответ 5

Я думаю, вам нужно включить расширения в файл php.ini, потому что я не вижу его в конфиге. Вы можете видеть, что каждая библиотека имеет свой собственный раздел, такой как MySQL, но для потоков не существует. Я никогда не использовал потоки, но это должно быть хорошим местом для начала.

Ответ 6

По умолчанию потоки не реализованы в PHP, и, согласно вашей phpinfo, она не загружается. Ознакомьтесь с руководством PHP о том, как настроить/настроить модуль.