Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   header() в php (http://forum.oszone.net/showthread.php?t=31397)

Andrewkras 17-12-2003 22:35 215103

проблема такая: у мну имеется на сайте волкальной сетке хттп сервак, на котором на пхп я написал скрипт поиска музы. при выводе результатов русские имена файлов кодируются функцией rawurlencode() чтобы их мона было скачать. проблема в том, что при скачивании ни explorer ни opera не декодируют русские имена файлов обратно (а хотелось бы ).
подскажите кто знает, как сделать перекодировку имени файла при сохранении

Andrewkras 18-12-2003 01:50 215104

проблему решил самостоятельно уже

Prisoner 18-12-2003 02:26 215105

А решение в студию? :)

Andrewkras 25-12-2003 11:50 215106

просили - получите...
Код:

<?
header("Content-type: audio/mpeg");
$data=fopen("../search/".$REMOTE_ADDR.".tmp","r");//файл с результатами поиска для указанного IP
$nulstr=fgets($data);//читамем первую строку (#EXTM3U: )
$number=$argv[0];//это номер песни на которую кликнул юзер
$k=0;//сбрасываем счётчик
while ((!feof($data)) and ($k!=$number+1)) //пока не дошли до конца файла с результатами
{
$str1=fgets($data);//читаем название песни
$str2=fgets($data);//и адрес её
if ($k==$number) {//если дошли до нужной песни
 $str1=explode(":",$str1);//из названия (#extinf:0,<собственно название>
 $str1=rawurlencode($str1[1]);//выделяем именно название песни
 $str1=str_replace("%0A","",$str1);//удаляем знак завершения строки
$str1=rawurldecode($str1);//и декодируем
 $i=0; //а эта байда для удаления времени звучания из названия
$j=0;
$strr1="";
while (($i<strlen($str1)) and ($strr1==""))
{
if ($str1[$i]=="," & $j==0)
{$j=1;
$strr1=substr($str1,$i+1);
}
$i++;
}
 $str2=rawurlencode($str2);//кодируем адрес песни
 $str2=str_replace("%0A","",$str2);//удаляем концы строк
$str2=str_replace("%0D","",$str2);
$str2=rawurldecode($str2);//декодируем
$fileinfo=explode(".",$str2);
$strr1=$strr1.".".$fileinfo[count($fileinfo)-1];//выделяем в $strr расширение файла (после последней точки)
header("Content-Disposition: attachment; filename=".$strr1);//вставляем в заголовок назване песни и расширение
readfile($str2);//читаем сам файл в stdout
 }//но всё это в том случае если мы дошли до нужной песни
$k=$k+1;//иначе банально увеличиваем индекс и идём дальше
}
fclose($data);//закрываем файл с результатами поиска

?>

вот только это у меня работало, когда апач и php были едины (php модуль) но я поставил теперь дргуой апач и прикрутил php как CGI интерпретатор и теперь скрипт этот не пашет. выдаёт 403 forbiden на строке readfile($str2)

[s]Исправлено: Andrewkras, 10:51 25-12-2003[/s]

Добавлено:

ЗЫ. файлы можно из браузера качать и слушать но скрипт не может получить к ним доступ. где это прописывается в апаче?

Prisoner 26-12-2003 02:36 215107

А посмотреть содержимое $str2 перед самым вызовом readfile, вдруг чушь? Может нет прав на чтение из директории, на файл.

Andrewkras 26-12-2003 03:23 215108

не. прикол в том, что когда пхп был как модул апачей, то всё работало, а теперь тупо получается такая ситуация, что клиент может получить доступ к файлу на серваке (даже indexing разрешил) а сам сценарий не может. тут мне кажется либо апач не даёт доступ сцениарию по непонятным причинам, либо надо как-то заставить пхп стартануть от учётной записи юзера залогиненого а не как системная служба

Prisoner 27-12-2003 02:29 215109

Логично, согласен. Только нать просто дать права пользователю из-под которого выполняется php на чтение и еще что нужно.

Andrewkras 27-12-2003 19:13 215110

гы :) ради чистоты эксперимента поставил ту же апач с пхп на другую систему и получается та же срань :(
когда с удалённой системы берут файл то оно пишел 403 форбиден :(
тут ещё другая особенность: пхп берёт по http 1.0 а браузеры по http 1.1  может из-за этого апач не выдаёт на 1.0 а на 1.1 выдаёт файлы :o

Добавлено:

если так, то где прописать чтобы пхп скрипт брал по протоколу http 1.1?

Добавлено:

а хотя нет... тут апач чё-то не даёт доступа... попробовал из браузера и оно тоже выдало форбиден :(


Время: 05:59.

Время: 05:59.
© OSzone.net 2001-