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
в другую папку. Здесь полная инструкция.
-
Узнайте, какая у вас версия PHP Extension Build, с помощью phpinfo(). Вы можете использовать это - http://localhost/? Phpinfo = 1
-
Загрузите файлы pthreads, соответствующие вашей версии php (32-разрядной или 64-разрядной) и сборке расширения php (в настоящее время используется VC11). Используйте эту ссылку для загрузки - http://windows.php.net/downloads/pecl/releases/pthreads/
-
Извлеките zip - переместите php_pthreads.dll в каталог "bin\php\ext \". Переместите pthreadVC2.dll в каталог "bin\php \". Переместите pthreadVC2.dll в каталог "bin\apache\bin". Переместите pthreadVC2.dll в каталог "C:\windows\system32".
-
Откройте 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 о том, как настроить/настроить модуль.