Есть вопрос?
Зайди на форум

Поиск на сайте: Advanced

Denix - новый дистрибутив Linux. Русификация Ubuntu и установка кодеков

dkws.org.ua
Форум сайта dkws.org.ua
 
Главная    ТемыТемы    АльбомАльбом    РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Советы и трюки по PHP

 
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP
 
Автор Сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Вс Dec 10, 2006 2:14 pm    Заголовок сообщения: Советы и трюки по PHP
Ответить с цитатой

Небольшое вступление

Началом написания серии статей "Советы и трюки" послужил отчет "Tips and Tricks" Расмуса Лирдофа (Rasmus Lerdorf) с конференции PHPCon2002, которая состоялясь 24 октября 2002 года в городе Milbrae, Калифорния, США. Изначально планировалось просто перевести отчет по просьбам членов Клуба разработчиков PHP, но по мере чтения статей возникло много спорных вопросов и разногласий с автором, поэтому я постарался как можно более четко определить и разъяснить преимущества и недостатки того, или иного подхода оптимизации решений.

Часть 1. Оптимизация

1. Без необходимости не используйте регулярные выражения.

В PHP кроме регулярных выражений существует большое количество функций по обработке текста, которые в некоторых случаях могут заменить их, экономя при этом ресурсы сервера.

Неправильно: <? $new = ereg_replace("-","_",$str); ?>
Правильно: <? $new = str_replace("-","_",$str); ?>
Неправильно: <? preg_match("/(\..*?)$/",$str,$reg); ?>
Правильно: <? substr($str,strrpos($str,)); ?>

2. Используйте ссылки при обработке больших массивов данных для экономии памяти сервера.

Работа со ссылками (references) является более приемлемой при обработке больших объемов информации, хотя и немного медленней, чем работа с копией, но использует меньший объем памяти. Поэтому Вы должны самостоятельно определить, запасы каких ресурсов на сервере более рационально использовать - процессора или памяти.

3. Постоянные (persistent) соединения с БД

Некоторые БД более медленно выполняют создание новых соединений, чем другие БД. Чем дольше происходит создание нового соединения, тем больший смысл имеет использовать постоянное соединение с БД. Но учтите, что постоянные соединения связывают и используют ресурсы сервера, даже тогда, когда эти соединения простаивают.

Учтите, в PHP реализована функция отключения постоянных соединений, поэтому если у провайдера в конфигурации PHP установлена директива mysql.allow_persistent = Off, то соединения вызываемые функцией mysql_pconnect() будут обрабатываться как mysql_connect().

Очень часто встречаются советы не использовать постоянные соединения с БД. Это связано в первую очередь с тем, что многопоточные веб-сервера, к которым относится и Apache, не могут разделить со своими потомками соединение с БД. Таким образом если следующий запрос приходит на другого потомка, то он создает новое постоянное соединение, что со временем приводит к появлению большого количества незакрытых соединений с БД и переполнению допустимого лимита max_connections в MySQL. Возможно два решения этой проблемы: первое описано выше заключается в запрете использования постоянных соединений, второе - использовать малое значение времени жизни постоянного соединения в директиве wait_timeout конфигурации MySQL. По умолчанию оно составляет 28800 сек. (8 часов), по истечению которых после отсутствия активности соединения будет закрыто.

Помимо всего этого существуют еще некоторые проблемы постоянных соединений с транзакциями и блокировками таблиц. Так, если таблица блокируется запросом на транзакцию или LOCK TABLE и при этом скрипт заканчивает свое выполнение до завершения транзакции или выполнения разблокировки таблицы UNLOCK TABLE соответственно, то вторичная попытка доступа к таблице через это же постоянное соединение будет отклонена. При использовании непостоянного соединения с БД, при завершении скрипта соединение закрывается автоматически и при этом снимает блокировку со всех таблиц и завершает все транзакции. Решением этой проблемы есть регистрации функции register_shutdown_function() которая бы по завершению скрипта снимала блокировку с таблиц и завершала транзакции.

Так что можете использовать, а можете и не использовать, все зависит от поставленных задач.

4. Используешь MySQL? Проверь mysql_unbuffered_query()

Небуферезированные запросы к БД MySQL применяется так же как и mysql_query(). Разница заключается в том, что вместо того, чтоб ожидать полного окончания запроса сохранить результат в клиентском API, небуферизированный запрос делает доступными результаты своего выполнения как можно скорее, минуя буферизацию в клиентском API. Таким образом Вы получаете боле быстрый доступ к данным с меньшими затратами памяти. Недостатком использования такого типа запросов является невозможность получить доступ к функции mysql_num_rows(),этои запросы медленнее на маленьких выборках SELECT, а также хотелось бы заметить то, что при выполнении любого другого запроса, все данные которые небыли выведены, будут потеряны.

