[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как работает _SERVER ?
Alcohol_frei
Добрый день, у меня такой вопрос:
Тренируюсь на локальном сервере, корень располагается в C:\Server\Apache\Htdocs
Сделал в корне папку trena, в ней еще 6 папок (1,2..6), в каждой лежит файл 1.php,2.php и т.д.
В корне файл trena.php, в нем такой код:
<table width=100% border=2>
<
tr><td width=20% align=left>Ссылка</td><td>Текст</td><td width=20% align=right>Прим.</td></tr>
<?php
for ($i=1; $i<=100; $i++)
{
$text="trena/$i";
if (!file_exists($text)) break;
$dir=opendir($text);
$raz=array(".html",".htm",".shtml",".php");
while(($file=readdir($dir))!==false)
{
if(($file!=".")&&($file!=".."))
{
if(in_array(strrchr($file,"."),$raz))
{
$meta=get_meta_tags("$text/$file");
echo "<tr><td><a href=$text/$file>$meta[nazvanie]</a></td>";
}
}
}

closedir($dir);
}
echo "</table></center><br>";
?>


Каждый из файлов 1,2,3 - копия trena.php, меняются пока только meta в голове.
Я хочу чтобы каждая страница выдавала все ссылки на другие страницы. Собственно, путь
$text="trena/$i";

для них не работает. Пишу
$way=$_SERVER['DOCUMENT_ROOT'];
$text="$way/trena/$i";

И все равно не работает
И это тоже
$text="localhost/trena/$i";

В чем ошибка?



Спустя 33 минуты, 36 секунд (15.01.2010 - 12:00) Gradus написал(а):
Не надо переменные в кавычки вставлять, в кавычки вставляеться текст.
правильней так
$text="localhost/trena/".$i;

или так
$way=$_SERVER['DOCUMENT_ROOT'];
$text=$way."/trena/".$i;

Спустя 25 минут, 26 секунд (15.01.2010 - 12:25) Alcohol_frei написал(а):
Это я знаю, все равно не работает, пустая таблица получается.

Спустя 25 минут, 5 секунд (15.01.2010 - 12:50) Gradus написал(а):
if(($file!=".")&&($file!="..")) // - это как понимать ?
or пишеться || если что smile.gif
На будущее , пишите через каждый if, а лучше через каждую строку echo 1; на следущей echo 2; так будете знать в каком районе ошибки wink.gif

Спустя 6 минут, 47 секунд (15.01.2010 - 12:57) sergeiss написал(а):
Во-первых, у тебя не хватает тэга закрытия строки </tr>.

А во-вторых, я лично логику не понял. Ты проверяешь, есть ли файл с определенным расширением в некоем каталоге, после чего ты открываешь (пытаешься открыть) файл с таким именем, но в другом каталоге.
Плюс к этому, что тут делает in_array? Функция strrchr возвращает строку, а не массив.

Gradus - с точки зрения логики тут if(($file!=".")&&($file!="..")) написано по делу, т.к. это не OR, а AND, и правильно вписывается в логику процесса.

Спустя 8 минут, 37 секунд (15.01.2010 - 13:06) Gradus написал(а):
sergeiss
Цитата
Плюс к этому, что тут делает in_array? Функция strrchr возвращает строку, а не массив.

Ну так in_array (mixed needle, array haystack) в needle попадает строка которая ищеться в массиве
Цитата
Gradus - с точки зрения логики тут if(($file!=".")&&($file!="..")) написано по делу, т.к. это не OR, а AND, и правильно вписывается в логику процесса.

Посмотрел везде почти так пишут, не пойму почему.
Судя логике если файл попадёться '.' , он его пропустит потому что он не являеться одновременно '..' и '.'

Спустя 1 час, 3 минуты, 50 секунд (15.01.2010 - 14:09) Alcohol_frei написал(а):
Цитата
if(($file!=".")&&($file!="..")) // - это как понимать ?

readdir возвращает кроме списка элементов каталога ссылки на текущий и родительский каталоги (точка и две точки), они мне не нужны, поэтому такая вот проверка.
Цитата
На будущее , пишите через каждый if, а лучше через каждую строку echo 1; на следущей echo 2; так будете знать в каком районе ошибки

Ошибка в том, что в цикл не выполняется, т.е. file_exists($text) == FALSE , как будто таких папок не существует.
Цитата
Во-первых, у тебя не хватает тэга закрытия строки </tr>.

Ага, пропустил. Но это не критично.
Цитата
А во-вторых, я лично логику не понял. Ты проверяешь, есть ли файл с определенным расширением в некоем каталоге, после чего ты открываешь (пытаешься открыть) файл с таким именем, но в другом каталоге.
Плюс к этому, что тут делает in_array? Функция strrchr возвращает строку, а не массив.

Логика простая.
if (!file_exists($text)) break; //проверяется существование папки trena/$i
$dir=opendir($text); //если она существует, то открываем ее
$raz=array(".html",".htm",".shtml",".php"); //определяем массив возможных расширений страниц, на которые надо ссылаться
while(($file=readdir($dir))!==false) //в открытой папке перебираем все файлы
if(($file!=".")&&($file!="..")) //и если они не ссылки на каталоги
if(in_array(strrchr($file,"."),$raz)) //и если с нужными расширениями (html, htm, shtml, php)
echo "<tr><td><a href=$text/$file>$meta[nazvanie]</a></td>"; //то выводим ссылки на эти файлы

Собственно, функция strrchr возвращает часть строки начиная с символа "." до конца, т.е. расширение, а in_array проверяет, является ли файл по расширению веб-страницей.
Но это все неважно, потому что все отлично работает. Сейчас попробую нормально сформулировать вопрос.

При открытии страницы trena.php, которая лежит в корне (листинг в первом сообщении), скрипт просматривает папку trena (которая также лежит в корне), в которой находятся папки с именами 1,2,3... , в которых лежит по одному файлу Название_папки.php (т.е. 1.php, 2.php и т.д.)
Все отлично работает, создается табличка, в первом столбце выводятся ссылки на эти файлы.
Но при переходе, например, на страницу 1.php (которая лежит в trena/1/1.php) у меня получается пустая таблица.
А я хочу, чтобы выводилось то же самое, что и в trena.php, т.е. таблица со ссылками.
Проблема в том, что просто скопировать скрипт нельзя (т.к. тогда будет просматриваться папка trena/1/trena , которая, конечно, не существует)
Мне нужно задать путь просмотра из корневой папки. Для этого я использую
$way=$_SERVER['DOCUMENT_ROOT'];

у $way будет значение "C:/server/apache/htdocs" (моя корневая папка)
но если задавать
$text=$way."/trena/".$i;

То цикл не выполняется, как будто папок не существует.
Вот, вроде все понятно написал чего хочу smile.gif

Спустя 35 минут, 44 секунды (15.01.2010 - 14:45) arlamar написал(а):
ну может мой способ не оптимален но раз вложенность папок фиксированная то думаю сойдёт следующее

$text="../../trena/"

это должно быть в файлах 1.php, 2.php ...

Спустя 41 минута, 48 секунд (15.01.2010 - 15:27) Alcohol_frei написал(а):
arlamar
Это я в первую очередь попробовал. Если вручную написать путь C:/server/apache/htdocs/trena, то не работает. А если написать C:server/apache/htdocs/trena (без первого слэша), то работает, но один раз. А при нажатии любой ссылки - The address type is unknown or unsupported.

Спустя 20 минут, 38 секунд (15.01.2010 - 15:48) arlamar написал(а):
вот тут непонятно:
Цитата
Сделал в корне папку trena, в ней еще 6 папок (1,2..6), в каждой лежит файл 1.php,2.php и т.д.
В корне файл trena.php, в нем такой код:


<?php
for ($i=1; $i<=100; $i++)
{
$text="trena/$i";


вот тут мы зачем то ищем trena/trena/$i
судя по описанию в trena идут папки 1,2,3...

короче вот это у меня работает:
<table width=100% border=2>
<
tr><td width=20% align=left>Ссылка</td><td>Текст</td><td width=20% align=right>Прим.</td></tr>
<?php
for ($i=1; $i<=100; $i++)
{
$text="$i";
if (!file_exists($text)) break;
$dir=opendir($text);
$raz=array(".html",".htm",".shtml",".php");
while(($file=readdir($dir))!==false)
{
if(($file!=".")&&($file!=".."))
{
if(in_array(strrchr($file,"."),$raz))
{
$meta=get_meta_tags("$text/$file");
echo "<tr><td><a href=$text/$file>Файл - $i</a></td>";
}
}
}

closedir($dir);
}
echo "</table></center><br>";
?>

Спустя 7 минут (15.01.2010 - 15:55) Gradus написал(а):
Цитата
readdir возвращает кроме списка элементов каталога ссылки на текущий и родительский каталоги (точка и две точки), они мне не нужны, поэтому такая вот проверка.

эм... я имел ввиду && , по моему там должно быть ||

Спустя 6 минут, 41 секунда (15.01.2010 - 16:01) arlamar написал(а):
Цитата
эм... я имел ввиду && , по моему там должно быть ||


при || условие выполнится в любом случае... а зачем нам . и .. ?

Спустя 6 минут, 18 секунд (15.01.2010 - 16:08) Gradus написал(а):
я на 99% уверен что я туплю smile.gif
НО
Цитата
при || условие выполнится в любом случае... а зачем нам . и .. ?

если || то условия выполниться либо когда файл не . или когда файл не .. , а с && получаеться что скрипт пройдёт если файл одновременно не равен . и не равен .. что в принципе не возможно и скрипт пропустит в любом случае

Спустя 31 минута, 41 секунда (15.01.2010 - 16:39) Alcohol_frei написал(а):
Цитата
если || то условия выполниться либо когда файл не . или когда файл не .. , а с && получаеться что скрипт пройдёт если файл одновременно не равен . и не равен .. что в принципе не возможно и скрипт пропустит в любом случае

Почему это? laugh.gif Как раз такие файлы и нужны.
Это невозможно, когда папка пустая.

Спустя 1 минута, 25 секунд (15.01.2010 - 16:41) arlamar написал(а):
Alcohol_frei, ну так, что там? работает?

Спустя 27 минут, 9 секунд (15.01.2010 - 17:08) Alcohol_frei написал(а):
Цитата (arlamar @ 15.01.2010 - 13:41)
Alcohol_frei, ну так, что там? работает?

Неа, сижу - думаю.

Спустя 5 минут, 11 секунд (15.01.2010 - 17:13) arlamar написал(а):
если я правильно понял структуру папок
то
$text="../$i";

в файлах 1.php, 2.php и т.д. должно решить проблему)

Спустя 7 минут, 4 секунды (15.01.2010 - 17:20) Alcohol_frei написал(а):
Так вот не решает почему-то.

Спустя 18 секунд (15.01.2010 - 17:20) arlamar написал(а):
и вообще кинь мне архив с исходниками
посмотрю что и как
если конечно там не мега важный код который нельзя показывать)

Спустя 23 часа, 37 минут, 8 секунд (16.01.2010 - 16:58) Gradus написал(а):
Цитата
Как раз такие файлы и нужны.

тогда убрать условие
Цитата
Почему это?

ну не может лада калина называться одновременно мерседесом даже по бумагам
Быстрый ответ:

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