gpt4 book ai didi

php - FatalThrowableError 调用未定义的函数 App\Console\Commands\getCNofDNn()

转载 作者:行者123 更新时间:2023-11-29 18:16:37 26 4
gpt4 key购买 nike

我想寻求帮助,我正在尝试编辑 ldapsync 文件。因为我需要同步manager属性。问题是该属性采用 dn 格式。我有功能只从 dn 中爆炸 cn,然后以该用户名作为条件从 mysql 中选择 id。我的问题是,当我运行 ldap 同步时,它看起来可以工作一段时间,但不会显示。请帮我。

FatalThrowableError 调用未定义函数 App\Console\Commands\getCNofDNn()

    <?php
namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Models\Setting;
use App\Models\Ldap;
use App\Models\User;
use App\Models\Location;
use Log;

class LdapSync extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'snipeit:ldap-sync {--location=} {--location_id=} {--summary} {--json_summary}';

/**
* The console command description.
*
* @var string
*/
protected $description = 'Command line LDAP sync';

/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}

/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
ini_set('max_execution_time', 600); //600 seconds = 10 minutes
ini_set('memory_limit', '500M');

$ldap_result_username = Setting::getSettings()->ldap_username_field;
$ldap_result_last_name = Setting::getSettings()->ldap_lname_field;
$ldap_result_first_name = Setting::getSettings()->ldap_fname_field;
$ldap_result_active_flag = Setting::getSettings()->ldap_active_flag_field;
$ldap_result_emp_num = Setting::getSettings()->ldap_emp_num;
$ldap_result_email = Setting::getSettings()->ldap_email;
$ldap_result_mobile = Setting::getSettings()->ldap_mobile;
$ldap_result_manager = Setting::getSettings()->ldap_manager;
$ldap_result_title = Setting::getSettings()->ldap_title;
$ldap_result_cost_center = Setting::getSettings()->ldap_cost_center;

try {
$ldapconn = Ldap::connectToLdap();
Ldap::bindAdminToLdap($ldapconn);
} catch (\Exception $e) {
if ($this->option('json_summary')) {
$json_summary = [ "error" => true, "error_message" => $e->getMessage(), "summary" => [] ];
$this->info(json_encode($json_summary));
}
LOG::error($e);
return [];
}

$summary = array();

$results = Ldap::findLdapUsers();

// Retrieve locations with a mapped OU, and sort them from the shallowest to deepest OU (see #3993)
$ldap_ou_locations = Location::where('ldap_ou', '!=', '')->get()->toArray();
$ldap_ou_lengths = array();

foreach ($ldap_ou_locations as $location) {
$ldap_ou_lengths[] = strlen($location["ldap_ou"]);
}

array_multisort($ldap_ou_lengths, SORT_ASC, $ldap_ou_locations);

if (sizeof($ldap_ou_locations) > 0) {
LOG::debug('Some locations have special OUs set. Locations will be automatically set for users in those OUs.');
}

// Inject location information fields
for ($i = 0; $i < $results["count"]; $i++) {
$results[$i]["ldap_location_override"] = false;
$results[$i]["location_id"] = 0;
}

if ($this->option('location')!='') {
$location = Location::where('name', '=', $this->option('location'))->first();
LOG::debug('Location name '.$this->option('location').' passed');
LOG::debug('Importing to '.$location->name.' ('.$location->id.')');
} elseif ($this->option('location_id')!='') {
$location = Location::where('id', '=', $this->option('location_id'))->first();
LOG::debug('Location ID '.$this->option('location_id').' passed');
LOG::debug('Importing to '.$location->name.' ('.$location->id.')');
} else {
$location = NULL;
}

if (!isset($location)) {
LOG::debug('That location is invalid or a location was not provided, so no location will be assigned by default.');
}

// Grab subsets based on location-specific DNs, and overwrite location for these users.
foreach ($ldap_ou_locations as $ldap_loc) {
$location_users = Ldap::findLdapUsers($ldap_loc["ldap_ou"]);
$usernames = array();
for ($i = 0; $i < $location_users["count"]; $i++) {
$location_users[$i]["ldap_location_override"] = true;
$location_users[$i]["location_id"] = $ldap_loc["id"];
$usernames[] = $location_users[$i][$ldap_result_username][0];
}

// Delete located users from the general group.
foreach ($results as $key => $generic_entry) {
if (in_array($generic_entry[$ldap_result_username][0], $usernames)) {
unset($results[$key]);
}
}

$global_count = $results['count'];
$results = array_merge($location_users, $results);
$results['count'] = $global_count;
}

$tmp_pass = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 20);
$pass = bcrypt($tmp_pass);


