24.06.2006, 10:14
общий
это ответ
Здравствуйте, Bolzamo!
Q1) как можно получить массив с именами всех файлов в папке?
A1)
<?
$dir_name=$_SERVER[‘DOCUMENT_ROOT‘].‘/‘;
$d=opendir($dir_name) or die($php_errormsg);
while( false !==($f=readdir($d))){
if (is_file("$dir_name$f")){
$f_arr[]=$f;
}
}
closedir($d);
foreach( $f_arr as $name ){
echo "$name
\n";
}
?>
Q2)Насколько безопасно делать админку с веб-интерфейсом в движке, построенном на файлах.
A2)Если интересует возможность потери данных (когда используется один и тот же файл), то при одном администраторе таких проблем не возникает (никто больше не пытается получить монопольный доступ к файлу) - просто используем блокировку файла:
$f=fopen(‘name.txt‘,‘a‘);
flock( $f, LOCK_EX );
fwrite( $f, ‘text‘ );
fflush( $f );
fclose( $f );
Q3)Насколько целесообразно прочитывать все файлы через цикл для получения имен статей и их описания для странички оглавления, если значения разделены скажем последовательностью "<!--split-->", или все таки лучше вынести заголовки и описания в отдельный файл, если так то опять таки встает второй вопрос.
A3) (также касается Q2)
Используя хранение всей информации (заголовок, описание, статья...) в одном файле облегчает реализацию создания/редактирования статьи, но при создании списка необходимо прочитать заголовки всех файлов, что не повышает производительности.
Так же приходиться использовать имя файла как передаваемый параметр, что использовать не безопасно - возможно выполнение произвольного кода и т.д. и т.п., за этим глаз и глаз нужен. Во втором варианте можно ввести поле ID и передавать его и такая проблема отпадает. В принципе этот вариант возможен и в первом случае, но реализуется сложнее (да и работает намного медленней).
P.S. Сам когда-то реализовывал движок со вторым вариантом и использовал подобие формата dBase(.dbf): выравнивал поля по ширине (позволило редактировать описание и т.д. не перезаписывая весь файл, а только нужную строку), записи не удалялись, а помечались "#" в начале строки (тоже весь файл не перезаписываем). И не забудь перед открытием файла со статьей проверять его наличие: if (file_exists(‘filename.txt‘))
Ну в общих чертах это все, удачи!!!