Intereting Posts

pthread не работает в php

Я загрузил DLL-файл PHP Pthreads из http://windows.php.net/downloads/pecl/releases/pthreads/ и включил его в php.ini, как показано ниже:

extension=pthreadVC2.dll extension=php_pthreads.dll 

Я использовал ниже пример кода:

 <?php class AsyncOperation extends Thread { public function __construct($arg){ $this->arg = $arg; } public function run(){ if($this->arg){ printf("Hello %s\n", $this->arg); } } } $thread = new AsyncOperation("World"); if($thread->start()) $thread->join(); 

когда я выполнил код, я получаю следующую ошибку:

Неустранимая ошибка: Class 'Thread' не найден в C: \ htdocs \ threads \ AsyncOperation.php в строке 2 Стек вызовов: 0,0008 333464 1. {main} () C: \ htdocs \ threads \ AsyncOperation.php: 0

Здесь есть два вопроса:

1) Сначала нужно правильно искать расположение файлов DLL. DLL-файлы должны быть размещены следующим образом:

 C:\PHP5\pthreadVC2.dll C:\PHP5\ext\php_pthreads.dll 

и в файле php.ini только php_pthreads.dll должен быть включен как

 extension=php_pthreads.dll 

2) Нужно искать Версии PHP и DLL-файла.

Мой PHP – это VC6 build, а файл dll – VC9. Вот почему модуль не установился. Я узнал эту разницу, используя « php -m ».

Поскольку в DLL-файле нет сборки VC6, я использовал VC9-сборку PHP и использовал pthreads, и программа работает отлично.

Примечание. Вышеупомянутые два решения решили мои проблемы. Но если вы все еще получаете ошибки, проверьте, включены ли отладчики xdebug или zend. Отключите их и повторите попытку.

Если вы установили PHP в другую папку, а не C: / PHP5, полезно добавить pthreadVC2.dll в httpd.conf. В противном случае модуль расширения pthreads не сможет найти его.

 LoadFile "c:/not_default_php5/pthreadVC2.dll" 

ПРИМЕЧАНИЕ. Если после добавления LoadFile все еще Apache не может найти DLL, просто удалите строку Loadfile и скопируйте DLL в папку Apache bin.

 c:/apache_home/bin/pthreadVC2.dll 

Я нашел решение, которое сработало для меня:

Сначала вы должны проверить, что вы загрузили правильный пакет для вашей конкретной системы (версия php, 64/32 бит системы).

После этого вы должны включить соответствующие файлы в несколько мест. Очень важно размещать их в каждом месте, потому что иначе это просто не сработает.

Вы также должны изменить файл php.ini, как описано выше (только для php_pthreads.dll).

Я использовал это с WAMP в 64-разрядной системе Windows 7.