2017-01-23 86 views
0

我遇到了PHP OCI8模块的问题。PHP OCI连接忽略SIGINT(ctrl-c)

我有一个PHP工人搬运一些东西,我意识到,一旦有一个开放的OCI连接的PHP脚本忽略任何中断信号:

<?php 

$db = oci_connect(...); 

while (true) { 
    // do something 
} 

没有办法正常停止此脚本。至少我知道。 我曾尝试使用pcntl_signal()来创建我的自定义信号处理程序,但不会工作。 现在我需要手动杀死进程。

任何人有这个问题或一种方式来处理SIGINT oci?

干杯!

+0

可能重复:http://stackoverflow.com/questions/17124881/oracle-proc-oci-install-handlers-for -sigsegv-sigabrt-and-friends-why-how-how – ibre5041

回答

0

你可以试试这个代码:

declare(ticks=1); //mandatory 
oci_connect(...); 

pcntl_signal(SIGINT, 'sig_handler'); //set handler for signal 

$i = 0; 
while(true) { 
    echo $i; 
    $i++; 
} 

//will handle the ctrl+c. Put whatever you want to do 
function sig_handler() { 
    echo "DIE DIE DIE!"; 
    die(); 
} 

这里更多:http://php.net/manual/en/function.pcntl-signal.php

+0

不幸的是,正如我所提到的,自定义信号处理程序不工作:/ –

+0

我确实运行了这个完全代码,与Oracle 11g数据库连接,并且工作正常。你有没有试过这个完全的代码? –

+0

恕我直言,它最好设置env。在启动PHP之前,变量DIAG_SIGHANDLER_ENABLED = FALSE。 – ibre5041