С помощью РНР 5 разрабатываются многочисленные компоненты,
входящие в состав полнофункционального Web-сайта.
Рассматриваются работа с СУБД MySQL, вопросы защиты Web-приложений,
работа с графикой, Flash и PDF-документами.
В качестве практических примеров разработаны такие приложения,
как система администрирования контента сайта, форум,
система сбора и анализа статистики посетителей сайта,
система рассылки, FTP-менеджер, универсальный каталог продукции и др.
Книга ориентирована на читателей, знакомых с языками HTML и РНР,
но не имеющих большого опыта разработки динамических Web-приложений.
Книга рассчитана на читателей, освоивших Delphi и желающих расширить свои знания и возможности проектирования. Охвачен широкий круг вопросов, начиная с типовых решений традиционных вычислительных задач (обработка массивов, векторы, матрицы, решение систем линейных и нелинейных уравнений), и кончая приемами программирования при взаимодействии с механизмами Windows, с приложениями Microsoft Office (Word. Excel, электронной почтой), с портами. Рассматривается обработка документов различных видов. Детально обсуждаются вопросы построения графиков и диаграмм, создание и использование DLL. Излагается методика работы с удаленными модулями данных.
Рассмотренные приемы можно использовать в любых версиях Delphi, включая Delphi 2006. и при работе с любыми версиями Windows (обсуждается адаптация к версиям). В Delphi 2005 и 2006 материал книги может непосредственно использоваться в приложениях VCL Win32 и VCL .NET. Специфические приемы программирования, характерные для .NET, в книге не рассматриваются.
Книга содержит много модулей процедур и функций с подробными пояснениями, а также законченные приложения, которые можно включать в свои проекты. Даются ответы на множество вопросов, часто задаваемых пользователями Delphi на конференциях и форумах.
В книге приведены основные сведения по языку Web-программирования РНР, который позволяет решать задачи любой сложности и формировать динамические разделы сайта: форумы, гостевые книги, каталоги продукции и многое другое. Помимо синтаксиса и возможностей языка рассматривается установка и настройка Web-сервера Apache, на котором, как правило, выполняются РНР-программы.
Издание отличается от традиционных учебников тем, что оно носит не справочный, а обучающий характер. Оно рассчитано на начинающего пользователя, имеющего базовые знания о программировании.
Автор: Зольников, Д.С.
Издательство: М.: НТ Пресс
Год: 2007
Страниц: 272
Формат: djvu
Размер: 1.9 MB
ISBN: 978-5-477-00377-8
Серия или Выпуск: Самоучитель
Язык: русский
Книга представляет собой всеобъемлющее руководство по совместному применению РНР и MySQL для разработки высокоэффективных и интерактивных Web-сайтов с динамическим содержимым.
Несомненным достоинством книги является ее ориентация на решение реальных бизнес-задач, что воплощено во множестве типовых примеров, столь часто встречающихся при повседневной разработке. Среди этих примеров создание покупательской тележки для электронных магазинов, аутентификация пользователей, генерация динамических PDF-документов, разработка систем электронной почты через Web, написание систем поддержки Web-форумов. Помимо пошагового анализа реальных бизнес-примеров в книге широко рассматривается формальный синтаксис и семантика языка РНР, основы построения приложений баз данных и особенности применения объектно-ориентированной методологии при разработке приложений для Web.
Несмотря на то, что книга, в основном, рассчитана на профессиональных программистов и разработчиков, она принесет несомненную пользу и в качестве учебника для начинающих, кто совершает только первые шаги в бесконечном мире создания приложений для Internet.
В книге приведены основные сведения по языку Web-программирования РНР, который позволяет решать задачи любой сложности и формировать динамические разделы сайта: форумы, гостевые книги, каталоги продукции и многое другое. Помимо синтаксиса и возможностей языка рассматривается установка и настройка Web-сервера Apache, на котором, как правило, выполняются РНР-программы.
Издание отличается от традиционных учебников тем, что оно носит не справочный, а обучающий характер. Оно рассчитано на начинающего пользователя, имеющего базовые знания о программировании.
В данной книге содержатся все необходимые сведения для тех, кто впервые приступает к работе в сети Интернет. Здесь вы найдете ответы на основные вопросы, возникающие у новичков, и научитесь легко ориентироваться в Глобальной Сети. Вы узнаете, что такое сеть Интернет и как она появилась, как подключиться к сети и работать с браузерами, как находить нужную информацию и отфильтровывать ненужную. Кроме того, вы научитесь пользоваться электронной почтой, досками объявлений и службой почтовых рассылок, участвовать в форумах и чатах, а также зарабатывать и тратить деньги с помощью Интернет. И самое главное — узнаете, как обезопасить себя, гуляя по просторам Всемирной Паутины.
Книга предназначена для начинающих пользователей, а также для всех, кто начинает осваивать Интернет.
Автор: Якушев А.В.
Год: 2006
Страниц: 121
Формат: pdf
Размер: 5,47 Мб
Качество: хорошее
Язык: русский
Книга ориентирована как на обычных пользователей Интернета, которым нужно в кратчайшие сроки создать свой сайт, так и на разработчиков, которые заинтересованы в построении собственной системы управления сайтом. Рассмотрены три уже готовые системы управления сайтом — Joomla!, Slaed, PHP-Nuke. С позиции пользователя описывается, как установить, настроить, разработать графическую тему и расширить возможности каждой системы. Для разработчиков описано программирование собственных расширений для рассмотренных движков, а также создание собственной системы управления сайтом. Отдельное внимание уделяется защите от взлома разрабатываемой системы, а также интеграции с популярным форумом phpBB из файла задания.
Данная книга является превосходным учебным пособием, позволяющим быстро освоить и эффективно использовать РНР. Здесь вы найдете все, что для этого необходимо: от описания настройки РНР, основ CGI и базовых конструкций языка, до работы с сессиями, каналами, сокетами и другими специальными технологиями РНР. Особое место занимает рассмотрение взаимодействия РНР с базами данных. В книге рассмотрены, как MySQL, так и SQLite, поддерживаемая РНР 5.При всем при этом, книга максимально ориентирована на достижение реальных практических результатов. В деталях описано, как создать на РНР свою гостевую книгу, чат, форум, почтовую рассылку на сайте, новостную ленту и даже Интернет-магазин. Приведены готовые скрипты. Отдельно рассмотрена методика создания системы автоматического управления содержимым сайта ("движка"). Такая система позволит вам максимально упростить поддержку и обновление своего сайта.
Кроме создания своих скриптов, приведено описание профессиональных продуктов (бесплатных и открытых): форума РНРВВ и системы PHP-Nuke. Эти продукты применяются на огромном количестве сайтов и позволяют "дважды не изобретать велосипед", а использовать уже готовые решения.Книга отличается простотой и ясностью изложения материала. Написана опытным и известным автором. Лучший выбор для начинающих изучать РНР.
Администраторы, Блоки и баннеры, Комментарии, База данных, Редактор внедрений, Дополнительные поля, Группы, Каналы RSS, Сообщения, Модули, Безопасность, Конфигурации, Стили, Шаблоны, Загрузка, Пользователи
Системные модули
Вопросы и ответы, Каталог файлов, Новости, Контент, Опросы, Обратная связь, Добавить новость, Топ пользователи, Актуальные темы, RSS Информер, Рекомендовать, HTML Контент, Отдел пользователя, HTML Редактор, Бакуп базы данных.
Интеграция с форумами
Общая регистрация и авторизация с самыми популярными и актуальными на сегодняшний день форумами: Invision Power Board, phpBB, vBulletin, SMF.
Русская разработка, полностью на русском языке. Сейчас доступна для скачивания стабильная версия 0.4. Распространяется под лицензией GNU GPL. PHP+MySQL.
Имеет:
- Управление новостями - создание, редактирование, удаление категорий(с правом доступа пользователям); создание, редактирование, удаление, вывод на печать новостей; поддержка комментариев(с правом доступа пользователям) смайлики, минимум встроенных тэгов; поддержка RSS лент для категорий и сводного вывода в стандарте RSS 2.0 и Yandex-news;
- Каталог файлов - создание, редактирование, удаление категорий (с правом доступа пользователям); создание, редактирование, удаление, возможность загрузки и скачивания файлов; поддержка комментариев и рейтинга; поддержка RSS лент аналогичная новостной;
- Каталог ссылок - создание, редактирование, удаление категорий; создание, редактирование, удаление, добавление баннеров, подсчёт переходов;
- Опросы - создание, редактирование, удаление, лимитирование времени проведения опросов; поддержка комментариев;
- Мод статей - ручное клонирование; создание, редактирование, удаление категорий(с правом доступа пользователям); создание, редактирование, удаление, прикрепление файла, вывод на печать статьи; поддержка комментариев;
- А так же - шаблоны оформления; создание, редактирование, удаление статических страниц; обратная связь; интеграция с форумами; и многое другое...
В данной книге содержатся все необходимые сведения для тех, кто впервые приступает к работе в сети Интернет. Здесь вы найдете ответы на основные вопросы, возникающие у новичков, и научитесь легко ориентироваться в Глобальной Сети. Вы узнаете, что такое сеть Интернет и как она появилась, как подключиться к сети и работать с браузерами, как находить нужную информацию и отфильтровывать ненужную.
Кроме того, вы научитесь пользоваться электронной почтой, досками объявлений и службой почтовых рассылок, участвовать в форумах и чатах, а также зарабатывать и тратить деньги с помощью Интернет. И самое главное — узнаете, как обезопасить себя, гуляя по просторам Всемирной Паутины.
Книга предназначена для начинающих пользователей, а также для всех, кто начинает осваивать Интернет.
Автор: Якушев А.В.
Формат: pdf
Размер: 5,7 Мб
Качество: скан
Язык: русский
Данная статья предназначена для начинающих программистов, которые никогда не работали с потоками, и хотели бы узнать основы работы с ними. Желательно, чтоб читатель знал основы ООП и имел какой-нибудь опыт работы в Delphi.
Для начала давайте определимся, что под словом "поток" я подразумеваю именно Thread, который еще имеет название "нить". Нередко встречал на форумах мнения, что потоки не нужны вообще, любую программу можно написать так, что она будет замечательно работать и без них. Конечно, если не делать ничего серьёзней "Hello World" это так и есть, но если постепенно набирать опыт, рано или поздно любой начинающий программист упрётся в возможности "плоского" кода, возникнет необходимость распараллелить задачи. А некоторые задачи вообще нельзя реализовать без использования потоков, например работа с сокетами, COM-портом, длительное ожидание каких-либо событий, и т.д.
Всем известно, что Windows система многозадачная. Попросту говоря, это означает, что несколько программ могут работать одновременно под управлением ОС. Все мы открывали диспетчер задач и видели список процессов. Процесс - это экземпляр выполняемого приложения. На самом деле сам по себе он ничего не выполняет, он создаётся при запуске приложения, содержит в себе служебную информацию, через которую система с ним работает, так же ему выделяется необходимая память под код и данные. Для того, чтобы программа заработала, в нём создаётся поток. Любой процесс содержит в себе хотя бы один поток, и именно он отвечает за выполнение кода и получает на это процессорное время. Этим и достигается мнимая параллельность работы программ, или, как её еще называют, псевдопараллельность. Почему мнимая? Да потому, что реально процессор в каждый момент времени может выполнять только один участок кода. Windows раздаёт процессорное время всем потокам в системе по очереди, тем самым создаётся впечатление, что они работают одновременно. Реально работающие параллельно потоки могут быть только на машинах с двумя и более процессорами.
Для создания дополнительных потоков в Delphi существует базовый класс TThread, от него мы и будем наследоваться при реализации своих потоков. Для того, чтобы создать "скелет" нового класса, можно выбрать в меню File - New - Thread Object, Delphi создаст новый модуль с заготовкой этого класса. Я же для наглядности опишу его в модуле формы. Как видите, в этой заготовке добавлен один метод - Execute. Именно его нам и нужно переопределить, код внутри него и будет работать в отдельном потоке. И так, попробуем написать пример - запустим в потоке бесконечный цикл:
Запустите пример на выполнение и нажмите кнопку. Вроде ничего не происходит - форма не зависла, реагирует на перемещения. На самом деле это не так - откройте диспетчер задач и вы увидите, что процессор загружен по-полной. Сейчас в процессе вашего приложения работает два потока - один был создан изначально, при запуске приложения. Второй, который так грузит процессор - мы создали по нажатию кнопки. Итак, давайте разберём, что же означает код в Button1Click:
тут мы создали экземпляр класса TNewThread. Конструктор Create имеет всего один параметр - CreateSuspended типа boolean, который указывает, запустить новый поток сразу после создания (если false), или дождаться команды (если true).
свойство FreeOnTerminate определяет, что поток после выполнения автоматически завершится, объект будет уничтожен, и нам не придётся его уничтожать вручную. В нашем примере это не имеет значения, так как сам по себе он никогда не завершится, но понадобится в следующих примерах.
Свойство Priority, если вы еще не догадались из названия, устанавливает приоритет потока. Да да, каждый поток в системе имеет свой приоритет. Если процессорного времени не хватает, система начинает распределять его согласно приоритетам потоков. Свойство Priority может принимать следующие значения:
tpTimeCritical - критический
tpHighest - очень высокий
tpHigher - высокий
tpNormal - средний
tpLower - низкий
tpLowest - очень низкий
tpIdle - поток работает во время простоя системы
Ставить высокие приоритеты потокам не стоит, если этого не требует задача, так как это сильно нагружает систему.
Ну и собственно, запуск потока.
Думаю, теперь вам понятно, как создаются потоки. Заметьте, ничего сложного. Но не всё так просто. Казалось бы - пишем любой код внутри метода Execute и всё, а нет, потоки имеют одно неприятное свойство - они ничего не знают друг о друге. И что такого? - спросите вы. А вот что: допустим, вы пытаетесь из другого потока изменить свойство какого-нибудь компонента на форме. Как известно, VCL однопоточна, весь код внутри приложения выполняется последовательно. Допустим, в процессе работы изменились какие-то данные внутри классов VCL, система отбирает время у основного потока, передаёт по кругу остальным потокам и возвращает обратно, при этом выполнение кода продолжается с того места, где приостановилось. Если мы из своего потока что-то меняем, к примеру, на форме, задействуется много механизмов внутри VCL (напомню, выполнение основного потока пока "приостановлено"), соответственно за это время успеют измениться какие-либо данные. И тут вдруг время снова отдаётся основному потоку, он спокойно продолжает своё выполнение, но данные уже изменены! К чему это может привести - предугадать нельзя. Вы можете проверить это тысячу раз, и ничего не произойдёт, а на тысяча первый программа рухнет. И это относится не только к взаимодействию дополнительных потоков с главным, но и к взаимодействию потоков между собой. Писать такие ненадёжные программы конечно нельзя.
Синхронизации потоков
Если вы создали шаблон класса автоматически, то, наверное, заметили комментарий, который дружелюбная Delphi поместила в новый модуль. Он гласит: "Methods and properties of objects in visual components can only be used in a method called using Synchronize". Это значит, что обращение к визуальным компонентам возможно только путём вызова процедуры Synchronize. Давайте рассмотрим пример, но теперь наш поток не будет разогревать процессор впустую, а будет делать что-нибудь полезное, к примеру, прокручивать ProgressBar на форме. В качестве параметра в процедуру Synchronize передаётся метод нашего потока, но сам он передаётся без параметров. Параметры можно передать, добавив поля нужного типа в описание нашего класса. У нас будет одно поле - тот самый прогресс:
Вот теперь ProgressBar двигается, и это вполне безопасно. А безопасно вот почему: процедура Synchronize на время приостанавливает выполнение нашего потока, и передаёт управление главному потоку, т.е. SetProgress выполняется в главном потоке. Это нужно запомнить, потому что некоторые допускают ошибки, выполняя внутри Synchronize длительную работу, при этом, что очевидно, форма зависает на длительное время. Поэтому используйте Synchronize для вывода информации - то самое двигание прогресса, обновления заголовков компонентов и т.д.
Вы наверное заметили, что внутри цикла мы используем процедуру Sleep. В однопоточном приложении Sleep используется редко, а вот в потоках его использовать очень удобно. Пример - бесконечный цикл, пока не выполнится какое-нибудь условие. Если не вставить туда Sleep мы будем просто нагружать систему бесполезной работой.
Надеюсь, вы поняли как работает Synchronize. Но есть еще один довольно удобный способ передать информацию форме - посылка сообщения. Давайте рассмотрим и его. Для этого объявим константу:
В объявление класса формы добавим новый метод, а затем и его реализацию:
Используя функцию SendMessage, мы посылаем окну приложения сообщение, один из параметров которого содержит нужный нам прогресс. Сообщение становится в очередь, и согласно этой очереди будет обработано главным потоком, где и выполнится метод SetProgressPos. Но тут есть один нюанс: SendMessage, как и в случае с Synchronize, приостановит выполнение нашего потока, пока основной поток не обработает сообщение. Если использовать PostMessage этого не произойдёт, наш поток отправит сообщение и продолжит свою работу, а уж когда оно там обработается - неважно. Какую из этих функций использовать - решать вам, всё зависит от задачи.
Вот, в принципе, мы и рассмотрели основные способы работы с компонентами VCL из потоков. А как быть, если в нашей программе не один новый поток, а несколько? И нужно организовать работу с одними и теми же данными? Тут нам на помощь приходят другие способы синхронизации. Один из них мы и рассмотрим. Для его реализации нужно добавить в проект модуль SyncObjs.
Критические секции
Работают они следующим образом: внутри критической секции может работать только один поток, другие ждут его завершения. Чтобы лучше понять, везде приводят сравнение с узкой трубой: представьте, с одной стороны "толпятся" потоки, но в трубу может "пролезть" только один, а когда он "пролезет" - начнёт движение второй, и так по порядку. Еще проще понять это на примере и тем же ProgressBar'ом. Итак, запустите один из примеров, приведённых ранее. Нажмите на кнопку, подождите несколько секунд, а затем нажмите еще раз. Что происходит? ProgressBar начал прыгать. Прыгает потому, что у нас работает не один поток, а два, и каждый из них передаёт разные значения прогресса. Теперь немного переделаем код, в событии onCreate формы создадим критическую секцию:
У TCriticalSection есть два нужных нам метода, Enter и Leave, соответственно вход и выход из неё. Поместим наш код в критическую секцию:
Попробуйте запустить приложение и нажать несколько раз на кнопку, а потом посчитайте, сколько раз пройдёт прогресс. Понятно, в чем суть? Первый раз, нажимая на кнопку, мы создаём поток, он занимает критическую секцию и начинает работу. Нажимаем второй - создаётся второй поток, но критическая секция занята, и он ждёт, пока её не освободит первый. Третий, четвёртый - все пройдут только по-очереди.
Критические секции удобно использовать при обработке одних и тех же данных (списков, массивов) разными потоками. Поняв, как они работают, вы всегда найдёте им применение.
В этой небольшой статье рассмотрены не все способы синхронизации, есть еще события (TEvent), а так же объекты системы, такие как мьютексы (Mutex), семафоры (Semaphore), но они больше подходят для взаимодействия между приложениями. Остальное, что касается использования класса TThread, вы можете узнать самостоятельно, в help'е всё довольно подробно описано. Цель этой статьи - показать начинающим, что не всё так сложно и страшно, главное разобраться, что есть что. И побольше практики - самое главное опыт!
Из приложений Delphi вы можете получить доступ к .MDB-файлам Microsoft Access, используя драйверы ODBC. Delphi действительно может дать все необходимое, но некоторые вещи не столь очевидные. Вот шаги для достижения вашей цели.
Что вам нужно: Первое: проверьте, установлен ли ODBC Administrator (файл ODBCADM.EXE в WINDOWS\SYSTEM, вам также необходим файл DBCINST.DLL для установки новых драйверов и ODBC.DLL). Администратор ODBC должен присутствовать в Панели Управления в виде иконки ODBC. Если у вас его не было, то после установки Delphi он должен появиться. Если вы получаете сообщение типа "Your ODBC is not up-to-date IDAPI needs ODBC greater then 2.0", у вас имеется старая версия администратора и вы должны обновить ее до версии, включенной в поставку Delphi. Проверьте, имеете ли вы доступ к драйверу Access ODBC, установленному в Windows. Вы можете сделать это, щелкнув на "Drivers" в диалоговом окне "Data Sources", появляющемся при запуске ODBC Administrator. Delphi должна в диалоге добавить пункты Access Files (*.mdb) и Access Data (*.mdb), работающие с файлами Access 1.10 и использующие драйвер SIMBA.DLL (имейте в виду, что для данного DLL необходимы также файлы RED110.DLL и SIMADMIN.DLL, устанавливаемые для вас Delphi). Данные файлы должны поставляться с дистрибутивом вашей программы как часть ReportSmith Runtime библиотеки. Если вы хотите работать с файлами Access 2.0 или 2.5, вам необходимо иметь другой набор драйверов от Microsoft. Ключевой файл - MSAJT200.DLL, также необходимы файлы MSJETERR.DLL и MSJETINT.DLL. В США набор ODBC Desktop Drivers, Version 2.0. стоит $10.25. Он также доступен в январском выпуске MSDN, Level 2 (Development Platform) CD4 \ODBC\X86 как часть ODBC 2.1 SDK. Очевидно есть обновление этих драйверов для файлов Access 2.5 на форуме MSACCESS CompuServe. Имейте в виду, что драйвер Access ODBC, поставляемый с некоторыми приложениями Microsoft (например, MS Office) могут использоваться только другими MS-приложениями. К сожалению, они могут сыграть с вами злую шутку: сначала заработать, а потом отказать в совершенно неподходящий момент! Поэтому не обращайте внимания (запретите себе обращать внимание!) на строчку "Access 2.0 for MS Office (*.mdb)" в списке драйверов ODBC Administrator. Вы можете установить новые ODBC драйверы с помощью ODBC Administrator в Панели Управления.
Добавление источника данных ODBC (Data Source): если у вас имеются все необходимые файлы, можете начинать. Представленный здесь пример использует драйвер Access 1.10, обеспечиваемый Delphi. Используя ODBC Administrator, установите источник данных для ваших файлов Access: щелчок на кнопке "Add" в окне "data sources" выведет диалог "Add Data Source", выберите Access Files (*.mdb) (или что-либо подходящее, в зависимости от установленных драйверов). В диалоге "ODBC Microsoft Access Setup" необходимо ввести имя в поле "Data Source Name". В данном примере мы используем "My Test". Введите описание "Data Source" в поле Description. Щелкните на "Select Database" для открытия диалога "Select Database". Перейдите в директорию, где хранятся ваши Access .MDB-файлы и выберите один. Мы выберем файл TEST.MDB в директории C:\DELPROJ\ACCESS. Нажмите OK в диалоге "Setup". Теперь в списке источников данных (Data Sources) должен появиться "My Test" (Access Files *.mdb). Нажмите Close для выхода из ODBC Administrator. Используя этот метод, вы можете установить и другие, необходимые вам, источники данных.
Настройка Borland Database Engine: загрузите теперь Borland Database Engine (BDE) Configuration Utility. На странице "Drivers" щелкните на кнопке New ODBC Driver. Имейте в виду, что это добавит драйвер Access в BDE и полностью отдельное управление дополнительно к драйверам Access в Windows, устанавливаемым при помощи ODBC Administrator. В открывшемся диалоге Add ODBC Driver в верхнем поле редактировании введите ACCESS (или что-то типа этого). BDE автоматически добавит на первое место ODBC_. В combobox, расположенном немного ниже, выберите Access Files (*.mdb). Выберите Data Source в следующем combobox (Default Data Source Name), это должен быть источник данных, который вы установили с помощью ODBC Administration Utility. Здесь можно не беспокоиться о вашем выборе, поскольку позднее это можно изменить (позже вы узнаете как это можно сделать). Нажмите OK. После установки драйвера BDE, вы можете использовать его более чем с одним источником данных ODBC, применяя различные псевдонимы (Alias) для каждого ODBC Data Source. Для установки псевдонима переключитесь на страницу "Aliases" и нажмите на кнопку "New Alias". В диалоговом окне "Add New Alias" введите необходимое имя псевдонима в поле "Alias Name". В нашем примере мы используем MY_TEST (не забывайте, что пробелы в псевдониме недопустимы). В combobox Alias Type выберите имя ODBC-драйвера, который вы только что создали (в нашем случае ODBC_ACCESS). Нажмите OK. Если вы имеете более одного ODBC Data Source, измените параметр ODBC DSN ("DSN" = "Data Source Name") в списке "Parameters" псевдонима на подходящий источник данных ODBC Data Source, как установлено в ODBC Administrator. Имейте в виду, что вы не должны ничего добавлять в параметр Path (путь), так как ODBC Data Source уже имеет эту информацию. Если вы добавляете параметр Path, убедитесь, что путь правильный, в противном случае ничего работать не будет! Теперь сохраните конфигурацию BDE, выбирая пункты меню File|Save, и выходите из Database Engine Configuration Utility.
В Delphi: Создайте новый проект и расположите на форме компоненты Table и DataSource из вкладки Data Access палитры компонентов. Затем из вкладки Data Controls выберите компонент DBGrid и также расположите его на форме. В Table, в Инспекторе Объектов, назначьте свойству DatabaseName псевдоним MY_TEST, установленный нами в BDE Configuration Utility. Теперь спуститесь ниже и раскройте список TableName. Вас попросят зарегистрироваться в базе данных Access MY_TEST. Обратите внимание, что если бюджет не установлен, то User Name и Password можно не заполнять, просто нажмите на кнопку OK. После некоторой паузы раскроется список, содержащий доступные таблицы для ODBC Data Source указанного псевдонима BDE. Выберите TEST. В DataSource, в Инспекторе Объектов, назначьте свойству DataSet таблицу Table1. В DBGrid, также в Инспекторе Объектов, назначьте свойству DataSource значение DataSource1. Возвратитесь к таблице, и в том же Инспекторе Объектов установите свойство Active в True. Данные из таблицы TEST отобразятся в табличной сетке. Это все! Одну вещь все-таки стоит упомянуть: если вы создаете приложение, использующее таблицы Access и запускаете его из-под Delphi IDE, то при попытке изменения данных в таблице(ах) вы получите ошибку. Если же вы запустите скомпилированный .EXE-файл вне Delphi (предварительно Delphi закрыв), то все будет ОК. Сообщения об ошибках ODBC, к несчастью, очень туманные и бывает достаточно трудно понять его источник в вашем приложении, в этом случае проверьте установку ODBC Administrator и BDE Configuration Utility, они также могут помочь понять источник ошибки. Для получения дополнительной информации обратитесь к ODBC 2.0 Programmer's Reference или SDK Guide от Microsoft Press (ISBN 1-55615-658-8, цена в США составляет $24.95). В этом документе вы получите исчерпывающую информацию о возможных ошибках при использовании Access-файлов посредством ODBC. Также здесь вы можете найти рапорты пользователей о найденных ошибках, в том числе и при использовании Delphi. Более того, я выяснил, что большинство описанных проблем возникает при неправильных настройках ODBC, т.е. те шаги, которые я описал выше. Надеюсь, что с развитием технологии доступа к базам данных такие сложности уйдут в прошлое. Кроме того, имейте в виду, что если вам необходимо создать новую таблицу Access 1.10, вы можете воспользоваться Database Desktop, включаемый в поставку Delphi.
Авторы данной технологии Ralph Friedman (CompuServe 100064,3102), Bob Swart и Chris Frizelle.
Взято из Советов по Delphi от Валентина Озерова
--------------------------------------------------------------------------------
Может кто-нибудь, предпочтительно из персонала Borland, ПОЖАЛУЙСТА, дать мне ПОЛНЫЙ рассказ о том, как с помощью Delphi и сопутствующего программного обеспечения получить доступ и работать с базами данных MS Access. Среди прочего, мне необходимо узнать...
Нижеследующая инструкция в точности повторяет ту технологию, с которой я работаю на данный момент, надеюсь, что это поможет.
Драйвер ODBC, предусмотренный для доступа к Access 2.0, разработан только для работы в пределах среды Microsoft Office. Для работы со связкой ODBC/Access в Delphi, вам необходим Microsoft ODBC Desktop Driver kit, part# 273-054-030, доступный через Microsoft Direct за $10.25US (если вы живете не в США, воспользуйтесь службой WINEXT). Он также доступен в январском выпуске MSDN, Level 2 (Development Platform) CD4 \ODBC\X86 как часть ODBC 2.1 SDK. Имейте в виду, что смена драйверов (в частности Desktop Drivers) может негативно сказаться на работе других приложений Microsoft. Для информации (и замечаний) обращайтесь в форум WINEXT.
Также вам необходимы следующие файлы ODBC:
Минимум:
ODBC.DLL 03.10.1994, Версия 2.00.1510
ODBCINST.DLL 03.10.1994, Версия 2.00.1510
ODBCINST.HLP 11.08.1993
ODBCADM.EXE 11.08.1993, Версия 1.02.3129
Рекомендуется:
ODBC.DLL 12.07.1994, Версия 2.10.2401
ODBCINST.DLL 12.07.1994, Версия 2.10.2401
ODBCINST.HLP 12.07.1994
ODBCADM.EXE 12.07.1994, Версия 2.10.2309
Нижеследующие шаги приведут вас к искомой цели:
1. Используя администратора ODBC, установите источник данных (datasource) для вашей базы данных. Не забудьте задать путь к вашему mdb-файлу. Для нашего примера создайте источник с именем MYDSN.
2. Загрузите утилиту BDE Configuration.
3. Выберите пункт "New Driver".
4. Назначьте драйверу имя (в нашем случае ODBC_MYDSN).
5. В выпадающем списке драйверов выберите "Microsoft Access Driver (*.mdb)
6. В выпадающем списке имен выберите MYDSN
7. Перейдите на страницу "Alias" (псевдонимы).
8. Выберите "New Alias" (новый псевдоним).
9. Введите MYDSN в поле имени.
10. Для Alias Type (тип псевдонима) выберите ODBC_MYDSN.
11. На форме Delphi разместите компоненты DataSource, Table, и DBGrid.
12. Установите DBGrid1.DataSource на DataSource1.
13. Установите DataSource1.DataSet на Table1.
14. Установите Table1.DatabaseName на MYDSN.
15. В свойстве TableName компонента Table1 щелкните на стрелочку "вниз" и вы увидите диалог "Login". Нажмите OK и после короткой паузы вы увидите список всех имен ваших таблиц. Выберите одно.
16. Установите свойство Active Table1 в True и данные вашей таблицы появятся в табличной сетке.
С появлением и продвижением микрософтом OLE DB и реализацией в Дельфи ADO (начиная с версии 5.0) работа с MS Access через ODBC перестала быть актуальной. За исключением особых случаев рекомендуется пользоваться именно ADO линейкой компонентов для связи с MS Access
chmod играет важную роль при программировании на языке php. Особого внимания заслуживают случаи работы с файлами, особенно при настройке движков сайтов (CMS), форумов, гостевых книг и пр. Заметим, что chmod используется языком php только в Unix-подобной операционной системе, для которой и описаны приведенные ниже примеры. Заметим, что хостинг, в основном, базируется на Unix-подобной операционной системе.
В этих примерах показаны только принципы программирования в php при работе с chmod. В силу особенностей языка php права доступа в нем записывается только в числовом формате, поэтому рекомендуем символьный формат chmod предварять символом 0.
Читатели должны осознавать тот факт, что при программировании они должны использовать функции для определения наличия проверяемого файла, наличия переменных, приведения типов и пр.
Изменение chmod
chmod можно выставлять средствами языка php. Это можно делать только на уровне файловой системы сервера; изменение chmod для удаленных файлов не допускается.
Функция chmod() пытается изменить права доступа для filename на указанные в параметре mode. В случае успешного завершения функция возвращает true, в случае ошибки функция возвращает false. Поскольку числовой формат записи chmod является восьмеричным числом значение параметра mode рекомендуется предварять симоволом 0.
В указанном примере первая функция установит chmod 644 для файла /contacts/index.php. Вторая функция возвратит false, так как нельзя указавать в качестве параметра удаленные файлы. Третья функция установит chmod 467 для каталога /contacts/; во избежание недоразумений лучше всегда записывать в качестве второго параметра восьмеричное число, предваряя его симоволом 0. Четвертая фунция возвратит false, так как в качестве второго параметра обятельно надо указывать числовое значение.
Определение chmod
Для определения chmod воспользуемся функцией fileperms().
Функция fileperms() возвращает информацию о filename либо false в случае ошибки. Заметим, что получение информации об удаленных файлах не допускается.
Функция fileperms() возвращает больше информации, чем нам требуется (ее мы не будем затрагивать). Нам требуется определить последние 9 бит. Для этого воспользуемся логическим оператором & и функцией decoct().
Обращаем внимание, что функция decoct() возвращает переменную строкового типа (в которой записаны права доступа в числовом формате), поэтому при использовании полученных результатов в функции chmod() необходимо либо использовать функцию octdec(), либо не использовать функцию decoct(). Приведенные ниже два примера эквивалентны.
В приведенном выше примере в переменной $perms записана строка, состоящая из трех символов. Данный способ необходимо использовать в случаях, когда необходимо получить chmod в числовом формате, а затем использовать переменную для изменения chmod.
Данный пример предпочтительнее предыдущему, его необходимо использовать в случаях, когда переменная $perms используется исключительно для изменения прав доступа без промежуточных действий.
Я очень часто встречаю вопрос типа "Как удалить определенную строку из файла?". Народ совсем не хочет шевелиться, ведь так легко зайти на любой крупный форум по PHP, и в сроке поиска написать что-то типа "Удаление строк из файла". Пятерка результатов гарантирована. Итак, в первой части статьи мы как раз рассмотрим способ удаления определенной строки из текстового файла.
Для начала было бы совсем не плохо создать текстовый файл. Назовём его file.txt, который будет состоять из строк, которые мы будем удалять:
Затем создаём что-нибудь типа file.php, занимающий около 11 строк!
Сначала определимся, что для удаления определенной строки нам нужен её номер. Его мы будем передавать с идентификатором id: file.php?id=2 (удалим строку под номером ТРИ, так как исчисления элементов в массиве ведётся с нуля, но позже мы это сгладим).
- функция file() считывает весь файл в массив (каждая строка - это его элемент);
- $id-вычитает один из нашего идентификатора, так что 2 становится 2, а 3 - 3;
- unset($file[$i]) удаляет или обнуляет элемент массива (но только из памяти, т. е. виртуально:);
- implode() объединяет массив в одну строку. Это очень важно, так как если бы это опустили, наш файл бы похудел до бесполезной записи Array