如何检查php某个方法是否可用?(是否被禁用)

很多空间服务提供商为了防止黑客攻击会禁用fsockopen函数,在php函数中可以使用

function_exists

检测某个函数是否被禁用了,如


<?php
if(function_exists('fsockopen')) {
    echo "fsockopen exists.<br/>";
} else {
    echo "fsockopen doesn't exist.<br/>";
}

if(function_exists('pfsockopen')) {
    echo "pfsockopen exists.<br/>";
} else {
    echo "pfsockopen doesn't exist.<br/>";
}

if(function_exists('stream_socket_client')) {
    echo "stream_socket_client exists.<br/>";
} else {
    echo "stream_socket_client doesn't exist.<br/>";
}

BTW,当我们确实需要使用fsockopen,但是fsocketopen方法又被禁用时,可以遍历这三个方法(fsockopen, pfsockopen, stream_socket_client)选择其中没有被禁用的方法,如

function fsocketopen($hostname, $port = 80, &$errno, &$errstr, $timeout = 15) {
    $fp = '';
    if (function_exists('fsockopen')) {
        $fp = @fsockopen($hostname, $port, $errno, $errstr, $timeout);
    } else if (function_exists('pfsockopen')) {
        $fp = @pfsockopen($hostname, $port, $errno, $errstr, $timeout);
    } elseif (function_exists('stream_socket_client')) {
        $fp = @stream_socket_client($hostname.':'.$port, $errno, $errstr, $timeout);
    }
    return $fp;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>