我正在监视器上处理由大量计算机组成的结构。我在PHP中开发它,我想以最快的方式ping所有结构。 为此,我使用来自并行线程enter link description here继承了多线程所以我按照一些教程,最后我有一个类(从线程扩展),并在其他脚本调用者:PHP无法在线程运行上下文中打开文件
类:
class Ping extends Thread{
public $id;
public $name;
public function __construct($id, $name){
$this->id = $id;
$this->name = $name;
}
public function run(){
$ping = exec("ping -n 1 -w 80 " . $this->name);
$h = fopen("ping.json", 'w');
if(preg_match("#perte 100#", $ping)){
fwrite($h,'d');
}
else {
fwrite($h,'c');
}
fclose($h);
}
}
来电者:
$p = array();
foreach($array_computer as $comp){
array_push($p, new Ping(array_search ($comp , $array_computer), $comp->{'name'}));
}
foreach ($p as $p_t){
$p_t->start(PTHREADS_INHERIT_ALL);
}
所以,我有两个问题:
1。当我要echo $ id或$ name时,什么都不显示
2。我无法打开“ping.json”,因为:“未能打开流:权限被拒绝”
如果我更换
$p_t->start(PTHREADS_INHERIT_ALL);
通过
$p_t->run();
呼叫的作品,但我失去了多线程的兴趣:P
这不是问题,我已经尝试过了。我试图把文件句柄放在Ping类的参数中,但我遇到同样的问题,除了当我尝试使用一个Ping对象时。 –
我会第二@C。 van Dorsten评论如上。自适应验证和调试,自上而下。 [http://php.net/manual/en/class.thread.php]有一些例子。 – daxeh