Вот у меня есть index.php и папка news, в которой расположен подключаемый файл, считывающий файлы (новости) из подпапки bdnews. Предупреждений и ошибок нет, но global не срабатывает, то есть функция ViewNNews работает с неопределенным массивом listOfFileName, хотя он был сделан глобальной переменной. Почему так? index.php PHP: <? include("http://".$_SERVER['SERVER_NAME']."/news/newsf.h"); $newsExist = GetAllNewsFiles(); if($newsExist) { // Новость 1 ViewNNews(0, 0); ViewNNews(0, 1); // Новость 2 ViewNNews(1, 0); ViewNNews(1, 1); } else echo "Новостей нет!"; ?> news/newsf.h PHP: <? function GetAllNewsFiles() { global $listOfFileName; if($handle = opendir("news/bdnews")) { while(($file = readdir($handle)) !== false) { if(($file != ".") && ($file != "..")) $listOfFileName[] = $file; } closedir($handle); if(count($listOfFileName)) rsort($listOfFileName); else return 0; } else return 0; return 1; } function ViewNNews($n, $what) { if(isset($listOfFileName[0])) { if($n < count($listOfFileName)) { if($newsFile = file("http://".$_SERVER['SERVER_NAME']."/news/bdnews/".$listOfFileName[$n])) { if($what == 0) echo $newsFile[0]; if($what == 1) echo $newsFile[1]; } } } } ?> [/php]
1) Спасибо! Все заработало! И еще вопрос: нужна ли проверка на существование массива if(isset($listOfFileName[0])) и правильно ли так делать? 2) Я в файле index.php вызываю функцию GetAllNewsFiles() и открываю директорию для получения списка фалов (opendir("news/bdnews"))) - но если вызвать эту же функцию, к примеру, из скрипта в самой папке "news", то путь открытия окажется не верным (надо указать просто "bdnews"). А можно задать абсолютный путь для функции opendir() или как обойти эту проблему?
Qwe1 1) Я бы сделал так, чтобы GetAllNewsFiles() возвращала список новостей как результат, и передавал бы полученный массив в ViewNNews() как параметр. Тогда глобальные переменные были бы не нужны. В качестве флага "есть новости - нет новостей" прекрасно справится count(). 2) Можно написать $_SERVER["DOCUMENT_ROOT"] . "/news/bdnews"
1) Честно говоря, я так и хотел вначале сделать. Если этот вариант наиболее правильный, то я именно его и выберу! 2) Точно! Таким образом, получаем: index.php: PHP: <? include("http://".$_SERVER['SERVER_NAME']."/news/newsf.h"); $listOfFileName = GetAllNewsFiles(); if(count($listOfFileName)) { // Новость 1 ViewNNews($listOfFileName, 0, "time"); ViewNNews($listOfFileName, 0, "text"); // Новость 2 ViewNNews($listOfFileName, 1, "time"); ViewNNews($listOfFileName, 1, "text"); } else echo "Новостей нет!"; ?> news/newsf.h: PHP: <? function GetAllNewsFiles() { $listOfFileName = array(); if($handle = opendir($_SERVER["DOCUMENT_ROOT"]."/news/bdnews")) { while(($file = readdir($handle)) !== false) { if(($file != ".") && ($file != "..")) $listOfFileName[] = $file; } closedir($handle); if(count($listOfFileName)) rsort($listOfFileName); } return $listOfFileName; } function ViewNNews($listOfFileName, $n, $what) { if(count($listOfFileName)) { if($n < count($listOfFileName)) { if($newsFile = file("http://".$_SERVER['SERVER_NAME']."/news/bdnews/".$listOfFileName[$n])) { if(!strcmp("time", $what)) echo $newsFile[0]."<br>"; if(!strcmp("text", $what)) echo $newsFile[1]."<br>"; } } } } ?>
Qwe1 Молодец Одно замечание - file("http://...") приведет не к чтению файла, а к выполнению вспомогательного HTTP-запроса. Это повышает нагрузку на сервер, возможно, стоит скормить функции file() то же самое, что и opendir(). То же самое с include() в начале кода.
Заменил 26-ю строку файла "news/newsf.h": теперь она выглядит так: (все работает!) PHP: if($newsFile = file($_SERVER["DOCUMENT_ROOT"]."/news/bdnews/".$listOfFileName[$n])) А на счет подключения файла (include) - можно аналогичным образом поступить! Если предложенный способ действительно более правильный (с точки зрения скорости работы), то я так и сделаю! Спасибо, Dagdamor!