[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Работа с файлами
Страницы: 1, 2
Stasonix
Собственно сабж.
Игорь_Vasinsky
файл большой? какой максимальный вес файла ожидается?

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Stasonix
Цитата (Игорь_Vasinsky @ 16.06.2013 - 18:09)
файл большой? какой максимальный вес файла ожидается?

маленький файл, я думаю если удаление будет происходит нормально, то размер будет колебаться от 15 до 20 или 30-ти строк, всего-лишь.
sergeiss
Цитата (Stasonix @ 16.06.2013 - 22:06)
Собственно сабж.

Собственно, используй file(). Затем удаляешь первый элемент массива. Все оставшиеся элементы записываешь в тот же файл, перезаписывая его.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
innovate
$file = file("test.txt");
$fopn = fopen("test.txt", "w+");

$arr = array_reverse($file);

foreach ($arr as $k => $v) {
if($i++ == 15) {
break;
}
fwrite($fopn, $v);
}
sergeiss
innovate - зачем столько телодвижений перед записью? И зачем array_reverse() - он тут совсем не нужен, потому что поменяет порядок следования элементов. И точное количество строк тоже не известно, как я понял.
Вобщем, тут достаточно использовать unset() для первого элемента массива.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Stasonix
Точно кол-во строк можно посчитать:

Пробовал так:


// Подсчет строк в файле
$linecount = 0;
$handle = fopen('test.txt', "r");
while(!feof($handle)){
$line = fgets($handle);
$linecount++;
}
fclose($handle);
// Если их больше 15, то удаляем 1-ые и оставляем последние 15
if ($linecount>15)
{
$lines = file('test.txt');
// или array_slice($lines,0,$linecount-15)
$lines = array_slice($lines,$linecount-15);
$content = '';
foreach ($lines as $line){
$content.=$line;
}
file_put_contents('test.txt',$content);
}


Но что-то не очень мне нравится, мне кажется что-то здесь неправильно
innovate
Цитата
зачем array_reverse() - он тут совсем не нужен

согласен - мой косяк.
$fopen = fopen("test.txt", "w+");

$arr = file("test.txt");
$linec = count($arr);

if($linec > 15) {
for($i = $linec-15; $i != $linec; $i++) {
fwrite($fopen, $arr[$i]);
}
}

"тут достаточно использовать unset() для первого элемента массива."
Очень хочу взглянуть на это решение. ;)
sergeiss
Цитата (innovate @ 17.06.2013 - 00:04)
"тут достаточно использовать unset() для первого элемента массива."Очень хочу взглянуть на это решение.  ;)

unset( $arr[0] )


Цитата (Stasonix @ 16.06.2013 - 23:59)
Но что-то не очень мне нравится, мне кажется что-то здесь неправильно

Тебе же уже подсказали: используй функцию file(). И количество элементов массива (т.е. строк файла) можно легко подсчитать, не надо никакие циклы писать.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
innovate
Цитата
unset( $arr[0] )
wink.gif
Цитата
Как удалить 1-ые строчки из файла, оставив последние 15?
Stasonix
	$arr = file("test.txt");
$count = count($arr);
if ($count>=15) {
$fopen = fopen("test.txt", "w+");
for($i = $count-14; $i != $count; $i++) {
fwrite($fopen, $arr[$i]);
}
fclose($fopen);
}


Спасибо innovate, как раз то что нужно!
innovate
Так получишь 14 строк, а не 15(\r\n не в cчет).
sergeiss
innovate, ну и чего с того? А кто мешает в цикл загнать то, что я написал?

while( count( $arr ) > 15 )
{
unset( $arr[0] );
array_shift( $arr );
}


И не надо никаких лишних телодвижений делать :)

Автору темы: прочитай внимательно то, что я написал (особенно код ПХП). Он тебе может быть очень полезен.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Stasonix
Цитата (innovate @ 16.06.2013 - 20:34)
Так получишь 14 строк, а не 15

Я специально это сделал, просто после всех этих удалений пользователь добавляет новое сообщение и становится как раз 15, вот примерно так:

if (isset($_POST['msg']) and !empty($_POST['msg']))
{
$arr = file("text.txt");
$count = count($arr);
if ($count>=15) {
$fopen = fopen("text.txt", "w+");
for($i = $count-14; $i != $count; $i++) {
fwrite($fopen, $arr[$i]);
}
fclose($fopen);
}
// Записываем новое сообщение
file_put_contents('text.txt',file_get_contents('text.txt').$_POST['msg'].'<br />'."\r\n");
echo file_get_contents('text.txt');
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.