![]() |
Несколько вопросов по 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 А какое ваше любимое анимэ? Простите, модератор- |
Цитата:
А потом при добавлении скрипт пусть следит - если в БД уже есть, скажем, 100 записей на эту папку (запрос типа "SELECT COUNT(*) FROM имя_таблицы WHERE имя_каталога = последнее_имя"), то создавать новую. "Последнее_имя" тоже надо где-то хранить, я думаю, либо делать кореллированный подзапрос, что не очень хорошо, как мне кажется. Производительность возрастёт - попробуйте через виндовый проводник открыть папку с кучей файлов и с малым количеством. Разница будет видна на глаз. Я всё мутно объясняю, но суть в том, что пути к файлам и свойства надо хранить в БД, а папки слишком большими не делать. По анимэ у нас спец.тема есть ;) |
Цитата:
Файлы будут обрабатываться флеш-приложением, хотя над этим надо ещё хорошо подумать. А для каждой папки придётся сделать отдельную таблицу? Или можно в таблице как-то хранить не только ключи с их значениями, а ключ -> значение -> подзначение значения ? (3-уровня вложенности) Просто на виртуальном хостинге, который я хочу использовать по-началу, стоит ограничение 20 таблиц для пользователей free-аккуанта. Я пока не уверен, хватит ли мне этих 20. Или можно делать всё в одной таблице, а папки будут фигурировать только в полях 'link'? Кстати, сколько записей может выдержать таблица? А какое количество оптимально? Я имею ввиду в плане производительности в первую очередь. Под терминов 'кореллированный подзапрос' что понимается? |
Цитата:
Примерно такие поля в таблице (пусть будет main для примера): [ id | folder | filename | size | vendor | group | link ] Достаточно? Можно и ещё добавить. 3 уровня вложенности - "не понимать") Если выбирать по id, то такой код: PHP код:
PHP код:
Цитата:
Цитата:
|
Цитата:
|
Простите, я думал, что это со времён обычных 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-файла ("главная страница"), который передаёт пользовательский запрос файлу поиска и забирает результаты, чтобы их вывести (т.е. скрипт поиска освобождён от необходимости оформлять свои результаты на экране). |
Цитата:
|
Цитата:
|
Sham, согласен, этот вариант более грамотен и приемлем.
|
ManHack, извините, но у меня такой вопрос - HTML знаете? Как формы оправляются?
Цитата:
|
это зачатки объектного мышления :) автор изначально предполагает модульную структуру, но не знает пока инструментария... видимо речь идет об инклудах...
|
Насколько я понял в 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)
И я всё-равно не понимаю как организовать поиск по БД, если в формочку вводится строка с несколькими параметрам, по которым должен выполняться поиск, причём в совершенно неопределённом порядке. |
Цитата:
HTML код:
<form action='script.php' method='get'> Цитата:
Вот, например, ввели мы эту $_GET['data']. Нужно выполнить поиск по таблице table_name по полю name: PHP код:
|
1 Рисуешь формочку
2 В параметре action ставишь нужный php-файл. action="getforma.php" 3 Это пока весь getforma.php PHP код:
http://www.mysql.ru/docs/man/String_...functions.html http://dev.mysql.com/doc/refman/5.0/...functions.html http://habrahabr.ru/blogs/mysql/25646/ Coutty, :laugh: |
Цитата:
Причём пользователь вводит данные в форму разныого характера, а поиск определяет по каким полям надо искать и выдаёт наиболее соответствующие результаты. Аналогично поиску человеков на facebook/vkontakte фразой вида "Петя Васечкин Тула", выдаёт всех людишек с именем "Петя" (или его производными), фамилией "Васечкин", которые указали город "Тула". |
Есть база, в ней много полей, одни из них - name - Петя, family - Васечкин, city - Тула.
Надеюсь с формой разобрался. Тогда у нас есть переменные $pname, $pfamily, $pcity. Не путать с полями в базе. Делаем запрос - $query = "SELECT * from `user` WHERE `city`='".$pcity."' AND `family`= '".$pfamily."' AND `name` LIKE '%".$pname."%'"; $result = mysql_query($query); Далее в ман по php. |
Получается, у нас три переменных.
Я понял как забирвать из формы одну переменную, а как три забрать? Что значит слово LIKE '% в запросе? |
LIKE - это вместо "равно". Используется для поиска похожих сочетаний.
% - подстановочный знак "любое количество символов". _ - "один символ". Цитата:
И забирать: $_GET['name'], $_GET['family'], $_GET['city']. Или же $_POST['name'] я только не уверен, что можно делать имя для поля - name, если передаёте POST'ом. А чтоб в одно поле всё что угодно писать и получать результаты поиска по всей БД - это особое мастерство ;) Как вы, наверное, помните, в том же "контакте" поиск чего угодно появился не так уж и давно. Полагаю, дело там в дополнительном столбце, который содержит в себе особый индекс. Фраза, получаемая из поля ввода разбивается по пробелам и используется поиск с фразами, где слова меняются местами. Хотя это должна быть слишком высокая нагрузка на СУБД) |
А кто сказал, что там 3 переменные? Переменная одна, а вот как сделан поиск - коммерческая тайна. Можно конечно докумекать и сделать аналогично, но это будет именно аналогично, а не точно так же.
|
Цитата:
Объясните как слова по пробелам разбивать пожалуйста. И чем отличается метод GET от метода POST? |
ManHack, ручками сделай форму, обработчик формы и сравни.
|
Теперь такой вопрос: как в PHP получить системное время? А если только дату? или только час с минутами?
Как получить размер файла? (с целью записать его в MySQL таблицу) и конкретный параметр из stats(filename). А если это аудиофайл, как, скажем, обратиться к полям исполнитель или альбом? Как можно организовать ID, записываемый в таблицу, чтобы при добавлении нового файла ему присваивался именно следующий ID? |
|
Цитата:
PHP код:
Цитата:
PHP код:
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
А при добавлении записи в базу ничего не прописываешь для этой ячейки PHP код:
|
Команда
PHP код:
|
Функция просто берёт весь код из scripten.php и вставляет в то место, где вызывается, как будто этот код там и был.
|
Как найти получить максимальное достигнутое значение из поля ID таблицы?
|
ManHack,
PHP код:
|
mkdir? D_Master, температуришь? :) Или там изначально другой вопрос был?
Цитата:
|
Там был другой вопрос, который я задал, а потом нажал большую розовую кнопочку GOOGLE.
И на те, вопрос отпал ( Задача В таблице N записей (т.е. N строк). Как узнать число N? |
PHP код:
|
а почему $num[0]? ноль что значит?
|
Первый элемент массива, видимо.
mysql_fetch_array() возвращает массив. Но т.к. MySQL возвращает только одно значение, его и выбираем. |
Coutty, сам испугался, думал всё, с катушек съехал :)
|
Цитата:
Цитата:
Если нужно всего лишь подсчитать количество строк, то можно и так. PHP код:
Цитата:
|
Вложений: 2
Вот что в этом участке кода не так? Запрос выглядит хорошо, но ошибка ><
NULLик убирал (менял на константу) - без толку. (screen.jpg) А вот здесь в чём ошибка? (scree2.jpg) Хочу поставить начальное значение поля 10000, а оно не ставится. PHP код:
|
1 Писать надо $query = "INSERT ..... ", то есть в кавычках.
2 Что-то у меня сомнения, насчёт одновременной работы автоинкремента и значения по умолчанию. 3 К сожалению сайт сейчас не работает, вот кэш из гугля -http://209.85.129.132/search?q=cache:12UK7wH2hAAJ:phpfaq.ru/na_tanke+php+%D0%BD%D0%B0+%D1%82%D0%B0%D0%BD%D0%BA%D0%B5&hl=ru&ct=clnk&cd=3&client=opera Если коротко - дата на сервере. |
Цитата:
Цитата:
|
Цитата:
action="<?php print $PHP_SELF ?>" - это что такое? PHP_SELF нигде раньше описан не был... Что бы это значило? Кстати, формочка не работает (как я понял, не может обратиться к этому самому PHP_SELF) |
Цитата:
http://ru.php.net/manual/ru/id3.installation.php Цитата:
Это означает данный файл, в принципе можно было оставить и "", форма пришла бы обратно. Вообще-то надо бы писать $_SERVER['PHP_SELF']. |
Как PEAR установить?
Код:
$_SERVER['PHP_SELF'] А в чём разница, что мы _SERVER добавили? Если написать так: Код:
$_SERVER["PHP_SELF"] И что мне с PHP_SELF делать? Форма готова, нажимаю на кнопку: Код:
<form enctype="multipart/form-data" action="<?php print $PHP_SELF ?>" method="POST" > и чего? денвер посылает нафиг, а именно: Цитата:
Цитата:
Цитата:
Как сделать так, чтобы этот файл сразу складывался в определённую директорию? |
ManHack, в чём пишешь код?
|
Edit+ v3, сервер Denver с php5
|
Цитата:
Цитата:
http://ru.php.net/manual/ru/faq.usin...gister-globals Строчка должна быть такой PHP код:
Но это должно быть видно по подсветке кода. Цитата:
Цитата:
Короче, если что-то не получается - прочти инструкцию. ru.php.net - как библия. :) В следующий раз формочку желательно всю. |
Скачал я дистрибутив PEAR, скачал и go-pear.php , положил в папку с дистрибом и вывалил в home/non-existent/host
захожу через браузер, файл go-pear.php работает, но при инсталляции на 20% виснет и денвер показывает ошибку: Forbidden You don't have permission to access /viewvc.cgi/pear-core/PEAR.php on this server. там нету этого cgi-файла, вообще в дистрибе нету его! |
Время: 12:02. |
Время: 12:02.
© OSzone.net 2001-