|
|
|
| Добрый день помогите разобраться с такой проблемой. Есть следующий скрипт:
<?php
$dir = opendir (".");
while ($file = readdir ($dir))
{
if(!is_dir($file)) {
$content = file_get_contents("$file");
// Регулярное выражение
$pattern = "|<i>(.*)</i>|siU";
if(preg_match($pattern, $content, $out))
{
echo "$out[1] <a href=\"$file\">перейти</a><br><br>";
}
}
}
closedir ($dir);
?>
|
Основная задача: вывод всех файлов в текущем каталоге, у меня с этим две проблемы. Первое как отсортировать их, что бы новые были в начале пробовал использовать ksort и др. не помогает. И второе как запретить вывод ссылку этого скрипта самого на себя, т. е. он находится в том же каталоге, что и файлы, которые требуется вывести, всё нормально выводит, но выдаёт ссылку на самого себя. | |
|
|
|
|
|
|
|
для: Максим Медведев
(22.01.2007 в 12:20)
| | Имена файлов в каком формате? | |
|
|
|
|
|
|
|
для: cheops
(22.01.2007 в 12:56)
| | Имена файлов имеют следующий вид:
01012006.php
02122006.php
и так далее. То есть названия файло совпадают с датой их создания. | |
|
|
|
|
|
|
|
для: Максим Медведев
(22.01.2007 в 12:20)
| | 1) Вместо ksort используйте rsort().
2) Вы можете узнать имя текущего скрипта при помощи элемента $_SERVER['PHP_SELF'] или новости у вас включаются при помощи конструкции include? | |
|
|
|
|
|
|
|
для: cheops
(23.01.2007 в 00:39)
| | 1) не помогло, выдаёт такую ошибку:
Warning: rsort() expects parameter 1 to be array, string given ...
2) попробовал записать так:
if ($file = $_SERVER['PHP_SELF']) continue;
|
прекращает работать. тоесть ошибка в записи?
3) это и есть файл новостей с верху и снизу идёт оформление страницы, а ссылку на сябя он даёт в таком виде (.*) перейти | |
|
|
|
|
|
|
|
для: Максим Медведев
(23.01.2007 в 13:30)
| | 1) Так а вы зачем строку передаёте rsort()? Нужно передавать ему массив.
2) Сначала выведите значение $_SERVER['PHP_SELF'] в окно браузера - посмотрите в каком формате выводится у вас путь к файлу. | |
|
|
|
|
|
|
|
для: cheops
(23.01.2007 в 15:36)
| | значение $_SERVER['PHP_SELF'] получается равным полному адресу до скрипта | |
|
|
|
|
|
|
|
для: cheops
(23.01.2007 в 00:39)
| | Формат даты ддммгггг не позволит нормально сортировать такие строки.
rsort будет мало. Придется usort применять. | |
|
|
|
|
|
|
|
для: Максим Медведев
(22.01.2007 в 12:20)
| | Скрипт собирает в массив имена фйлов в текущей директории кроме "..", ".", файла-скрипта
Вот рабочий код:
<?php
$dir = ".";
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if ( ($file != ".") && ($file != "..") && ($file != $_SERVER['PHP_SELF']) )
{
$array[] = preg_replace("/\.(\w)+/", "", basename($file))." <a href='$file'>перейти</a><br />";
}
}
closedir($dh);
}
}
rsort($array);
foreach($array as $vals)
{
echo $vals;
}
?>
|
В вашем коде сдесь:
if ($file = $_SERVER['PHP_SELF']) continue;
|
Идет сначала присвоение, затем проверка, т.о. результат всегда положительный, а оператор continue заставляет прервать работу данной итерции. | |
|
|
|
|
|
|
|
для: euginewm
(23.01.2007 в 13:55)
| | спасибо, только он возвращает ссылку на себя и список всех папок в каталоге | |
|
|
|
|
|
|
|
для: Максим Медведев
(23.01.2007 в 15:52)
| | Сегодня переписал этот скрипт получил следующее:
<?php
$dir = opendir (".");
while (($file = readdir ($dir)) !== false)
{
if(!is_dir($file)) {
$content = file_get_contents("$file");
// Регулярное выражение
$pattern = "|<i>(.*)</i>|siU";
if(preg_match($pattern, $content, $out))
{
if ( ($file != ".") && ($file != "..") && ($file != $_SERVER['PHP_SELF']))
{
$array[0] = preg_replace("/\.(\w)+/", "", $out[1])." <a href='$file'>перейти</a><br />";
}
rsort($array);
foreach($array as $vals)
{
echo $vals;
}
}
}
}
closedir ($dir);
?>
|
Результат такой, какой был получен мной первоначально. почему то он всё равно выводит ссылку на самого себя. сортировка не получается, если писать не $array[0], то выводится сначало одна новость, потом две, три и так далее. | |
|
|
|
|
|
|
|
для: Максим Медведев
(24.01.2007 в 10:23)
| | Так... попробую...
У вас значит хранятся файлы в виде
ддммгггг.пхп и вам надо, чтоб выводились ссылки на них с названием которое содержится в каждом из них между i и сортировалис они по дате? | |
|
|
|
|
|
|
|
для: Максим Медведев
(24.01.2007 в 10:23)
| | Попробуем...
Формат даты нужен ддммгггг
<?php
$dir = opendir ('.');
while ($fille = readir($dir)) !== false) {
if (preg_match ('#([0-9]{1,2})([0-9]{2})([0-9]{4})\.php#is', $file, $name))
$content = file_get_contents ($name[0]);
preg_match ('#<t>(.*!)<\/i>#is', $content, $info);
$date = $name[3].$name[2].$name[1];
$files[$date]['name'] = $name[0];
$files[$date]['title'] = $info[1];
}
}
$files = resort ($files);
foreach $files ar $f)
print "<a href='{$f[name]}'>{$f[title]}</a><br />";
?>
|
| |
|
|
|
|
|
|
|
для: Максим Медведев
(24.01.2007 в 10:23)
| | Скажите хоть, работает ли.. а то интересно =) | |
|
|
|
|
|
|
|
для: bronenos
(24.01.2007 в 21:35)
| | К сожалению нет. скрипт выдаёт следующие kib,rb^
Notice: Use of undefined constant name - assumed 'name' in
Notice: Use of undefined constant title - assumed 'title
Notice: Undefined offset: 1 in
Warning: file_get_contents(9122006.php) [function.file-get-contents]: failed to open stream: No such file or directory in
и так далее. судя по всему количество этих ошибок равно числу файлов в каталоге. поэтому на один файл аваодится судя по всему до пяти ошибок. | |
|
|
|
|
|
|
|
для: Максим Медведев
(26.01.2007 в 13:30)
| | Немного изменил | |
|
|
|
|
|
|
|
для: bronenos
(26.01.2007 в 14:43)
| | так в том то и дело, что мой вариант всё выводит и без ошибок, вот сортировка и эта ссылка .... | |
|
|
|