To pinpoint the delete issue:
with newer OpenLdap versions this will fail:
$values["mail"] = "";
ldap_modify($conn_id, $dn, $values);
or
$values["mail"][0] = "";
ldap_modify($conn_id, $dn, $values);
BUT this works:
$values["mail"] = array();
ldap_modify($conn_id, $dn, $values);
or
$values["mail"][0] = array();
ldap_modify($conn_id, $dn, $values);