How to use Thread in PHP on Windows - php

I want to use thread in PHP . I am using windows . What needs to be done to do this . Here is the code i am running .
<?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();
?>
When i run the code it shows
Fatal error: Class 'Thread' not found in D:\xampp\htdocs\my.php on line 2
Thanks in advance

It seems like the pthreads extension is not installed on your system.
It's a custom PHP extension not by default installed with XAMPP.
Go fetch it.
You find pthread releases for Windows over at http://windows.php.net/downloads/pecl/releases/pthreads/
Add pthreadVC2.dll to the same directory as php.exe, e.g. C:\xampp\php
Add php_pthreads.dll to PHP extention folder, eg. C:\xampp\php\ext
Then modify php.ini by adding extension=php_pthreads.dll in the extensions section.
The code you posted is a basic example, which should work right out of the box, when the extension is installed.
And a goodie on top:
Video by Joe Watkins explaining "Parallel PHP"

Related

yaml_emit_file() not working. Call to undefined function yaml_emit_file()

The php function yaml_emit_file() is not working. I have installed and included the php_yaml.dll in my php.ini file restarted the server but still when I use this function, I get this error (when I run composer):
Call to undefined function RS\composer\yaml_emit_file()
Okay so a little about the background:
PHP version 7.1.7 & Composer version 1.5.1
I am using this function in a ScriptHandler.php file which is invoked when Composer is run. In this script I have a function buildModuleList which is called on post-update-cmd event of Composer. Everything else in the code is working fine.
I am in doubt that maybe I am using this function in wrong context or something like that.
Here is the code snippet where I am using yaml_emit_file() (Providing this just for reference, tell me if am using it the wrong way!):
if (!$fs->exists($moduleListFile)) {
$fs->touch($root.'/profiles/thunder/modulelist.yml');
$fs->chmod($root . '/profiles/thunder/modulelist.yml', 0666);
if(!empty($moduleList)){
$createyml= yaml_emit_file($moduleListFile, $moduleList);
if (!$createyml){
$io->writeError('<error>Cannot create modulelist.yml</error>');
}
}
$io->write('Success: Created new modulelist.yml', $newline= TRUE);
}
else{
$fs->file_put_contents($moduleListFile, $installedPackage, FILE_APPEND);
$io->write('Success: Module entry in modulelist.yml', $newline= TRUE);
}
i hope this help someone i test it on
Windows 10
XAMPP v3.2.4
PHP 8.0.2
Download the latest YAML DLL Package from : https://pecl.php.net/package/yaml
Unzip the files
Move the php_yaml.dll file to xampp/php/ext folder
Open your php.ini in xampp/php add a new line extension=php_yaml.dll, save and exit
Restart your XAMPP Servers
make a PHP file put into
<?php
phpinfo();
?>
Search the string yaml on the page. If it says Enabled then your YAML Extension is working.

pThreads on Win 7 and Win10

I can't install/add pthreads to my Win7 and Win10 xampp.
I downloaded the release:
http://windows.php.net/downloads/pecl/releases/pthreads/
unpacked the extension dll (php_pthreads.dll) to extension directory and the runtime dll (pthreadVC2.dll) to php directory (same dir as php.exe) and add extension=php_pthreads.dll to my configuration, but still it doesn't work.
What to do?
Thanks for the answer.
Nebojša
Windows supporting threads at all would be news to me. The P in pthreads stands for POSIX, like Unix.
This is a different direction, but perhaps the Windows Subsystem for Linux would be worth investigating. It is supposed to provide a basic degree of POSIX compatibility to a Windows environment.
First,
Did you restart Apache after adding the module ?
If not, you should do it.
Next,
Try the basic php multithreaded program
<?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();
?>
You seem to have followed all the necessary steps. Should be straightforward from there.

PHP: Class 'Thread' not found

I know guys, this question has been answered but belive me before I ask it I followed step by step these two questions but still having the same error.
pthread not working in php
PHP pthreads: Fatal error: Class 'Thread' not found
I have added this line extension=php_pthreads.dll to the php.ini file located in the apache directory C:\wamp\bin\apache\apache2.4.9\bin\php.ini.
Also I have the file pthreadVC2.dll under C:\wamp\bin\apache\apache2.4.9\bin, and the file php_pthreads.dll under C:\wamp\bin\php\php5.5.12\ext.
After that I restarted the wamp server and checked the php_pthreads extension and it's activated.
I did everything as described but still facing this error.
This is my class that extends from Thread:
class MyThread extends \Thread
{
public function run()
{
echo 'This is a thread';
}
}
And this is how I called it:
$myThread = new MyThread();
$myThread->start();
You should use pthreads 2.0.10 for PHP version 5.5.12. You should also try copying pthreadVC2.dll and php_pthreads.dll at your c:/windows/system32 directory.

PHP pthreads: Fatal error: Class 'Thread' not found

