لديك حساب بالفعل؟ دخول
دخول  سجل الأن 
الموقع الآن فى الفترة التجريبية وهذا الجزء غير كامل وجارى العمل عليه، للراغبين في المساعدة برجاء التقدم
[تحسين] دالة التحقق من وجود URL + تقبل حتى 4 تحويلات
هذه الدالة تقبل حتى 4 تحويلات. جميع الاماكن الذى تم التحويل اليها تضاف كمفتاح 'locations' فى المصفوفة.
var_export(checkUrl('http://microsoft.com/ie'));

// النتيجة

array (
  'success' => true,
  'locations' => 
  array (
    0 => 'http://www.microsoft.com/ie',
    1 => 'http://www.microsoft.com/ie/',
    2 => 'http://www.microsoft.com/windows/internet-explorer/default.aspx',
  ),
  'metaData' => 
  array (
    'wrapper_data' => 
    array (
      ... abunch of HTTP headers
    ),
    'wrapper_type' => 'http',
    'stream_type' => 'tcp_socket/ssl',
    'mode' => 'r+',
    'unread_bytes' => 3478,
    'seekable' => false,
    'uri' => 'http://microsoft.com/ie',
    'timed_out' => false,
    'blocked' => true,
    'eof' => false,
  ),
)
function checkUrl($url) {
    $root = _getRoot($url);
    $ctx = stream_context_create(array(
       'http' => array(
            'max_redirects' => 5, // allows 4 redirects :/
            'timeout' => 5,
        )
    ));
    $fp = @fopen($url, 'r', false, $ctx);
    $ret['success'] = false;
    if (! $fp) {
        return $ret;
    }
    $ret['locations'] = array();
    $ret['metaData'] = stream_get_meta_data($fp);
    fclose($fp);
    // analyze HTTP headers
    foreach ($ret['metaData']['wrapper_data'] as $line) {
        if (preg_match('@^Location: (.*)$@i', $line, $m)) {
            if ($m[1][0] === '/') {
                // root-relative URI
                $m[1] = $root . $m[1];
            } elseif (strpos($m[1], '://') >= 4) {
                // full URL
                $root = _getRoot($m[1]);
            }
            $ret['locations'][] = $m[1];
        }
        if (preg_match('@^HTTP/1\\.[01] 200@i', $line, $m)) {
            $ret['success'] = true;
        }
    }
    return $ret;
}

function _getRoot($url) {
    list($proto, $url) = explode('://', $url, 2);
    list($host) = explode('/', $url, 2);
    return $proto . '://' . $host;
}