Вторник, 01-Июля-2025, 6.10 AM

Dletemplate.ru

Категории раздела
Html [7]
HTML-redactor [2]
CSS [10]
SSI [5]
XML [4]
JavaScript [10]
PHP [9]
Perl [5]
ASP [3]
MySQL [5]
Apache [6]
Раскрутка сайта [15]
Наш опрос
Сколько тебе лет?
Всего ответов: 350
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Статьи

Главная » Статьи » PHP

Советы и трюки по 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. В поисках идеала

Если решения выглядят для Вас комплексно, то наверняка найдется более простой и очевидный подход к решению задачи.

Категория: PHP | Добавил: mas (19-Сентября-2006)
Просмотров: 38547 | Комментарии: 268 | Рейтинг: 0.0/0
Всего комментариев: 151 2 »
15 Ramonnak  
0
Приветственные бонусы и промоакции 1xBet 2025
Используйте <a href=https://diplomilirist.ru/news/1xbet_promokod_besplatno__1.html>промокод в 1хбет на фриспины</a> чтобы получить гарантированный бонус в размере 100% до 32500 рублей (или эквивалентную сумму в другой валюте €130). Это предложение доступно только для новых пользователей.
Воспользуйтесь этим кодом, чтобы получить бонус от 1хбет. Просто введите код в анкете при регистрации и пополните свой счет на сумму от 100 рублей. Вам будет начислен бонус в размере 130%, который может достигать до 32500 рублей.

У нас вы можете получить бесплатный промокод, который даст вам дополнительные бонусы и преимущества при игре на сайте 1xBet. Для того чтобы воспользоваться этим промокодом, вам необходимо зарегистрироваться на сайте и пройти процедуру верификации. После этого вы сможете получить бонус по промокоду или при пополнении счета. Также вы можете получить бонус, если пригласите друга или примете участие в определенных акциях.

14 ftaletpfnv  
0
amoxil and flagyl together amoxicillin course for tooth infection <a href="https://healtthexxpress.com/">dose of amoxicillin for cats</a> amoxicillin 125mg 5ml side effects can amoxicillin capsule be opened

13 istochniki_lzet  
0
Как выбрать источник бесперебойного питания, разберитесь.
Рейтинг лучших ИБП, читайте.
Почему стоит купить ИБП, здесь.
Топ-5 ИБП для защиты техники, на нашем сайте.
Все о ИБП, в нашем обзоре.
Как не ошибиться при выборе ИБП, с нашими рекомендациями.
Обзор актуальных источников бесперебойного питания, обратите внимание.
Как работает источник бесперебойного питания, на нашем сайте.
Советы по использованию ИБП, узнайте.
Инновации в области источников бесперебойного питания, ознакомьтесь.
Основные рекомендации по использованию ИБП, в нашем гиде.
Идеальные источники бесперебойного питания для бизнеса, ознакомьтесь.
Инсайдерские советы по выбору источников бесперебойного питания, получите советы.
Рейтинг популярных источников бесперебойного питания, узнайте.
Пошаговая инструкция по установке ИБП, в нашем материале.
Идеальные решения для бесперебойного питания, ознакомьтесь.
Ремонт источников бесперебойного питания: основные советы, получите советы.
Рейтинг лучших ИБП для геймеров, здесь.
Топ-10 источников бесперебойного питания на рынке, узнайте.
заказать ИБП <a href=https://istochniki-bespereboynogo-pitaniya.ru#заказать-ИБП>https://istochniki-bespereboynogo-pitaniya.ru</a> .

12 HcproxyXy  
0
Оптимальные параметры для работы – бери лучшие прокси. vip-1579ip.kupit-proxy-ipv4.ru

11 ptaletovpk  
0
prednisone probiotics <a href=https://prednimed.com/>prednisone</a> prednisone to methylprednisolone conversion

prednisone medication administration https://prednimed.com/ - dose of prednisone for gout

10 IrinaCAG  
0
https://clck.ru/36Ew9z

9 Annabete  
0
Ηеllоǃ
Реrhaps my mеsѕagе iѕ tоo ѕреcіfiс.
Βut mу older sіѕtеr fоund а wonderful man hеre and thеy hаve а great relаtiоnshіp, but whаt аbоut mе?
I аm 24 уеаrѕ old, Annа, frоm thе Czeсh Republiс, knоw English lаnguage аlsо
Аnd... better tо saу it immediately. Ι аm biѕеxual. Ι am nоt ϳeаlous оf anоther woman... espесіallу іf wе makе lovе tоgethеr.
Аh уes, I сook verу tastу! and I lоve not only cоok ;))
Ιm rеаl girl and lоoking fоr sеriоuѕ and hоt rеlationshіp...
Anуwаy, уou саn find my рrofіlе hеre: http://gg.gg/18ysxx

8 FrbetCrery  
0
not working

7 IrinaCAG  
0
https://clck.ru/36EvmN

6 Robertpuh  
0
https://clck.ru/36Evoy

1-10 11-15
Имя *:
Email *:
Код *: