phpldapadmin - Fatal error: Cannot redeclare password_hash() in /var/www/html/phpldapadmin/lib/functions.php on line 2225
Make
sure you have php 7.0 for phpldapadmin. The solution is tested on php 7.0
Solution :
If you install the phpldapadmin using command
sudo apt install phpldapadmin
in Ubuntu or any other Debian based system. You will not get this error
Same is applied for Centos or Fedora.
sudo yum install phpldapadmin
This is an easy solution that's why you should not use the downloaded zip package. Use default package installation on command line. There should be less chances that you get the error.
But if you have downloaded phpldapadmin 1.2.2 or 1.2.3 zip file from sourceforge.net, you might get this error. If you have any other version, still this solution will fix the error.
Make sure you have php 7.0 where you have deployed the downloaded package of phpldapadmin.
Solution :
Change text password_hash to password_hash_custom in the all files of the lib directory.
This sed command will do the trick. Make sure you are in the phpldapadmin directory before executing the command.
sudo sed -i 's/password_hash/password_hash_custom/g' lib/*After updating the text password_hash, the above error will be fixed but there are chances that you might get following error.
E_WARNING: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback insteadTo solve this error update the whole code of the function function dn_unescape($dn) in /var/www/html/phpldapadmin/lib/functions.php with
function dn_unescape($dn) {This will solve the front error but if you click on the tree icon to maximize the tree items, you might get following error again.
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
debug_log('Entered (%%)',1,0,__FILE__,__LINE__,__METHOD__,$fargs);
if (is_array($dn)) {
$a = array();
foreach ($dn as $key => $rdn) {
$a[$key] = preg_replace_callback('/\\\([0-9A-Fa-f]{2})/',
function ($m) {
return ''.chr(hexdec('\\1')).'';
},
$rdn
);
}
return $a;
} else {
return preg_replace_callback('/\\\([0-9A-Fa-f]{2})/',
function ($m) {
return ''.chr(hexdec('\\1')).'';
},
$dn
);
}
}
E_WARNING: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback insteadTo solve the error completely update the whole code of the private function function dn_unescape($dn) in /var/www/html/phpldapadmin/lib/ds_ldap.php with
private function unescapeDN($dn) {
if (DEBUG_ENABLED && (($fargs=func_get_args())||$fargs='NOARGS'))
debug_log('Entered (%%)',17,0,__FILE__,__LINE__,__METHOD__,$fargs);
if (is_array($dn)) {
$a = array();
foreach ($dn as $key => $rdn) {
$a[$key] = preg_replace_callback('/\\\([0-9A-Fa-f]{2})/',
function ($m) {
return ''.chr(hexdec('\\1')).'';
},
$rdn
);
}
return $a;
} else
return preg_replace_callback('/\\\([0-9A-Fa-f]{2})/',
function ($m) {
return ''.chr(hexdec('\\1')).'';
},
$dn
);
}
It should fix all errors of function.php and you should be able to use phpldapadmin smoothly.
You can see the complete solution here.