Тайм-аут PHP oci?
Я хотел бы установить тайм-аут на запрос
$statement = oci_parse($conn, $query);
oci_execute($statement); // timeout if this takes over 5 minutes
это было задано раньше, но весь путь назад в 11 без твердого ответа
Я нашел этот запрос также с прошлого года https://bugs.php.net/bug.php?id=73038
1 ответ
Драйвер PHP OCI не поддерживает тайм-ауты запросов (через PDO::ATTR_TIMEOUT
) на интерфейсе с библиотекой Oracle. Таким образом, не существует прямого средства пользователь-земля для достижения этой цели.
Стандартный способ сделать это - выполнить отдельный процесс, который сам по себе имеет тайм-аут. Вы можете сделать это так:
// oci8-exec.php
set_time_limit(300); // 5 minutes
$conn = getDatabaseConnection();
$stmt = oci_parse($conn, $_SERVER['argv'][1]);
oci_execute($stmt);
oci_fetch_all($stmt, $rows);
var_export($rows);
тогда в вашем коде сделайте:
$rows = shell_exec('oci8-exec.php "select * from foo"');
Очевидно, что вам понадобится обработка ошибок, проверка кода выхода и т. Д., Чтобы подготовить эту работу.
Похоже, вы можете использовать oci_set_call_timeout для тайм-аутов вызова базы данных, начиная с oci82.2.0.
<?php
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
oci_set_call_timeout($conn, 5000);
?>