5. В поисках идеала

Если решения выглядят для Вас комплексно, то наверняка найдется более простой и очевидный подход к решению задачи.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Артур

Новенький


Зарегистрирован: 14.10.2007
Сообщения: 14

СообщениеДобавлено: Вт Ноя 06, 2007 9:55 am    Заголовок сообщения:
Ответить с цитатой

Как создать новую страницу в PHP программно.Допустим хочу создавать страничку каждому зарегестрированному пользвателю в системе.Планируется что в дальнейшем пользователь сама будет настраивать ее на свой вкус и лад.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Вт Ноя 06, 2007 12:29 pm    Заголовок сообщения:
Ответить с цитатой

В кукисах храните номер выбранного дизайна (дизайна, который выбрал пользователь), затем просто выводите нужный HTML-код, который соотвествует дизайну пользователя
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Maxim

Участник тусовки


Зарегистрирован: 22.02.2006
Сообщения: 245

СообщениеДобавлено: Вт Ноя 06, 2007 1:03 pm    Заголовок сообщения:
Ответить с цитатой

Артур, глобальный вопрос. Idea
Ну, на самом деле, достигаться результат может поразному. Например, составить страницу на основе шаблонов, позволить пользователю настраивать цвета, шрифты, фон и прочее оформление, затем хранить все настройки в базе данных или кукис... хотя кукис не самое надёжное место для длительного хранения... потом при входе вытаскивать настройки из БД и пихать в переменные сессии или в сеансовый куки. Так работают почти все ЖЖ. Скажи поведение какого сайта ты хочешь скопировать, будет понятнее.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Артур

Новенький


Зарегистрирован: 14.10.2007
Сообщения: 14

СообщениеДобавлено: Вт Ноя 06, 2007 4:03 pm    Заголовок сообщения:
Ответить с цитатой

Ну например я хочу сделать что-то похожее на сайт vkontakte.ru ну только очень упрощенное.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Вт Ноя 06, 2007 4:50 pm    Заголовок сообщения:
Ответить с цитатой

Можно еще шаблоны (TPL) использовать - самый оптимальный вариант. О шаблонах сказано тут:

Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Артур

Новенький


Зарегистрирован: 14.10.2007
Сообщения: 14

СообщениеДобавлено: Пн Ноя 26, 2007 9:04 am    Заголовок сообщения:
Ответить с цитатой

Вопрос такой:Имеется массив в нем содержится по порядку числа от 1 до 20. Есть ли какая нибудь функция которая отсортирует числа в массиве в случайном порядке?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Пн Ноя 26, 2007 9:12 am    Заголовок сообщения:
Ответить с цитатой

Есть - shuffle(). См. стр. 199

Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Артур

Новенький


Зарегистрирован: 14.10.2007
Сообщения: 14

СообщениеДобавлено: Чт Ноя 29, 2007 1:28 pm    Заголовок сообщения:
Ответить с цитатой

Использую mysql 4, php5, apache.Имеется интерфейс создания таблицы.Как узнать имеется ли таблица с заданным именем перед ее созданием?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Чт Ноя 29, 2007 4:43 pm    Заголовок сообщения:
Ответить с цитатой

А зачем? Ты просто создаешь, а потом анализируешь код ошибки )
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Артур

Новенький


Зарегистрирован: 14.10.2007
Сообщения: 14

СообщениеДобавлено: Чт Ноя 29, 2007 4:50 pm    Заголовок сообщения:
Ответить с цитатой

просто когда таблица с заданным именем уже имеется она почемуто заменяется новой
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Чт Ноя 29, 2007 4:52 pm    Заголовок сообщения:
Ответить с цитатой

обычно этого не должно происходить...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Чт Ноя 29, 2007 4:56 pm    Заголовок сообщения:
Ответить с цитатой

Как вариант можешь выполнить select * from <table> и потом анализировать код ошибки. Если все ок, значит таблица существует.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Serhiy




Зарегистрирован: 04.12.2007
Сообщения: 3

СообщениеДобавлено: Чт Dec 06, 2007 12:51 pm    Заголовок сообщения:
Ответить с цитатой

Я не могу розобратся. я купил книгу, в ней пишет автор что на етом сайте ксть к книге ссылки, но я их не нашол! где они????
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Чт Dec 06, 2007 3:49 pm    Заголовок сообщения:
Ответить с цитатой

Автор - это я

Цитата:

где они????

значит плохо искал!

Вот они:

http://www.dkws.org.ua/index.php?page=show&file=mybooks/php/index
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Показать сообщения:   
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP Часовой пояс: GMT
Страница 1 из 1
 Главная страница сайта
 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
© Колисниченко Денис