Тайм-аут PHP oci?

Я хотел бы установить тайм-аут на запрос

$statement = oci_parse($conn, $query);
oci_execute($statement); // timeout if this takes over 5 minutes

это спрашивали раньше, но еще в 11 без четкого ответа

Запустить sql-запрос с тайм-аутом в PHP или Как в PHP остановить уже запущенный sql-запрос?

Я также нашел этот запрос прошлого года https://bugs.php.net/bug.php?id=73038


person Jabda    schedule 15.11.2017    source источник


Ответы (2)


Драйвер 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"');

Очевидно, вам потребуется обработка ошибок, проверка кода выхода и т. д., чтобы подготовить это производство.

person bishop    schedule 15.11.2017

Похоже, вы можете использовать oci_set_call_timeout для базы данных тайм-ауты вызовов, начиная с oci8 2.2.0.

<?php

$conn = oci_connect('hr', 'welcome', 'localhost/XE');
oci_set_call_timeout($conn, 5000);

?>
person Dorjee Dhondup    schedule 19.11.2019