Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
if (session_id()==null) {
session_start();
}
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php
Правило №8: наиболее частая операция в web, как ни крути, — это SELECT, а там индексы помогают.Помогать-помогают, но время записи в таблице увеличивается и иногда их лучше вынести в отдельную таблицу и делать выборку по ней. Во время записи в БД таблица блокируется, добавляется запись и обновляются индексы и только после этого все остальные могут ее читать. Следовательно, чем больше индексов, тем больше потребуется времени для их обновления.
Помогать-помогают, но время записи в таблице увеличивается и иногда их лучше вынести в отдельную таблицу и делать выборку по ней. Во время записи в БД таблица блокируется, добавляется запись и обновляются индексы и только после этого все остальные могут ее читать. Следовательно, чем больше индексов, тем больше потребуется времени для их обновления.
#если включен mod_rewrite
«IfModule mod_rewrite.c»
#включить движок Rewrite
RewriteEngine on
#применять RewriteRule, если запрашиваемое имя файла не совпадает с именем какого-нибудь реального файла на сервере
RewriteCond %{REQUEST_FILENAME} !-f
#и не совпадает с именем какой-нибудь реальной директории
RewriteCond %{REQUEST_FILENAME} !-d
#переадресация запроса на index.php в виде параметра
RewriteRule ^(.*)$ index.php? do=$1 [L, NA]
#конец блока настроек модуля
«/IfModule»
pdf|php|js|ico|txt|gif|jpg|png|css|rss|zip|tar\.gz
[IfModule mod_rewrite.c]
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA, L]
[/IfModule]
«не используйте memcached — на другом сервере его может не быть. Как и MySQL.»
А масштабируемый код, думаю, по другим принципам пишется:)
500 Servlet Exception
one.ejb.control.client.ControllerFailureException: Can not obtain allowed
EJB service provider.
at one.app.community.dk.model.AWebModel.get(AWebModel.java:516)
at one.app.community.dk.model.AWebModel.handleEvent(AWebModel.java:444)
at one.app.community.dk.model.AWebModel.performLogin(AWebModel.java:280)
at one.app.community.dk.model.AWebModel.performLoginUser(AWebModel.java:268)
at one.app.community.dk.servlet.DesktopServlet.handleNotLoginnedException(DesktopServlet.java:240)
at one.app.community.dk.servlet.DesktopServlet.doPost(DesktopServlet.java:99)
at one.app.community.dk.servlet.DesktopServlet.doGet(DesktopServlet.java:54)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:126)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:103)
at com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java:96)
at one.app.community.filter.BufferingFilter.doFilter(BufferingFilter.java:85)
at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88)
at com.caucho.http.filter.GzipFilter.doFilter(GzipFilter.java:128)
at com.caucho.server.http.FilterChainFilter.doFilter(FilterChainFilter.java:88)
at com.caucho.server.http.Invocation.service(Invocation.java:315)
at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:253)
at com.caucho.server.http.HttpRequest.handleConnection(HttpRequest.java:170)
at com.caucho.server.TcpConnection.run(TcpConnection.java:139)
at java.lang.Thread.run(Thread.java:619)
Что значит не поддерживает? Не сумели настроить или что? Нет — идите книги читайте как настроить httpd (или что там еще).
Нет, не поэтому. Потому что когда вы делаете include вы будете точно знать где файл ищется. На phpclub.ru где-то есть прекрасная статья об использовании полных путей.
Снова таки, не в том дело. Не в том дело, что гугл аналитикс молодец. А в том, что делать статистику можно внешним js-файлом (да да, так же, как и гугл аналитикс). Это позволяет погрузить статистику (в будущем, если надо!) на другой сервак, + если тот сервак упадёт (или вообще статистику отключить) — ничего не случится с сайтом.
Или (туда же):
> т.к. другой веб-сервер не поддерживает .htaccess
Что значит не поддерживает? Не сумели настроить или что? Нет — идите книги читайте как настроить httpd (или что там еще).
Вот еще замечание:
> использовать полные пути при работе с файлами и хранить пути к папкам в конфиге
> т.к. статику обычно переносят на другой сервер
Нет, не поэтому. Потому что когда вы делаете include вы будете точно знать где файл ищется. На phpclub.ru где-то есть прекрасная статья об использовании полных путей.
Нет, но для меня проще изначально определиться чего я хочу и поставить любимый веб-сервер (если сайт написан с кучей мод_реврайтов апача кому в голову придет устанавливать на новом серваке не апач а нгикс??? Киньте в него камнем!)Одна из самых страшных ошибок в вебе — недооценка перспектив роста популярности. Я на этом уже обжигался :)
Вы читаете чей-то код и видите использование класса Foo. Хотите его найти. Придется читать (или дебажить) загрузчик
Еще запутанность. У вас структура такова, что класс Zend_View_Abstract хранится в classes/Zend/View/Abstract.php, в то же время класс из другого фрэймворка, называющийся someFooBar хранится в classes/someframework/FooBar.php. Это усложняет загружчик. А еще и Smarty надо бы, а еще и PEAR, который где-то в include_path. А еще модели хранятся отдельно, интерфейсы отдельно, контроллеры отдельно, view отдельно.
А вдруг IDE некорректно пропарсит файлы и покажет вам другой файл с классом с тем же именем?А вдруг завтра небо нам на головы упадёт? :) Кроме того, классов с одинаковым именем в пределах одного проекта не должно существовать…
<code>if (array_key_exists('foo', $_GET)) { print $_GET['foo']; }</code>при разделении например модель-вид-контроллер (чем хвастают большинство фреймворков и цмс) — работать с этими массивами предстоит только контроллеруМежду прочим, не факт. Простейший пример — страница с результатами поиска, на которой необходимо написать что-то типа «вы искали: сиськи третьего размера»). Можно, конечно, передавать поисковый запрос из контроллера, не могу сказать, что это неправильно. Но с другой стороны — это, как ни крути, логика отображения. Если надпись захочется убрать, ничего не поломается. Тогда зачем передавать лишние данные? :)
Я почему-то считаю это правильным — сначала получить необходимые данные из суперглобальных массивов в переменные, привести к нужным типам, сделать необходимые проверки на правильность их содержимого и уже затем с этими переменными работатьЯ когда-то, много лет назад, делал так же. Потом, когда переменных становилось всё больше, понял, что надо что-то менять… :)
и не забывайте, что во время записи лочится таблица
Правило #11: PHP, все-таки, объектно-ориентированный язык, поэтому обращайтесь не напрямую к серверным переменным ($_SERVER, $_POST, $_GET, $_SESSION) — используйте объекты
Правило #5: не бойтесь кэшировать контент в файлы, статическая html-ка отдается быстрее чем php-скрипт открывающий файл с кэшем на диске
Советы для разработчиков CMS и фреймворков на PHP