我注意到 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”操作符可以创建一个“实例”,即该指定类的对象,以供实际使用。这是我需要的课程:
//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()”函数是专门为基本 Thread 类的扩展而创建的。这是使用该类的一些代码:
$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 对象。我确实遇到了一个让我想知道我是否可以按照我希望的方式实际使用 pthread 的特殊性。这是我所观察到的: 1. AJAX 调用一个初始 php 文件来做某事。2. Web 服务器上的 PHP 处理器做这件事。3.各种数据应该回显到浏览器。4. 初始的 php 文件要求创建另一个线程,然后终止。5.浏览器还没有收到回显的数据!6. Web 服务器上的 PHP 处理器完成委托给第二个线程的工作。7. 当第二个线程终止时,现在浏览器接收到回显数据!
在写这篇文章时,我想我错过了一些东西。也许我需要在第一个线程结束时做一些强制“刷新”的东西,以便浏览器可以接收回显的数据,用户可以在服务器上的 PHP 处理器也在做事的同时做事。