как поймать в PHP сообщение о льготный период оракула? - PullRequest
3 голосов
/ 26 апреля 2011

Я использую базу данных Oracle в приложении PHP.

Пользователь пытается подключиться к приложению PHP.Срок действия его пароля истек, но льготный период для профиля его пользователя не является нулевым, поэтому он все еще может подключиться к приложению.

Я хотел бы признать, что этот пользователь должен изменить свой пароль и отобразитьему сообщение.

Я пробовал с oci_error(), но он ничего не возвращает, так как не было сбоя при подключении к базе данных с этим пользователем.

Я хотел быcatch ORA-28001 (и ORA-28002)

К сожалению, я не могу внести никаких изменений в структуру самой базы данных (добавить дополнительную таблицу или дополнительное поле).

Ответы [ 3 ]

2 голосов
/ 28 апреля 2011

Расширяя ответ Нарфа, это работает для меня с Oracle 11.2

<?php

function my_error_handler($errno, $errstr, $errfile, $errline) {
    if (preg_match('/ORA-28002: [ a-zA-Z]*([0-9])+/', $errstr, $matches)) {
        echo "Your password will expire within ${matches[1]} days\n";
    }
}

set_error_handler("my_error_handler", E_WARNING);

$c = @oci_connect("hr", "welcome", "localhost/XE");
if (!$c) {
    $m = oci_error();
    echo "Connection failed: " . $m['message'] . "\n";
} else {
    echo "Connected OK\n";
    // Prove the connection is valid
    $s = oci_parse($c, "select 'Query is OK' as c from dual");
    oci_execute($s);
    $r = oci_fetch_array($s, OCI_ASSOC);
    echo $r['C'] . "\n";
}

restore_error_handler();

?>

Его вывод для пароля в льготном периоде:

Your password will expire within 1 days
Connected OK
Query is OK
1 голос
/ 26 апреля 2011

Попробуйте включить предупреждения при выполнении oci_connect(), а затем перехватить их с помощью специального обработчика ошибок (убедитесь, что вы не игнорируете ошибки с @ при подключении).Это может потребовать от вас настройки параметров расширения oci в php.ini.

1 голос
/ 26 апреля 2011

См. Проблема OCILogon - Истечение срока действия пароля Oracle Очень похожая проблема с решением. Должно работать в текущей версии PHP. Также очень похоже на OCILogon в течение льготного периода - ORA-28002on SO

...