修剪system()的内容?

时间:2014-10-15 18:33:32

标签: php

我正在尝试使用system(“dsquery user”)打印出活动目录中的所有用户;在PHP中,我的问题是它被削减,所以我有一个包含所有用户的数组,没有别的,atm这是我的代码:

<?php
$test = system("dsquery user");
$teste = explode('CN=', $test);
print_r($teste);
$user = trim($teste[1], ",");
echo "<br \>" . $user;
?>

我只能获取一个用户atm,因为爆炸会删除其他所有内容。 任何帮助都表示赞赏,基本上我最终不会有这样的事情:

$user[0] = Administrator
$user[1] = kbgrt
$user[2] = asdasd

这是输出:

“CN = Administrator,CN = Users,DC = domain,DC = local”“CN = Guest,CN = Users,DC = domain,DC = local”“CN = krbtgt,CN = Users,DC = Domain, DC = local“”CN = doctor.scripto,CN = Users,DC = domain,DC = local“ -

我希望你能理解其他评论,我会尝试以另一种方式解释。

1 个答案:

答案 0 :(得分:0)

如果命令输出不是很容易解析命令的输出。然而,一个好的开始是尝试尽可能地简化它并看模式。但是希望下面的代码对你有用,我尽可能地对它进行评论。

我已经开始使用系统的输出(&#34; dsquery user&#34;);

$test = '"CN=Administrator,CN=Users,DC=domain,DC=local" "CN=Guest,CN=Users,DC=domain,DC=local" "CN=krbtgt,CN=Users,DC=Domain,DC=local" "CN=doctor.scripto,CN=Users,DC=domain,DC=local"';

为了方便我删除空格和&#34;来自字符串

$test = str_replace(' ', ',', $test);
$test = str_replace('"', '', $test);

现在我们准备拆分字符串了,所以我们得到一个数组$ teste,其元素以LDIF值开头(&#34; DC =&#34;或&#34; CN =&#34;在我们的例子中)

$teste = explode(',', $test);

由于某些用户不受欢迎,我添加了一个数组来排除它们。还要创建一个数组$ users来保存结果。

$users = array();
$exclude_users = array("Users", "doctor.scripto");

然后它只是迭代数组并拆分每个元素,所以我们得到位置0的LDIF部分和位置1的名称。添加名称,如果位置0等于CN并且位置1中的名称不在排除用户列表。

foreach ($teste as $value) {
    $data = explode('=', $value);
    if($data[0] == 'CN' && !in_array($data[1], $exclude_users)) {
       $users[] = $data[1];
    }
}

print_r($users);

结果如下:

Array
(
    [0] => Administrator
    [1] => Guest
    [2] => krbtgt
)