• 14-07-2007, 19:18:43
    #1
    Merhaba;

    Arkadaşlar php4'de get_headers() fonksiyonu olmadığı için File Source for get_headers.php adresindeki fonksiyonu kullandım. Ama fonksiyon çalıştığında şöyle bir hata veriyor:

    Warning: fsockopen(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/vhosts/test.com/httpdocs/download/sock.php on line 157
    
    Warning: fsockopen(): unable to connect to :80 in /var/www/vhosts/test.com/httpdocs/download/sock.php on line 157
    Ne kadar araştırdıysam bu hatayı gideremedim. Bir fonksiyon için PHP5 mi kurmalıyım server'a?
  • 14-07-2007, 19:25:05
    #2
    Misafir
    hayır, yazdığın adresi resolve edemiyor,

    tam kodları verirmisin o fonksiyonu kullandığın yeri
  • 16-07-2007, 00:07:18
    #3
    sock.php dosyam şöyle:

    <?php
    // $Id: get_headers.php,v 1.4 2007/04/17 10:09:56 arpad Exp $
    define('PHP_COMPAT_GET_HEADERS_MAX_REDIRECTS', 5);
    /**
     * Replace get_headers()
     *
     * @category    PHP
     * @package     PHP_Compat
     * @license     LGPL - http://www.gnu.org/licenses/lgpl.html
     * @copyright   2004-2007 Aidan Lister <aidan@php.net>, Arpad Ray <arpad@php.net>
     * @link        http://php.net/function.get_headers
     * @author      Aeontech <aeontech@gmail.com>
     * @author      Cpurruc <cpurruc@fh-landshut.de>
     * @author      Aidan Lister <aidan@php.net>
     * @author      Arpad Ray <arpad@php.net>
     * @version     $Revision: 1.4 $
     * @since       PHP 5.0.0
     * @require     PHP 4.0.0 (user_error)
     */
    function php_compat_get_headers($url, $format = 0)
    {
        $result = array();
        for ($i = 0; $i < PHP_COMPAT_GET_HEADERS_MAX_REDIRECTS; $i++) {
            $headers = php_compat_get_headers_helper($url, $format);
            if ($headers === false) {
                return false;
            }
            $result = array_merge($result, $headers);
            if ($format == 1 && isset($headers['Location'])) {
                $url = $headers['Location'];
                continue;
            }
            if ($format == 0) {
                for ($j = count($headers); $j--;) {
                    if (preg_match('/^Location: (.*)$/i', $headers[$j], $matches)) {
                        $url = $matches[1];
                        continue 2;
                    }
                }
            }
            return $result;
        }
        return empty($result) ? false : $result;
    }
    function php_compat_get_headers_helper($url, $format)
    {
        // Init
        $urlinfo = parse_url($url);
        $port    = isset($urlinfo['port']) ? $urlinfo['port'] : 80;
        // Connect
        $fp = fsockopen($urlinfo['host'], $port, $errno, $errstr, 30);
        if ($fp === false) {
            return false;
        }
        // Send request
        $head = 'HEAD ' . (isset($urlinfo['path']) ? $urlinfo['path'] : '/') .
            (isset($urlinfo['query']) ? '?' . $urlinfo['query'] : '') .
            ' HTTP/1.0' . "\r\n" .
            'Host: ' . $urlinfo['host'] . "\r\n\r\n";
        fputs($fp, $head);
        // Read
        $headers = array();
        while (!feof($fp)) {
            if ($header = trim(fgets($fp, 1024))) {
                list($key) = explode(':', $header);
                if ($format === 1) {
                    // First element is the HTTP header type, such as HTTP 200 OK
                    // It doesn't have a separate name, so check for it
                    if ($key == $header) {
                        $headers[] = $header;
                    } else {
                        $headers[$key] = substr($header, strlen($key)+2);
                    }
                } else {
                    $headers[] = $header;
                }
            }
        }
        fclose($fp);
        return $headers;
    }
    // Define
    if (!function_exists('get_headers')) {
        function get_headers($url, $format = 0)
        {
            return php_compat_get_headers($url, $format);
        }
    }
    
    echo get_headers("http://www.siteadresi.com");
    
    ?>
    Ama çalıştırdığım zaman yukarıdaki hatayı veriyor.
  • 17-07-2007, 19:41:05
    #4
    Arkadaşlar CURL ile header'den gelen verileri alabildim. PHP4 kullanan arkadaşlar get_headers() fonksiyonu yerine aşağıdaki CURL fonksiyonunu kullanabilirler.

    <?php
    function get_http_header( $url ){
    	$ch = curl_init();
    	curl_setopt( $ch, CURLOPT_URL, $url );
    	curl_setopt( $ch, CURLOPT_HEADER, 1 );
    	curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
    	curl_setopt( $ch, CURLOPT_NOBODY, 1 );
    	$ret = curl_exec( $ch );
    	curl_close( $ch );
    	return $ret;
    }
    // kullanımı
    echo get_http_header("http://www.google.com.tr");
    ?>
    fonksiyon çalıştığında aşağıdakine benzer çıktı verir:

    HTTP/1.1 200 OK
    Cache-Control: private
    Content-Type: text/html; charset=ISO-8859-9
    Set-Cookie: PREF=ID=360a92f8cd9b860c:TM=1184690329:LM=1184690329:S=4s8HFcQGxls1yGjK; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com.tr
    Server: GWS/2.1
    Content-Length: 0
    Date: Tue, 17 Jul 2007 16:38:49 GMT