Читал материалы по Вашей ссылке.
Я вижу, что можно перегрузить файловые операции и операции с каталогами. Перегрузки include() я не увидел. Да и как Вы это себе представляете?
Я нисколько не сомневаюсь, что Вы намного лучше меня, да и большинства форумчан разбираетесь в тонкостях программирования на PHP, однако если Вы объясните, как можно перегрузить include, я буду очень благодарен.
З.Ы. Моё "решение" было подколкой.
-~{}~ 04.06.07 20:04:
SiMM, Вы были правы.
Но я что-то видимо недопонял.
PHP:
class DbStream
{
function stream_open($path, $mode, $options, &$opened_path)
{
mysql_connect('127.0.0.1','root','')))
$name = parse_url($path);
mysql_select_db($name['host'],$this->dbid);
mysql_query("SET NAMES 'cp1251'");
return true;
}
function stream_read($count)
{
$query = "SELECT `code` FROM `fake` WHERE `id`='1' LIMIT 1";
$res = mysql_query($query);
if($res)
{
$row = mysql_fetch_array($res);
echo $row[0];//2
return $row[0];//3
}else{
return 'Sh*t!'.mysql_error();
}
}
function stream_write($data)
{
return true;
}
function stream_tell()
{
return 0;
}
function stream_eof()
{
return true;
}
function stream_seek($offset, $whence)
{
return true;
}
}
if(stream_wrapper_register("mys","DbStream"))
{
echo 'WRAPPER REGISTERED<br>';
}else{
die('ERR!');
}
if(!($fp = fopen('mys://fake',"r")))
{
echo 'Cannot open connection';
}
$phpcode = fgets($fp);//1
echo $phpcode;//4
Так вот. В записи базы у меня находится текст следующего вида:
PHP:
<?php
echo "Database record #1";
?>
Просто текст
<?php
class MyClass
{
function __constructor()
{
echo "MyClass constructed";
}
function print()
{
echo "А ты как думал?";
}
}
$my = new MyClass();
?>
Значит так:
1) Вызываем функцию чтения в метке 1.
2) В метке 2 идет вывод содержимого записи БД на экран. Однако вместо содержимого я вижу результат его исполнения.
3) В метке 3 возвращаем "как бы" текст из записи и в метке 4 выводи его на экран. Выводится " ", то есть пробел.
Что я неправильно сделал?