프로그램에서 외부 호스트 접속이 필요한 경우가 있는데, 이 경우 외부접속이 지속되면 해당 프로그램에 악영향을 주는 경우가 있다.

아래와 같이 default_socket_timeout을 설정해서 외부접속지연을 막을 수 있다.

http://test_host/sleep.php

<?php

    define('_SLEEP', 5);


    for ($i = 0; $i < _SLEEP; $i++)

    {

        echo "{$i}\n";

        sleep(1);

    }

    exit(0);

?>



default_socket_timeoue_test.php <= set enough time

<?php

ini_set('default_socket_timeout', 10);

echo "-- S result --\n";

$rFp = @fopen('http://test_host/sleep.php', 'r');

if ($rFp !== false)

{

    stream_set_timeout($rFp, 2);

    stream_set_blocking($rFp, 0);

    $sResult = fread($rFp, 4096);

    echo $sResult;

    fclose($rFp);

}

echo "-- E result --\n";


exit(0);

?>

$ php default_socket_timeoue_test.php 

-- S result --

0

1

2

3

4

-- E result --



default_socket_timeoue_test.php <= set NOT enough time

<?php

ini_set('default_socket_timeout', 2);

echo "-- S result --\n";

$rFp = @fopen('http://test_host/sleep.php', 'r');

if ($rFp !== false)

{

    stream_set_timeout($rFp, 2);

    stream_set_blocking($rFp, 0);

    $sResult = fread($rFp, 4096);

    echo $sResult;

    fclose($rFp);

}

echo "-- E result --\n";


exit(0);

?>

$ php default_socket_timeoue_test.php 

-- S result --

-- E result --



* 위와 같이 default_socket_timeout 을 설정하면 해당 시간안에 socket data 못받아오면 socket close 시킴

* 참고로 stream_set_timeout()은 cli에서는 안먹힘, 이와 유사하게 set_time_out()또한 cli에서는 안먹힘

'PHP' 카테고리의 다른 글

cli에서 set_time_out() 테스트  (0) 2012.01.31
Posted by 광장군
,