I use php5.5 on my webserver. Now I want to use pthreads. Here's my php config: http://dd19010.kasserver.com/infophp.php55
After implementing this 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";
?>
... the problem is this very error: Fatal error: Class 'Thread' not found in.
Do I have to include some include_once or something similar to make it work?
What do I have to do??
Hi I encountered this problem and managed to solve it.
First, consider the VC version of your PHP and the VC version of extension. In mine I attached the extension pthreads.dll with version VC14 from http://windows.php.net/downloads/pecl/releases/pthreads/ but my PHP VC version is VC11. Look for the lower version to match with the VC version of your PHP.
Second, maybe you missed the step #3 at PHP page. It states that you need to copy the pthreadVC2.dll to different folder. Here's the full instruction.
Find out what is your 'PHP Extension Build' version by using phpinfo(). You can use this - http://localhost/?phpinfo=1
Download the pthreads that matches your php version (32 bit or 64 bit) and php extension build (currently used VC11). Use this link for download - http://windows.php.net/downloads/pecl/releases/pthreads/
Extract the zip -
Move php_pthreads.dll to the 'bin\php\ext\' directory.
Move pthreadVC2.dll to the 'bin\php\' directory.
Move pthreadVC2.dll to the 'bin\apache\bin' directory.
Move pthreadVC2.dll to the 'C:\windows\system32' directory.
Open php\php.ini and add
extension=php_pthreads.dll
Reference: https://secure.php.net/manual/en/pthreads.installation.php
1) Create one php file
phpinfo(); --> Run
Example: Info
PHP Version: 5.6.31
Compiler: MSVC11 (Visual C++ 2012)
Architecture: x64
2)Go to website:
http://windows.php.net/downloads/pecl/releases/pthreads/
Example 2.0.9 file
Compiler:VC11
Architecture:x64
php_pthreads-2.0.9-5.6-ts-vc11-x64.zip download.
3)Extract php_pthreads.dll and 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)Now edit php.ini
wamp\bin\apache\apache2.4.27\bin\php.ini\ --> Add extension=php_pthreads.dll
wamp\bin\php\php5.6.31\php.ini\ --> Add extension=php_pthreads.dll
5)Now Restart Wamp
Your phpinfo shows that you have php with thread safety disabled. You need to install a version of php that is thread safe to use pthreads. This may or may not fix your current issue though.
You may need to copy the pthreadsVC2.dll into the bin directory of your web service as well.
/etc/php55/fpm/
You're looking for the folder with php.ini in it.
Make sure the php.ini file has the line added:
extension=php_pthreads.dll
I am using WAMP and found that the pthreadVC2.dll should go to the Apache folder instead:
C:\wamp\bin\apache\apache2.4.9\bin
Unlike what is written in README.md, you don't need to have it in the PHP folder, but the php_pthreads.dll should still go to:
C:\wamp\bin\php\php5.5.12\ext
After this, search in this file:
C:\wamp\bin\apache\apache2.4.9\bin\php.ini
For ;extension=php_pgsql.dll and add extension=php_pthreads.dll in a new line after it (yes, it's the bin\php.ini in the Apache folder, not the one in the PHP folder).
Exit WAMP and start it again. You should now see in WAMP menu under PHP > PHP extensions, the new php_pthreads extension.
I think you need to include the extensions int he php.ini file, because I can't see it in the config. You can see that each library has its own section like MySQL, but there isn't such for the threads. I haven't used threads ever but that should be a good place to start from.
By default Threads are not implemented in PHP, and according to your phpinfo it does not seem to be loaded. Check out the PHP manual on how to set-up/configure the module.

mysql is enabled in php.ini but I'm still getting Call to undefined function mysql_connect()

We have a Windows 2008 server, this morning when we came to the office, we saw that mysql is not working
We are getting this error for a simple connect function
Fatal error: Call to undefined function mysql_connect()
but the strange thing is that mysql extensions are enabled in php.ini file.
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_pdo_mysql.dll
According to phpinfo() , php using the ini file in C:\PHP and the DLL files exist in the ext folder.
I cannot find a way to solve or at least to find out what is causing this.
I would be grateful if someone could give me some advice
Thanks in advance
for debugging purposes try
if ( !function_exists('mysql_connect') ) {
echo '<pre>mysql extension loaded: ', extension_loaded('mysql') ? 'yes':'no', "\r\n";
$cf = get_cfg_var('cfg_file_path');
echo 'ini file: ', $cf, "\r\n";
if ( !$cf || !file_exists($cf) ) {
echo "no config file\r\n";
}
else {
echo "mysql config options:\r\n";
$mc = array_filter( file($cf), function($e) { return false!==stripos($e, 'mysql') && false!==stripos($e, 'extension'); });
echo join("", $mc);
}
die('no function mysql_connect</pre>');
}
the output should be something like
<pre>mysql extension loaded: no
ini file: C:\Develop\php\php.ini
mysql config options:
;extension=php_mysql.dll
;extension=php_mysqli.dll
extension=php_pdo_mysql.dll
no function mysql_connect</pre>
which indicates that the line extension=php_mysql.dll has been commented out (in my php.ini).
In case this script shows that the php_mysql.dll indeed should have been loaded try to increase the log level of both php and your webserver and check the log file. Maybe windows couldn't load the dll because it depends on another dll which isn't present (in the correct version) anymore. E.g. the php_mysql.dll in "my" ext directory depends on MSVCR110.DLL which is present because I have Visual Studio installed, otherwise installing the Visual Studio 2012 redistributables would be required. Tools like Dependency Walker can show you which dlls are required to run an application and/or dll.
Or it could be that the php_mysql.dll implements a different API version than your php core. E.g. if you have PHP 5.4 installed but the php_mysql.dll is for php 5.1 you will see an API magic key error in the log file.
Restart Your WAMP Or XAMPP Server. You can check with Contral Panel of XAMPP Or WAMP

Categories