我'我在显示器上工作,由许多计算机组成的结构。我用PHP开发它,我希望以最快的方式ping所有结构。 为此,我使用从pthread继承的多线程enter link description here所以我遵循一些教程,最后我有一个类(从Thread扩展)和一个调用者在另一个脚本中:
班级:
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。当我想回显$ id或$ name时,什么都不显示
2。我无法打开ping.json'因为:"无法打开流:权限被拒绝"
如果我替换
$p_t->start(PTHREADS_INHERIT_ALL);
通过
$p_t->run();
通话有效,但我失去了多线程的兴趣:P
答案 0 :(得分:0)
可能是var $p_t
,它是Ping的一个实例吗?
foreach ($p as $p_t)
也尝试检查例如ie。
if ($p_t instanceof Ping) {
$p_t->start();
}
答案 1 :(得分:0)
一些问题/评论可以帮助您:
答案 2 :(得分:0)
感谢您的回答, 我通过将数据结果存储在run()函数中找到了另一种解决方案。 我认为当我想同时编写json文件时会出现一些冲突,并且用flock()锁定文件效率不高。
我将Ping类和调用者放在同一个文件中,并按如下方式执行线程执行:
$i = 0;
foreach ($p as $p_t){
while($i > 15){}
$i++;
$p_t->start();
if($p_t->join())$i--;
}