web-dev-qa-db-fra.com

PHP pthreads: erreur irrécupérable: la classe 'Thread' n'a pas été trouvée

J'utilise php5.5 sur mon serveur web. Maintenant, je veux utiliser des pthreads. Voici ma config php: http://dd19010.kasserver.com/infophp.php55

Après avoir implémenté ce code .....

 <?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";

?>

... le problème est cette erreur même: Erreur fatale: la classe 'Fil' n'est pas trouvée dans. Dois-je inclure certains include_once ou quelque chose de similaire pour le faire fonctionner? Que dois-je faire ??

11
ItsMeDom

Bonjour, j'ai rencontré ce problème et j'ai réussi à le résoudre. 

First, considérons la version VC de votre PHP et la version VC d'extension. Dans la mienne, j'ai joint l'extension pthreads.dll à la version VC14 de http://windows.php.net/downloads/pecl/releases/pthreads/ mais ma version PHP VC est VC11. Recherchez la version inférieure qui correspond à la version VC de votre PHP.

Second, vous avez peut-être manqué l'étape 3 à la page PHP. Il est indiqué que vous devez copier le pthreadVC2.dll dans un autre dossier. Voici les instructions complètes.

  1. Découvrez quelle est votre version de 'PHP Extension Build' en utilisant phpinfo (). Vous pouvez utiliser ceci - http: // localhost /? Phpinfo = 1

  2. Téléchargez les pthreads qui correspondent à votre version de php (32 bit ou 64 bit) et à votre extension de php (actuellement utilisé VC11). Utilisez ce lien pour le téléchargement - http://windows.php.net/downloads/pecl/releases/pthreads/

  3. Extrayez le Zip - Déplacez php_pthreads.dll vers le répertoire 'bin\php\ext \' . Déplacez pthreadVC2.dll dans le répertoire 'bin\php \' . Déplacez pthreadVC2.dll dans le répertoire 'bin\Apache\bin' . Déplacez pthreadVC2.dll dans le répertoire 'C:\windows\system32'.

  4. Ouvrez php\php.ini et ajoutez extension = php_pthreads.dll

Référence: https://secure.php.net/manual/fr/pthreads.installation.php

6
Player1

Votre phpinfo montre que vous avez php avec la sécurité des threads désactivée. Vous devez installer une version de php qui soit thread-safe pour utiliser pthreads. Cela peut ou non résoudre votre problème actuel.

Vous devrez peut-être également copier le pthreadsVC2.dll dans le répertoire bin de votre service Web.

/etc/php55/fpm/

Vous recherchez le dossier contenant le fichier php.ini.

Assurez-vous que la ligne a été ajoutée au fichier php.ini:

extension=php_pthreads.dll
5
Kyohei Kaneko

1) Créer un fichier php
phpinfo (); -> Run
Exemple: Info 
Version PHP: 5.6.31
Compilateur: MSVC11 (Visual C++ 2012)
Architecture: x64

2) Aller sur le site internet:
http://windows.php.net/downloads/pecl/releases/pthreads/
Exemple de fichier 2.0.9
Compilateur: VC11 
Architecture: x64 
php_pthreads-2.0.9 -5.6 -ts -vc11 -x64 .Zip téléchargé.

3) Extrayez php_pthreads.dll et pthreadVC2.dll.
wamp\bin\php\php5.6 .31\ext\-> copy php_pthreads.dll
wamp\bin\php\php5.6 .31\-> copy pthreadVC2.dll
wamp\bin\Apache\apache2.4.27\bin -> copy pthreadVC2.dll

4) Maintenant, éditez php.ini
wamp\bin\Apache\apache2.4.27\bin\php.ini\-> Ajouter une extension = php_pthreads.dll
wamp\bin\php\php5.6 .31\php.ini\-> Ajouter extension = php_pthreads.dll

5) Redémarrez maintenant Wamp

2
Murat Çakmak

J'utilise WAMP et trouve que le pthreadVC2.dll devrait plutôt aller dans le dossier Apache:

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

Contrairement à ce qui est écrit dans README.md , vous n'avez pas besoin de l'avoir dans le dossier PHP, mais le php_pthreads.dll devrait quand même aller à:

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

Après cela, recherchez dans ce fichier:

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

Pour ;extension=php_pgsql.dll et ajoutez extension=php_pthreads.dll dans une nouvelle ligne après celle-ci (oui, il s'agit du fichier bin\php.ini du dossier Apache et non du dossier PHP).

Quittez WAMP et redémarrez-le. Vous devriez maintenant voir dans le menu WAMP sous PHP> PHP extensions} _, la nouvelle extension php_pthreads.

1
Armfoot

Par défaut, les threads ne sont pas implémentés en PHP et, selon votre phpinfo, il ne semble pas être chargé. Consultez le manuel PHP pour savoir comment configurer/configurer le module.

0
Paul

Je pense que vous devez inclure les extensions dans le fichier php.ini, car je ne le vois pas dans la configuration. Vous pouvez voir que chaque bibliothèque a sa propre section, comme MySQL, mais il n'en existe pas pour les threads. Je n'ai jamais utilisé de thread, mais cela devrait être un bon point de départ.

0
Hristo Petev