Задача: Необходимо получить http-заголовки файла, содержащего русские символы. Получением заголовков занимается функция: Код (Text): /** * @desc Функция возвращает массив HTTP-заголовков страницы, URL которой передается в первом * аргументе. Первый элемент массива "status" имеет вид: * array( * ["full"] - полная строка ответа * ["protocol"] - версия протокола * ["code"] - код статуса ответа * ["desc"] - описание статуса * ); * остальные [параметр_ответа] => значение. * * @param string $sUrl - адрес страницы * @return array */ function readPageHead($sUrl) { if (!$sUrl) { return false; } $aUrl = parse_url($sUrl); if (!$aUrl["host"]) { $aUrl["host"] = $_SERVER['SERVER_NAME']; } $service_port = getservbyname('www', 'tcp'); $address = gethostbyname($aUrl["host"]); $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket < 0) { //ERR } else { //OK } $result = socket_connect($socket, $address, $service_port); if ($result < 0) { //ERR } else { //OK } if (!$aUrl["path"]) { $aUrl["path"] = "/"; } $sPath = $aUrl["path"]; if ($aUrl["query"]) { $sPath .= "?".$aUrl["query"]; } $in = "HEAD $sPath HTTP/1.1\r\n"; $in .= "Host: {$aUrl["host"]}\r\n"; $in .= "\r\n\r\n"; $in .= "Connection: Close\r\n\r\n"; $out = ''; socket_write($socket, $in, strlen($in)); $sRet = false; while ($out = socket_read($socket, 2048)) { echo $out; $sRet .= $out; } socket_close($socket); $sRet = trim($sRet); $sRet = str_replace('\r',"",addcslashes($sRet,"\r\n")); $aHead = explode('\n',$sRet); $aaRet = array(); foreach ($aHead as $iKey=>$sVal) { if ($iKey == 0) { $aaRet["status"]["full"] = $sVal; list($sProtocol,$sCode,$sDesc) = explode(" ",$sVal); $aaRet["status"]["protocol"] = $sProtocol; $aaRet["status"]["code"] = $sCode; $aaRet["status"]["desc"] = $sDesc; continue; } $iPos = strpos($sVal,":"); $sParam = strtolower(substr($sVal,0,$iPos)); $sValue = trim(substr($sVal,$iPos+1,strlen($sVal))); $aaRet[$sParam] = $sValue; } return $aaRet; } Однако, на русских именах файлов получаем заголовок 403 Forbidden. Кто знает, с чем это может быть связано и как решить эту проблему? P.S. Кодирование имени файла по RFC 1738 не помогло.
Проблема решена. Был глюк в настройке сервера. Декодирование имени файла помогает. В принципе, достаточно заменить пробелы на %20.