Показать полную графическую версию : Несколько вопросов по PHP
У меня возникли следующие вопросы, когдя я пытался разобраться...
1) Как индексировать содержимое папки? Есть большой фолдер (большой - это значит около 10к файлов схожего типа, дальше - больше).
Какую структуру языка PHP лучше всего использовать для хранения информации об каждом файле с учётом максимально простого, быстрого и эффективного обращения к ним из другого PHP-файла (или flash-приложения).
Массив не подходит, ибо одному элементу массива соответствует одно значение (а нужно хранить как минимум значения типа Ident, Vendor ID, Group и Link)
Я читал про такой тип данных в PHP как ресурс, но, как я понял, он хранит только ссылки, и вообще это не тип данных, а процедуры обращения к тем же GZ2-файлам или MySQL DB...
А как в PHP выглядит тип данных, идентичный типу record (запись) в Pascal/Delphi.
Очень хорошо, если бы вы подсказали не только как он выглядит и декларируется в программе, но и как обращаться к элементам, записывать значения в элементы записи и и.п.
2) Вот есть у файлов в Св-вах вкладочка "Сводка". Там Vendor ID и ещё всякая ерунда обычно хранится.
А как к этой штучке обращаться в PHP?
Вот допустим из этой папки с файлами (10000+ файлов) PHP-файл должен найти файл, у которого в св-вах во вкладке "сводка" в поле "создатель" написано "FileVendor01", как будет выглядеть ответственная за поиск часть этого PHP-файла?
3) Что из себя представляют ASPX (ASP, Active Server Pages) файлы?
Что есть ASP и зачем его используют?
Имело бы смысл реализовывать то, что описано в вопросах выше, с помошью ASP? (хотя заглянув в Википедию я сам ответил на этот вопрос, ответ отрицательный)
Где можно почитать литературу по ASP?
ASP и ASP.NET - разные вещи?
Как индексировать - прочитать сведения об одном файле -> внести информацию в базу данных (mysql) -> следующий файл -> внести информацию...
Для сбора всей информации о файле используется функция stat(filename). Вывод в массив (с помощью print_r($arr) можно посмотреть содержимое массива).
Соответственно, поиск будет выполнять mysql. Делаем запрос вроде mysql_query("SELECT * FROM имя_таблицы WHERE filename='имя_файла.txt' "); или по другим полям. Будет гораздо быстрее и эффективнее, чем держать в памяти всю структуру в виде массива. Массив, кстати, подходит, просто многоуровневый надо сделать.
А вообще, не надо доводить файловую систему до такого состояния. 10 тысяч файлов в 1 папке - это глупость. Создавайте каждый месяц / неделю / день новую папку и кладите файлы в неё. Это значительно снизит нагрузку на серверную ОС.
ASP - язык программирования для веб от Microsoft. Используется с веб-сервером IIS. ASPX - откомпиленный ASP. ASP.net - дальнейшее развитие ASP. Язык представляет собой что-то вроде VisualBasic'а. Но PHP мне нравится больше :)
Часть заданных вопросов я не понял, поэтому, возможно, ответил не на те, которые надо =^_^'=
Оу. Спасибо.
Примерно понятно, попробую, что у меня из этого получится.
Папочку в таком случае постараюсь раскидать по подпапкам, если от этого производительность возрастёт. Пока не слишком понятно по какому параметру раскидывать.
Только заметил, что вы, Coutty, анимэшник ^_^ Я, кстати, тоже тех же взглядов.
Анимэшники должны помогать друг другу, так что если что - я сразу же обращусь xD А какое ваше любимое анимэ? Простите, модератор-kamisama, за флуд не по теме ^_^
Пока не слишком понятно по какому параметру раскидывать. »
Если файлы имеются - то по любому параметру - по времени создания или рандомом (а на них есть ссылки со страниц? Тогда лучше не трогать).
А потом при добавлении скрипт пусть следит - если в БД уже есть, скажем, 100 записей на эту папку (запрос типа "SELECT COUNT(*) FROM имя_таблицы WHERE имя_каталога = последнее_имя"), то создавать новую. "Последнее_имя" тоже надо где-то хранить, я думаю, либо делать кореллированный подзапрос, что не очень хорошо, как мне кажется.
Производительность возрастёт - попробуйте через виндовый проводник открыть папку с кучей файлов и с малым количеством. Разница будет видна на глаз.
Я всё мутно объясняю, но суть в том, что пути к файлам и свойства надо хранить в БД, а папки слишком большими не делать.
По анимэ у нас спец.тема (http://forum.oszone.net/thread-96873.html) есть ;)
(а на них есть ссылки со страниц? Тогда лучше не трогать)
Самих страниц пока что нет ^ ^
Файлы будут обрабатываться флеш-приложением, хотя над этим надо ещё хорошо подумать.
А для каждой папки придётся сделать отдельную таблицу?
Или можно в таблице как-то хранить не только ключи с их значениями, а ключ -> значение -> подзначение значения ? (3-уровня вложенности)
Просто на виртуальном хостинге, который я хочу использовать по-началу, стоит ограничение 20 таблиц для пользователей free-аккуанта. Я пока не уверен, хватит ли мне этих 20.
Или можно делать всё в одной таблице, а папки будут фигурировать только в полях 'link'?
Кстати, сколько записей может выдержать таблица? А какое количество оптимально?
Я имею ввиду в плане производительности в первую очередь.
Под терминов 'кореллированный подзапрос' что понимается?
А для каждой папки придётся сделать отдельную таблицу? »
Нет, всё в одну можно.
Примерно такие поля в таблице (пусть будет main для примера):
[ id | folder | filename | size | vendor | group | link ]
Достаточно? Можно и ещё добавить.
3 уровня вложенности - "не понимать")
Если выбирать по id, то такой код:
// $_GET['id'] будет содержать запрос на необходимый файл
$res = mysql_query("SELECT * FROM main WHERE id='" . $_GET['id'] . "'");
$res = mysql_fetch_assoc($res);
echo $res['folder'] . "/" . $res['filename']; // использование
При добавлении:
$lastfolder = 224; // где-то надо хранить имя последней папки
$files_in_last_folder = 35; // количество файлов в последней папке. Тоже где-то надо хранить
if ($files_in_last_folder >= 100)
{
$lastfolder++;
$files_in_last_folder = 1;
}
if (mysql_query("INSERT INTO main ('folder', 'filename', 'size', 'vendor', 'group', 'link') VALUES (" . $lastfolder . ", 'dkfueu.jpg', 127500, 'nya', 'mur', 'link12834')))
{
echo "Запись о файле добавлена";
}
Ну и не забываем сам файл в папку записать.
Кстати, сколько записей может выдержать таблица? А какое количество оптимально? »
Выдержать может до 2 ГБ информации на таблицу или даже больше. Я не помню точно. Вопрос в том - даст ли хостер столько? Кроме того, нужно учитывать и нагрузку. 1 запрос в секунду - это совсем не то же самое, что 100 в секунду (здесь уже выделенный сервер нужен и СУБД помощнее. Например, PostgreSQL. Yahoo, говорят, на ней работает).
Под терминов 'кореллированный подзапрос' что понимается? »
Не обращайте внимания, я сегодня экзамен по базам данных сдавал, поэтому голова забита терминологией :) Это подзапрос на ту же таблицу, куда и основной запрос. Можно и без них :)
Delirium
23-01-2009, 01:13
ASP - язык программирования для веб от Microsoft. Используется с веб-сервером IIS. ASPX - откомпиленный ASP. ASP.net - дальнейшее развитие ASP. Язык представляет собой что-то вроде VisualBasic'а. Но PHP мне нравится больше »
Нет, ну я возмущен :read: :biggrin: . Это с каких это пор asp.net - это нечто вроде VB? Я пишу полноценные на ASP.NET + C#. ^) а почитать доступным языком можно на intuit.ru - найдите требуемый курс и бесплатно читайте.
Простите, я думал, что это со времён обычных ASP пошло... :sorry:
ASP как и ASP.NET это набор серверных объектов, функций, директив, которые реализуются с помощью поддерживаемого языка. В ASP - это скриптовые JS и VB. В ASP.NET - это компилируемые языки (основные C# и VB.NET). Существует и версия PHP для ASP.NET http://php-compiler.net/ - вроде бы независимые разработчики....
А как выполнять поиск по MySQL DB?
Ну допустим PHP-файл даёт юзеру формочку для поиска, в которую юзер что-то пишет, а скрипт ищет в БД.
Причём ищет сразу по нескольким таблицам БД (т.е. мы не знаем про что имеено юзер спрашивает, поэтому перебираем все возможные сочетания заданных юзером в форму слов во всех таблицах).
Как сделать такой поиск, обязательно разумным.
И как сделать, чтобы обращение к PHP-файлу поиска происходило из другого PHP-файла ("главная страница"), который передаёт пользовательский запрос файлу поиска и забирает результаты, чтобы их вывести (т.е. скрипт поиска освобождён от необходимости оформлять свои результаты на экране).
Delirium
29-01-2009, 01:48
Причём ищет сразу по нескольким таблицам БД (т.е. мы не знаем про что имеено юзер спрашивает, поэтому перебираем все возможные сочетания заданных юзером в форму слов во всех таблицах). »
Создать запросы на поиск во всех нужных таблицах и промежуточные результаты кидать в одну временную таблицу. Потом выводить результат из временной таблицы.
Создать запросы на поиск во всех нужных таблицах и промежуточные результаты кидать в одну временную таблицу. Потом выводить результат из временной таблицы. »
нереальное грузилово... нужно создать отдельную таблицу для поиска, и наполнять ее поисковым контентом (без лишних слов, тегов и пр. лабуды)... и по этой таблице делать рабочий поиск...
Delirium
29-01-2009, 05:55
Sham, согласен, этот вариант более грамотен и приемлем.
ManHack, извините, но у меня такой вопрос - HTML знаете? Как формы оправляются?И как сделать, чтобы обращение к PHP-файлу поиска происходило из другого PHP-файла ("главная страница"), который передаёт пользовательский запрос файлу поиска и забирает результаты, чтобы их вывести (т.е. скрипт поиска освобождён от необходимости оформлять свои результаты на экране). »
Я просто-напросто не понял эту фразу.
это зачатки объектного мышления :) автор изначально предполагает модульную структуру, но не знает пока инструментария... видимо речь идет об инклудах...
Насколько я понял в PHP нет определённой функции для получения данных из файла. То есть надо использовать какие-то сторонние классы. Типа этого - http://pecl.php.net/
Вот как формы оправляются я знаю очень примерно.
Хотелось бы найти какое-нибудь более или менее нормальное руководство.
С PECL не совсем понятно:
http://pecl.php.net/packages.php?catpid=25&catname=PHP
Тут не видно какого-либо класса для получения данных из файла :(
PECL = The PHP Extension Community Library.
Они все на PHP. Посмотри fileinfo.
Есть ещё PEAR - PHP Extension and Application Repository - http://pear.php.net/packages.php
Вот как формы оправляются я знаю очень примерно.
Хотелось бы найти какое-нибудь более или менее нормальное руководство. »
Что именно непонятно спрашивай, это настолько простая вещь :)
Для начала, как данные, забитые в форму, отдать PHP файлы (записать в указанную переменную в php-файле, для определённости, в $data)
И я всё-равно не понимаю как организовать поиск по БД, если в формочку вводится строка с несколькими параметрам, по которым должен выполняться поиск, причём в совершенно неопределённом порядке.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.