for ($i = 0; $i < $results["count"]; $i++) {
if (empty($ldap_result_active_flag) || $results[$i][$ldap_result_active_flag][0] == "TRUE") {

$item = array();
$item["username"] = isset($results[$i][$ldap_result_username][0]) ? $results[$i][$ldap_result_username][0] : "";
$item["employee_number"] = isset($results[$i][$ldap_result_emp_num][0]) ? $results[$i][$ldap_result_emp_num][0] : "";
$item["lastname"] = isset($results[$i][$ldap_result_last_name][0]) ? $results[$i][$ldap_result_last_name][0] : "";
$item["firstname"] = isset($results[$i][$ldap_result_first_name][0]) ? $results[$i][$ldap_result_first_name][0] : "";
$item["email"] = isset($results[$i][$ldap_result_email][0]) ? $results[$i][$ldap_result_email][0] : "" ;
$item["mobile"] = isset($results[$i][$ldap_result_mobile][0]) ? $results[$i][$ldap_result_mobile][0] : "" ;
$item["manager"] = isset($results[$i][$ldap_result_manager][0]) ? $results[$i][$ldap_result_manager][0] : "" ;
$item["title"] = isset($results[$i][$ldap_result_title][0]) ? $results[$i][$ldap_result_title][0] : "" ;
$item["cost_center"] = isset($results[$i][$ldap_result_cost_center][0]) ? $results[$i][$ldap_result_cost_center][0] : "" ;
$item["ldap_location_override"] = isset($results[$i]["ldap_location_override"]) ? $results[$i]["ldap_location_override"]:"";
$item["location_id"] = isset($results[$i]["location_id"]) ? $results[$i]["location_id"]:"";

function getCNofDN($dn) {
$return=preg_match('/[^cn=]([^,]*)/i',$dn,$dn);

if ($dn != "") {

return($dn[0]);

}
return null;

}

if ( array_key_exists('useraccountcontrol', $results[$i]) ) {
$enabled_accounts = [
'512', '544', '66048', '66080', '262656', '262688', '328192', '328224'
];
$item['activated'] = ( in_array($results[$i]['useraccountcontrol'][0], $enabled_accounts) ) ? 1 : 0;
} else {
$item['activated'] = 0;
}
// insert
include "connn.php";


$dn = isset($results[$i][$ldap_result_manager][0]) ? $results[$i][$ldap_result_manager][0] : "" ;

$managername = getCNofDNn($dn);

if ( $managername != "") {

mysqli_query($connn,"SET NAMES 'utf8'");
$sql = "SELECT id FROM users WHERE username = '$managername';";

$result = mysqli_query($connn, $sql);

if (mysqli_num_rows($result) > 0) {
// output data of each row
while($row = mysqli_fetch_assoc($result)) {

$manager_idd = "$row[id] ";

}
} else {
echo "0 results getCNofDN('$dn'); $managername";
}
mysqli_close($connn);

} else {
$manager_idd = "0";


}
// User exists
$item["createorupdate"] = 'updated';
if (!$user = User::where('username', $item["username"])->first()) {
$user = new User;
$user->password = $pass;
$item["createorupdate"] = 'created';
}

// Create the user if they don't exist.
$user->first_name = e($item["firstname"]);
$user->last_name = e($item["lastname"]);
$user->username = e($item["username"]);
$user->email = e($item["email"]);
$user->employee_num = e($item["employee_number"]);
$user->activated = $item['activated'];
$user->phone = e($item['mobile']);
$user->manager_id = $manager_idd;
$user->jobtitle = e($item['title']);
$user->cost_center = e($item['cost_center']);

if ($item['ldap_location_override'] == true) {
$user->location_id = $item['location_id'];
} else if ($location) {
$user->location_id = e($location->id);
}

//$user->notes = 'Imported from LDAP';
$user->ldap_import = 1;

$errors = '';

if ($user->save()) {
$item["note"] = $item["createorupdate"];
$item["status"]='success';
} else {
foreach ($user->getErrors()->getMessages() as $key => $err) {
$errors .= $err[0];
}
$item["note"] = $errors;
$item["status"]='error';
}

array_push($summary, $item);
}

}

if ($this->option('summary')) {
for ($x = 0; $x < count($summary); $x++) {
if ($summary[$x]['status']=='error') {
$this->error('ERROR: '.$summary[$x]['firstname'].' '.$summary[$x]['lastname'].' (username: '.$summary[$x]['username'].' was not imported: '.$summary[$x]['note']);
} else {
$this->info('User '.$summary[$x]['firstname'].' '.$summary[$x]['lastname'].' (username: '.$summary[$x]['username'].' was '.strtoupper($summary[$x]['createorupdate']).'.');
}
}
} else if ($this->option('json_summary')) {
$json_summary = [ "error" => false, "error_message" => "", "summary" => $summary ];
$this->info(json_encode($json_summary));
} else {
return $summary;
}
}
}

最佳答案

您在 if 和 for 循环内创建函数 getCNofDN。如果代码不运行,则您的函数不存在。

将函数声明为私有(private)方法并调用它。

关于php - FatalThrowableError 调用未定义的函数 App\Console\Commands\getCNofDNn(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46973478/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com