CrashX
В прошлом XSiteCMS
- Регистрация
- 6 Июн 2008
- Сообщения
- 681
- Реакции
- 114
- Автор темы
- #1
существует проблема
когда память закончится, т.к. фаил будет больше чем объем памяти, то будет фатал ерор
как сделать так что бы фаил читался, скажем с определнной позиции допустим со строки 30 до 50
при условии что длина строки не известна!
$db_array=file($this->path($mod,$ext));
ниже прилигаю свой класс данных
PHP:
<?php
if(!defined('_SHELL')) die();
/**
* Класс Данных
*/
class DB
{
var $version=0.02;
var $sleep =1;
var $protect="<?php die();?>\r\n";
//BEGIN class Data
//---Работа с фаилами БД---
/**
* Путь к БД
* @param string имя БД
* @param string класификатор БД
* @return string
*/
function path($db,$ext)
{
return DB_DIR.DB_PREFIX.$db."/".$ext.".php";
}
/**
* Подготовка записи БД, для сбора информации
* @param string БД в строке
* @return string
*/
function trim(&$str)
{
$str=trim($str);
$str=str_replace ("\n","[n]",$str);
$str=str_replace ("\r","[r]",$str);
$str=str_replace ("\t","[t]",$str);
return $str;
}
/**
* Подготовка записи БД, для сохранения информации
* @param string БД в строке
* @return string
*/
function untrim(&$str)
{
$str=str_replace("[n]","\n",$str);
$str=str_replace("[r]","\r",$str);
$str=str_replace("[t]","\t",$str);
return $str;
}
/**
* Различность 2-х БД, удаление из БД указанных записей
* @param string БД в строке
* @return string
*/
function difference(&$db_array,$difference)
{
return array_diff($difference,$db_array);
}
/**
* Открыть БД
* @return array
*/
function open($mod='',$ext='data')
{
if(($mod!='') || (!empty($mod))):
if(!file_exists($this->path($mod,$ext))):
return array();
else:
$db_array=file($this->path($mod,$ext));
array_shift($db_array);
endif;
endif;
return $db_array;
}
/**
* Сохранить БД
* @param array $db_array
*/
function save($db_array,$mod=false,$ext='data')
{
array_unshift($db_array,"<?php die();?>\r\n");
if(($mod!='') || (!empty($mod))):
$db=$this->path($mod,$ext);
endif;
$fdb=fopen($db,'ab');
if($this->sleep): sleep($this->sleep); endif;
@flock($fdb,LOCK_EX+LOCK_NB); // блокируем
fseek($fdb,0);
ftruncate($fdb,0); // очищаем
set_file_buffer($fdb,0); // отключаем буфер
foreach($db_array as $string):
fwrite($fdb,$this->trim($string)."\r\n");
fflush($fdb); //очищение файлового буфера и записьв файл
endforeach;
@flock($fdb,LOCK_UN);
fclose($fdb);
unset($db_array);
}
/**
* Добавить данные в БД
* @param array $db_insert Что добавить
* @param array $db_array Во добавить
* @param string $mode Куда добавить 'shift'-начало 'push'-конец
* @param string $separator разделитель
* @return array
*/
function add($db_insert,&$db_array,$mode='push',$separator=':|:')
{
if($mode=='push'):
array_push($db_array,implode($separator,$db_insert)."\r\n"); //конец
elseif($mode=='shift'):
array_unshift($db_array,implode($separator,$db_insert)."\r\n"); //начало
endif;
return $db_array;
}
/**
* Удалить данные из БД
* @param array $db_array Где удалять
* @param integer $index Индекс записи
* @return array
*/
function delete(&$db_array,$index)
{
array_splice($db_array,$index,1);
return $db_array;
}
/**
* Обновить запись в БД полностью
* @param array $db_update Что заменять
* @param array $db_array Где заменять
* @param integer $index Индекс записи
* @param boolean $reverse Реверс массива
* @param string $separator разделитель
* @return array
*/
function update($db_update,&$db_array,$index,$reverse=false,$separator=':|:')
{
if($reverse):
$db_update=array_reverse($db_update,true);
endif;
array_splice($db_array,$index,1,implode($separator,$db_update)."\r\n");
return $db_array;
}
/**
* Доступ к БД
* @param string имя БД
* @param string сласификатор БД
* @param integer доступ к БД
* @return boolean
*/
function chmod($path,$chmod=0777)
{
if(!$this->is_writable_ext($path)):
@chmod($path,$chmod);
return true;
else:
return false;
endif;
}
/**
* Создание файлов ограничений
* @param string путь
*/
function access($path)
{
$fdb=fopen($path."/.htaccess",'wb');
fwrite($fdb,"DirectoryIndex index.php\r\n<Files *.*>\r\norder allow,deny\r\ndeny from all\r\n</Files>",80);
fclose($fdb);
$this->chmod($path."/.htaccess",0644);
$fdb=fopen($path."/index.php",'wb');
$this->chmod($path."/index.php",0755);
fwrite($fdb,"<?php header('location:../index.php?x=error&level=404'); exit;?>",64);
fclose($fdb);
}
//END class DB
}
?>