我正试图使用此代码更改电子邮件密码
<?php
$message = "";
$found = $valid = false;
if ($_POST['username'] != "") {
$domain_pos = strpos($_POST['username'], "@");
if ($domain_pos === false) {
$username = $_POST['username'];
$domain = $_POST['domain'];
} else {
$username = substr($_POST['username'], 0, $domain_pos);
$domain = substr($_POST['username'], $domain_pos + 1);
}
$current_password = $_POST['current_password'];
$new_password1 = $_POST['new_password1'];
$new_password2 = $_POST['new_password2'];
$root = $_SERVER['DOCUMENT_ROOT'];
$path_elements = explode('/', $root);
$root = "/{$path_elements[1]}/{$path_elements[2]}"; // for bluehost, extracts homedir ex: /homeN/blueuser may work with other hosts?
$shadow_file = "$root/etc/$domain/shadow";
// check if the shadow file exists. if not, either an invalid
// domain was entered or this may not be a bluehost account...?
if (file_exists($shadow_file)) {
// compare the new passwords entered to ensure they match.
if ($new_password1 == $new_password2) {
if (trim($new_password1) != "") {
// get the contents of the shadow file.
$shadow = file_get_contents($shadow_file);
$lines = explode("\n", $shadow);
// go through each line of shadow file, looking for username entered.
for ($i = 0; $i < count($lines); $i++) {
$elements = explode(":", $lines[$i]);
// found the user...
if ($elements[0] == $username) {
$found = true;
$passwd = explode("$", $elements[1]);
$salt = $passwd[2]; // get the salt currently used
// crypt the "Current Password" entered by user. Can use either builtin
// php crypt function or command line openssl command.
if (CRYPT_MD5 == 1) { // indicates whether or not the crypt command supports MD5.
$current = crypt($current_password, '$1$'.$salt.'$');
} else {
$current = trim(`openssl passwd -1 -salt "$salt" "$current_password"`);
}
// check if the current password entered by the user
// matches the password in the shadow file.
$valid = ($current == $elements[1]);
if ($valid) {
// if they match then crypt the new password using the same salt
// and modify the line in the shadow file with the new hashed password
if (CRYPT_MD5 == 1) {
$new = crypt($new_password1, '$1$'.$salt.'$');
} else {
$new = trim(`openssl passwd -1 -salt "$salt" "$new_password1"`);
}
$elements[1] = $new;
$lines[$i] = implode(":", $elements);
}
break;
}
}
if (!$found) {
$message = "The username you entered is not valid.";
} else if (!$valid) {
$message = "The password you entered is not valid.";
} else {
// write the new contents of the shadow back to the shadow file.
$shadow = implode("\n", $lines);
file_put_contents($shadow_file, $shadow);
$message = 'Your password has been updated.';
}
} else {
$message = "Your password cannot be blank.";
}
} else {
$message = "Both new passwords must match.";
}
} else {
$message = "The domain you entered is not valid.";
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>Change Password</title>
</head>
<body>
<?php
if ($message != "") {
$color = $found && $valid ? "green" : "red";
echo "<span style=\"color:$color;\">$message</span>";
}
?>
<form action="" method="post">
<input type="hidden" name="domain" value="somebluehostdomain.com" />
<table>
<tbody>
<tr>
<td><label for="username">Username</label></td>
<td><input name="username" id="username" type="text" /></td>
</tr>
<tr>
<td><label for="current_password">Current Password</label></td>
<td><input name="current_password" id="current_password" type="password" /></td>
</tr>
<tr>
<td><label for="new_password1">New Password</label></td>
<td><input name="new_password1" id="new_password1" type="password" /></td>
</tr>
<tr>
<td><label for="new_password2">New Password</label></td>
<td><input name="new_password2" id="new_password2" type="password" /></td>
</tr>
<tr>
<td colspan="2" style="text-align:center;">
<input type="submit" value="Change Password" />
</td>
</tr>
</tbody>
</table>
</form>
</body>
</html>
我在这里找到了它:http://www.bluehostforum.com/showthread.php?15140-email-password-change&p=88735#post88735
但它不再起作用了。
&#34;您输入的密码无效。&#34;消息出现,当然密码有效,因为我可以使用它登录。
这是error_log:
PHP Strict Standards: Non-static method PEAR::setErrorHandling() should not be called statically in /home1/account/public_html/site/mail/program/include/iniset.php on line 132
PHP Notice: Undefined index: username in /home1/account/public_html/site/mail/changepassword.php on line 6
我在bluehost服务器上使用PHP 5.4。它可能不兼容吗?还有其他方法允许用户从PHP更改其电子邮件密码(无需管理员登录到cPanel)?