1К13!
С нами с 07.05.04
Сообщения: 7721
Рейтинг: 2428
|
Добавлено: 28/03/06 в 15:34 |
Есть файл links.txt
В нём - десять ссылок в столбик.
Мне нужно, чтобы юзер через форму писАл свой урл, и этот урл затирал последнюю (десятую) ссылку в links.txt
Т.е. чтобы links.txt всегда состоял из десяти строк, но при этом мог построчно обновляться.
например, сначала links.txt такой:
ссылка1
ссылка2
ссылка3
ссылка4
ссылка5
ссылка6
ссылка7
ссылка8
ссылка9
ссылка10
потОм юзер сабмитит свой урл, и файл становится такой:
ссылка1
ссылка2
ссылка3
ссылка4
ссылка5
ссылка6
ссылка7
ссылка8
ссылка9
ссылка-юзера1
потОм второй юзер сабмитит свой урл и файл становится такой:
ссылка1
ссылка2
ссылка3
ссылка4
ссылка5
ссылка6
ссылка7
ссылка8
ссылка-юзера1
ссылка-юзера2
Подскажите, плиз, какую функцию использовать для такой записи в файл.
|
|
|
|
С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010
|
Добавлено: 28/03/06 в 15:43 |
Насколько знаю такой стандартной функции нету, нада писать.
И удобнее принцип стека писать по правилу LIFO.
Т.е. твою задачу без доп. условий хрен выполнишь
Ибо, если будет больше 10 добавлений, то как быть, куда писать?
|
|
|
|
осинизатор
С нами с 10.03.03
Сообщения: 8491
Рейтинг: 819
|
Добавлено: 28/03/06 в 16:05 |
Вот код, который это делает:
Код: |
<?php
if (isset($_GET["url"])) {
$lines = file("links.txt");
array_shift($lines);
array_push($lines, $_GET["url"]);
@unlink("links.txt");
$fp = fopen("links.txt", "w");
foreach ($lines as $line_num => $line) {
fwrite($fp, trim($line)."\n");
}
fclose($fp);
}
?>
|
1) Сохраняешь его в какой-нибудь php-файл, например geturl.php и размещаешь в той же папке, где лежит links.txt
2) Делаешь chmod файлу links.txt и устанавливаешь права 777, или 666 -иначе скрипт не сможет его переписать!
3) Ну и передаешь ему введенный пользовтелем url через <form method="get" action="geturl.php">. Или напрямую:
http://твойсайт.com/geturl.php?url=http://www.nubileones.com
|
|
|
|
С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010
|
Добавлено: 28/03/06 в 16:12 |
cyberxxx писал: | Вот код, который это делает:
Код: |
<?php
if (isset($_GET["url"])) {
$lines = file("links.txt");
array_shift($lines);
array_push($lines, $_GET["url"]);
@unlink("links.txt");
$fp = fopen("links.txt", "w");
foreach ($lines as $line_num => $line) {
fwrite($fp, trim($line)."\n");
}
fclose($fp);
}
?>
|
|
А массив сдвигаться будет
т.е. до
ссылка1
ссылка2
ссылка3
ссылка4
ссылка5
ссылка6
ссылка7
ссылка8
ссылка9
ссылка-юзера1
после
ссылка2
ссылка3
ссылка4
ссылка5
ссылка6
ссылка7
ссылка8
ссылка9
ссылка-юзера1
ссылка-юзера2
А я так понял, надо, чтоб ссылка1 оставалась и уходила последней...
|
|
|
|
осинизатор
С нами с 10.03.03
Сообщения: 8491
Рейтинг: 819
|
Добавлено: 28/03/06 в 16:18 |
ibiz писал: | А массив сдвигаться будет
т.е. до
ссылка1
ссылка2
ссылка3
ссылка4
ссылка5
ссылка6
ссылка7
ссылка8
ссылка9
ссылка-юзера1
после
ссылка2
ссылка3
ссылка4
ссылка5
ссылка6
ссылка7
ссылка8
ссылка9
ссылка-юзера1
ссылка-юзера2
А я так понял, надо, чтоб ссылка1 оставалась и уходила последней... |
Думаю, что топикстартер попутал что-то. Скорее всего он имелл в виду именно сдвиг массива по принципу FIFO. По крайней мере, LIFO-стек тут точно не канает.
|
|
|
|
С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010
|
Добавлено: 28/03/06 в 16:25 |
cyberxxx писал: | Думаю, что топикстартер попутал что-то. Скорее всего он имелл в виду именно сдвиг массива по принципу FIFO. По крайней мере, LIFO-стек тут точно не канает. |
Ага, чот я в них запутался
первый пришел первый ушол...
|
|
|
|
c++,php кодинг
С нами с 22.10.05
Сообщения: 1098
Рейтинг: 558
|
Добавлено: 28/03/06 в 16:37 |
тогда сразу бы добавил:
1.проверку на пустую строку
2.проверку на то что изначально в links.txt меньше 10 строк
3.вырезать символь переноса строки из url
|
|
|
|
осинизатор
С нами с 10.03.03
Сообщения: 8491
Рейтинг: 819
|
Добавлено: 28/03/06 в 17:03 |
1 и 2 imho глупо делать. Во-впервых, количество строк в массиве может быть другим (как я понимаю, 10 чисто для примера указано). Пустые строки искать тоже глупо, ибо при ручном формировании массива их там быть не должно, а при работе скрипта они точно не появятся. А вот пункт 3 действительно нужен и в моем коде уже реализован
Единственное что можно добавть, так это блокировку файла на время записи через flock(), т.е. так:
Код: |
<?php
if (isset($_GET["url"])) {
$lines = file("links.txt");
array_shift($lines);
array_push($lines, $_GET["url"]);
@unlink("links.txt");
$fp = fopen("links.txt", "w");
flock($fp, 2);
foreach ($lines as $line_num => $line) {
fwrite($fp, trim($line)."\n");
}
flock($fp, 3);
fclose($fp);
}
?>
|
А всяких условно-полезных проверок можно кучу навставлять. Например, отсеивать не только пустые строки, но и строки, не содержащие реальный адрес (сделать проверку на префиксы "http://", "ftp://" и т.д.) Вообще, можно много чего придумать
|
|
|
|
1К13!
С нами с 07.05.04
Сообщения: 7721
Рейтинг: 2428
|
Добавлено: 28/03/06 в 17:57 |
cyberxxx, спасибо большое 8)
всем +8
|
|
|
|
c++,php кодинг
С нами с 22.10.05
Сообщения: 1098
Рейтинг: 558
|
Добавлено: 28/03/06 в 18:01 |
если бензоле сразу не добавить в файл 10 (или n например) урлов - работать не будет.
isset не есть проверка на пустую строку.
если какой то умник вставит в середине урла перенос строки, получим +1 урл размер файла
вот :p
|
|
|
|
1К13!
С нами с 07.05.04
Сообщения: 7721
Рейтинг: 2428
|
Добавлено: 28/03/06 в 18:13 |
да я понял )
для моих целей скрипт вполне подойдёт )
|
|
|
|
осинизатор
С нами с 10.03.03
Сообщения: 8491
Рейтинг: 819
|
Добавлено: 28/03/06 в 20:08 |
вот версия с проверкой на пустую строку и даже на то, что строка сожержит www-ссылку (опять же чисто для выебона):
Код: |
<?php
if (isset($_GET["url"]) && eregi("^http://", $_GET["url"])) {
$lines = file("links.txt");
array_shift($lines);
array_push($lines, $_GET["url"]);
@unlink("links.txt");
$fp = fopen("links.txt", "w");
flock($fp, 2);
foreach ($lines as $line_num => $line) {
fwrite($fp, trim($line)."\n");
}
flock($fp, 3);
fclose($fp);
}
?>
|
Наличие непустого файла links.txt в том же подкаталоге все так же обязательно
|
|
|
|