Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让pthread在PHP中工作?_Php_Multithreading_Pthreads - Fatal编程技术网

如何让pthread在PHP中工作?

如何让pthread在PHP中工作?,php,multithreading,pthreads,Php,Multithreading,Pthreads,我正在使用wampserver在本地计算机上测试和运行wordpress代码。为了运行pthread,我遵循了以下步骤: 1) 我从中获得了pthread zip文件 (我的机器有PHP5.3.13,并从上面的链接下载了phppthreads-0.44-5.3-ts-vc9-x86.zip文件) 2) 解压缩了zip文件。将php_pthreads.dll移动到C:\wamp\bin\php\php5.3.13\ext目录 3) 将pthreadVC2.dll移动到C:\wamp\bin\php

我正在使用wampserver在本地计算机上测试和运行wordpress代码。为了运行pthread,我遵循了以下步骤:

1) 我从中获得了pthread zip文件 (我的机器有PHP5.3.13,并从上面的链接下载了
phppthreads-0.44-5.3-ts-vc9-x86.zip文件)

2) 解压缩了zip文件。将php_pthreads.dll移动到
C:\wamp\bin\php\php5.3.13\ext
目录

3) 将pthreadVC2.dll移动到
C:\wamp\bin\php\php5.3.13
目录


4) 然后打开
C:\wamp\bin\php\php5.3.13\php.ini
,并在文件开头添加代码
扩展名=php_pthreads.dll

但当我尝试运行以下代码时:

<?php
class My extends Thread {
    public function run() {
        printf("%s is Thread #%lu\n", __CLASS__, $this->getThreadId());
    }
}
$my = new My();
$my->start();
?>

它给了我以下错误:

致命错误:在第2行的C:\wamp\www\wp admin\includes\post.php中找不到类“Thread”


你能告诉我如何在我的计算机上安装pthreads来与php一起使用吗?我需要安装其他软件吗

检查php.ini文件中的
扩展名\u dir=“ext”
。确保它指向扩展所在的文件夹,并且确保它没有被注释(它前面有一个分号

我注意到wampserver在两个不同的地方有php.ini。一个位置是/wamp/bin/php/php5。。。目录,另一个位置在/wamp/bin/apache/apache…/bin目录中(其中“…”表示版本号)。这两个文件需要完全相同,因为整个wampserver启动过程显然在不同的时间加载这两个文件

(注意,我是最近才发现这一点的,并且可能在使用wampserver做一些奇特的事情时“落后于曲线”——也许其他人已经处理这两个文件很长时间了。所以我不知道这个简单的事情是否能解决您的问题;我来这里是想了解一些关于做一些多线程事情的信息。:)

还有一件事。根据此页面:www.php.net/manual/en/pthreads.requirements.php PHP必须使用“-enable zts”进行编译,才能使pthreads工作。我还没有找到任何证据表明wampserver的PHP部分是以这种方式编译的


(几个月后) 我已经决定不需要立即做任何线程的事情,我继续做其他的事情,直到需要真正出现。现在我可以说编译到WampServer中的PHP版本确实支持“pthread”扩展,尽管首先需要进行一些设置工作。我看到的说明中提到将几个.dll文件(下载并解压缩后)放在某些地方,但这对我不起作用。将它们复制到\Windows\System32目录确实有效。(将它们放入\apache…\bin目录也可以;其中还有一些其他php.dll文件。)

之后,就像您所做的一样,有必要定义一个扩展“线程”类的“类”,以便在另一个线程中实际执行某些操作。Thread类中的“run()”函数是“抽象的”,需要作为扩展类中的实际函数“实现”。然后,“new”操作符可以创建一个“instance”,即指定类的对象,以供实际使用。这是我需要的课程:

//Purpose: Use another thread to run the code in another php file, after a delay
class xT extends Thread
{ var $fil, $tim;

  function savWhatWhen($f="", $t=0)
  { $this->fil = $f;                    //save What, file to process
    $this->tim = $t;                    //save When, delay before processing file
    return;
  }

  function run()
  { ini_set('max_execution_time', 600); //600 seconds = 10 minutes
    sleep($this->tim);                  //do a delay; beware of max-exec-time!
    include($this->fil);                //load file-to-process, and process it
    return;
} }
“savWhatWhen()”函数是专门为基本线程类的这个扩展创建的。下面是使用该类的一些代码:

  $TH = new xT();                                    //prepare a separate Thread
  $TH->savWhatWhen("d:/wamp/myscripts/test.php", 45);//file-name and delay time
  $TH->start();                                      //after delay, process file
  //the code that does this can terminate, while OTHER thread is doing a delay
注意:对于任何复制此代码的人,您可能需要确保php.ini中的“open_basedir”设置允许访问指定的文件


几个月后:由于有很多工作正在进行,我没有花太多时间使用pthread对象。我确实遇到了一个怪癖,它让我怀疑我是否能够按照我所希望的方式使用pthreads。以下是我观察到的情况: 1.AJAX调用一个初始php文件来执行某些操作。 2.Web服务器上的PHP处理器就是这样做的。 3.各种数据都应该被回送到浏览器上。 4.初始php文件调用创建另一个线程,并终止。 5.浏览器尚未接收回显数据! 6.Web服务器上的PHP处理器执行委托给第二个线程的工作。 7.当第二个线程终止时,现在浏览器接收回显数据


在写这篇文章的时候,我想我错过了什么。也许我需要在第一个线程结束时执行一些强制的“刷新”操作,以便浏览器可以接收回显数据,用户可以在服务器上的PHP处理器也在执行操作时执行操作。

在扩展线程类之前,必须在线程类的路径中添加require_once()(如果您的框架不使用自动加载类系统)

我遇到了同样的问题,在我的例子中,将
pthreadVC2.dll放入

..wamp\bin\apache\Apache2.4.4\bin

(而不是php.net中的指南所指示的
。\wamp\bin\php\php5.4.16
)解决了问题wamp服务器为浏览器和cli提供了一个单独的php.ini配置文件

要在WAMP服务器上使用浏览器中的pthreads模块,还需要将“pthreadVC2.dll”复制到apache的“bin”目录中

您现在应该在这两个文件夹中都有“pthreadVC2.dll”(如果安装在默认位置):

您还需要更新php bin目录和apache bin目录中的php.ini文件,以包括:

extension=php_pthreads.dll

这意味着您可以在浏览器中使用pthreads,也可以在wamp服务器的cli中使用pthreads。遇到同样的问题后,我注意到我安装了错误的Pthread版本(3.1.6:需要PHP7+),该版本与我的PHP版本(5.5.12)不兼容。解决了Pthread版本0.0.44的问题。早期版本可能可以正常工作


这是和。注意上面提到的php.ini位置(Apache folder=for Browser,php folder=CLI)。

它指向正确的文件夹
ext
extension=php_pthreads.dll