PHP oci_connect() 卡住/无超时

AuS*_*ike 5 php oracle-call-interface laravel lumen

我们使用 Lumen 5.2.x (Laravel) 应用程序从 Oracle 数据库获取数据。出于这个原因,我们使用oci_connect()连接到数据库。(额外信息:我们使用 Oracle instantclient)

由于未知原因,应用程序没有响应并且不会返回任何数据。经过几个小时的调试,我们发现它陷入了同样的方法:oci_connect(). 显然该函数没有返回“超时”消息或类似的消息。

后来好像数据库移到了另一台主机上,这就是无法连接的原因。然而,我们预计会出现错误,而不是等待大量的时间。

这就是我们试图强制设置暂停的原因,但到目前为止还没有成功。

我们尝试过的事情:

  • 将其添加到连接字符串:(CONNECT_TIMEOUT=10)(RETRY_COUNT=3)完全被忽略。

  • 设置max_execution_timeset_time_limit1

  • 添加一个sqlnet.orawith 设置:

    TCP.CONNECT_TIMEOUT=10
    
    SQLNET.INBOUND_CONNECT_TIMEOUT=10
    
    SQLNET.OUTBOUND_CONNECT_TIMEOUT=10
    
    Run Code Online (Sandbox Code Playgroud)

我们尝试的一切都失败了,有人知道如何解决这个错误吗?任何帮助表示赞赏!

编辑:系统信息:Windows Server 2012 R2、IIS 8、PHP 5.6

Ced*_*ric 0

您已经尝试了几种方法,这很棒。这max_execution_time是一个很好的。您可以注册一个关闭功能,以便您可以记录错误(如果有) - 或者执行您需要的任何操作。

<?php 
function shutdown(){ 
     $error=error_get_last(); 
     if(is_null($error))   
         echo "No errors"; //or do nothing
     else 
         print_r($a); //or log it properly

 } 

register_shutdown_function('shutdown'); 

ini_set('max_execution_time',3 );//max 3 seconds

sleep(5); //just for test it out
Run Code Online (Sandbox Code Playgroud)

无论如何,根据网上的说法(例如:“不要失去理智,转向 Linux” ),如果可能的话,在使用 Oracle 连接时,您应该尝试使用 Linux 来运行您的 Web 服务器。

(我知道,在某些时候,Linux 和 Windows 用户之间存在很大的分歧。但如果操作系统更适合某些用例,为什么还要使用另一个呢)