PDA

Zobacz pełną wersję : RSS zablokowana funkcja readfile na serwerze.



Sergio
26-07-2006, 11:34
Korzystam ze standardowego komponentu RSS wbudowanego w Joomla. Po kliknięciu w baton rss na stronie otrzymuję komunikat:
„<b>Warning</b>: readfile() has been disabled for security reasons in <b>/home/fotograf/public_html/joomla/includes/feedcreator.class.php</b> on line <b>665</b><br />:mad:

Admin serwera (hosting na i365.pl), poinformował mnie, że funkcja readfile nie może być odblokowana. Zaproponował: „Ogólnie polecenie readfile należy zastąpić dwoma fopen i fread wg przykładu http://www.php.net/manual/pl/function.fread.php”
Co zrobić żeby działało? Może jest jakiś komponent, który rozwiązuje problem? Tylko nie mówcie "zastąpić poleceniami fopen i fread" bo nie znam się na php:confused:

kilrathi
07-09-2006, 20:17
Witaj,

Miałem dokładnie ten sam problem. Ja również korzystam z usług i365.pl.
kluczowy fragment pliku feedcreator.class.php czy jak mu tam, u mnie wygląda tak:

function _redirect($filename) {
// attention, heavily-commented-out-area

// maybe use this in addition to file time checking
//Header("Expires: ".date("r",time()+$this->_timeout));

/* no caching at all, doesn't seem to work as good:
Header("Cache-Control: no-cache");
Header("Pragma: no-cache");
*/

// HTTP redirect, some feed readers' simple HTTP implementations don't follow it
//Header("Location: ".$filename);

//Header("Content-Type: ".$this->contentType."; charset=".$this->encoding."; filename=".basename($filename));
Header("Content-Type: ".$this->contentType."; charset=".$this->encoding);
Header("Content-Disposition: inline; filename=".basename($filename));
//readfile($filename, "r");
//kilrathi addon begin
$chunksize = 1*(1024*1024); // how many bytes per chunk
$buffer = '';
$handle = fopen($filename, 'rb');
if ($handle === false) {
return false;
}
while (!feof($handle)) {
$buffer = fread($handle, $chunksize);
echo $buffer;

}
fclose($handle);
//kilrathi addon end
die();
}
I działa ;)

BTW: Czy tobie też joomla czasem chodzi jakoś dziwnie wolno? Toczyłem swojego czasu batalię z adminami i365 o to po czyjej stronie jest lipa...

Sergio
13-09-2006, 12:21
Dzięki
Działa ;)
Zaktualizowałem joomla do ostatniej wersji 1.0.11 podmieniłem kod i jest ok.


BTW: Czy tobie też joomla czasem chodzi jakoś dziwnie wolno? Toczyłem swojego czasu batalię z adminami i365 o to po czyjej stronie jest lipa...
Hmm... Faktycznie trochę czasami mi przymulało. Teraz i365.pl przeniosła serwery do Niemiec i jest lepiej tzn. szybciej. Tyle tylko, że zmienił się IP serwera i przez kilka dni bywały problemy z dostępem do strony. Poza tym miałem wrażenie, że jednocześnie korzystam z 2 datacenter - czyli starego i nowego.:eek::eek: Zdarzyły się przypadki zapisywania konfiguracji CPanela raz w starym raz w nowym, podobnie było z zapisem do mojej bazy danych. Można było zaobserwować różne IP po zalogowaniu się do CPanela (stary i nowy) Alarmowałem, ale powiedzieli, że nie mają na to wpływu. Ostatnio jest ok.

kilrathi
13-09-2006, 17:59
Acha... polecam wszystkim wpisywać sobie "znaczniki" takie jakie ja dodałem, np.: "//kilrathi addon begin". Pomaga to utrzymać porządek w kodzie i łatwo po kilku miesiącach zorientować się co jest poprawione a co jest orginalne.

kilrathi
13-09-2006, 18:06
No i oczywiście zastąpienie funkcji readfile kodem jak powyżej będzie potrzebne we wszystkich wystąpieniach wywołania readfile() jeśli funkcja jest administracyjnie wyłączona.
W większości przypadków najlepszym rozwiązaniem będzie zadeklarowanie funkcji np. readfile_kilrathi():


function readfile_kilrathi($filename,$variable){
$chunksize = 1*(1024*1024);
$buffer = '';
$handle = fopen($filename, 'rb');
if ($handle === false) {
return false;
}
while (!feof($handle)) {
$buffer = fread($handle, $chunksize);
echo $buffer;

}
fclose($handle);
}

A potem zamienić wszystkie wywołania readfile() na readfile_kilrathi()

Oczywiście czasem potrzeba zastosować readfile inaczej ale zazwyczaj wystarczy taka funkcja "zastępcza"