<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SE-оптимизация на PHP</title>
	<atom:link href="http://seo-php.net/feed" rel="self" type="application/rss+xml" />
	<link>http://seo-php.net</link>
	<description>Оптимизация сайта для поисковых систем, используя php</description>
	<lastBuildDate>Fri, 21 Oct 2011 03:14:02 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Как подключить к старой теме WordPress новые меню?</title>
		<link>http://seo-php.net/kak-podklyuchit-k-staroy-teme-wordpress-novyie-menyu</link>
		<comments>http://seo-php.net/kak-podklyuchit-k-staroy-teme-wordpress-novyie-menyu#comments</comments>
		<pubDate>Fri, 21 Oct 2011 03:05:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Хаки]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[меню]]></category>
		<category><![CDATA[хаки]]></category>

		<guid isPermaLink="false">http://seo-php.net/?p=90</guid>
		<description><![CDATA[В данной статье мы рассмотрим технический приём, который позволит использовать в старой теме для популярного движка под названием WordPress новое настраиваемое меню, ставшее доступным с выходом версии WordPress 3.0. Для того, чтобы подключить его в тему нужно вставить в файл functions.php следующий код: if (function_exists('add_theme_support')) { add_theme_support('menus'); } А затем в файл header.php или в [...]<p>© 2012 <a href="http://seo-php.net">SE-оптимизация на PHP</a>. Все права защищены.</p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">В данной статье мы рассмотрим технический приём, который позволит использовать в старой теме для популярного движка под названием WordPress новое настраиваемое меню, ставшее доступным с выходом версии WordPress 3.0.</p>
<p style="text-align: justify;"><span id="more-90"></span>Для того, чтобы подключить его в тему нужно вставить в файл functions.php следующий код:</p>
<pre>if (function_exists('add_theme_support')) {

add_theme_support('menus');

}</pre>
<p style="text-align: justify;">А затем в файл header.php или в какой-либо другой, где будет находится меню вставить этот код:</p>
<pre>wp_nav_menu('menu=IDменю');

Вот, и все.</pre>
<p>© 2012 <a href="http://seo-php.net">SE-оптимизация на PHP</a>. Все права защищены.</p>]]></content:encoded>
			<wfw:commentRss>http://seo-php.net/kak-podklyuchit-k-staroy-teme-wordpress-novyie-menyu/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ссылочная ценность</title>
		<link>http://seo-php.net/ssyilochnaya-tsennost</link>
		<comments>http://seo-php.net/ssyilochnaya-tsennost#comments</comments>
		<pubDate>Sun, 26 Jun 2011 22:07:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Основы SEO]]></category>
		<category><![CDATA[оптимизация]]></category>
		<category><![CDATA[продвижение]]></category>
		<category><![CDATA[ссылочная масса]]></category>
		<category><![CDATA[цитирование]]></category>

		<guid isPermaLink="false">http://seo-php.net/?p=56</guid>
		<description><![CDATA[Без ссылок всемирная паутина была бы просто набором каких-то несвязанных между собой документов. Ведь именно ссылки обеспечивают возможность создания структуры отображаемой информации. При чем, как в явной, так и в неявной форме. Например, если на веб-страничку вашего сайта было проставлено множество ссылок с других интернет-ресурсов, то это может для поисковиков означать, что данная страница несет  [...]<p>© 2012 <a href="http://seo-php.net">SE-оптимизация на PHP</a>. Все права защищены.</p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Без ссылок всемирная паутина была бы просто набором каких-то несвязанных между собой документов. Ведь именно ссылки обеспечивают возможность создания структуры отображаемой информации.</p>
<p style="text-align: justify;"><span id="more-56"></span>При чем, как в явной, так и в неявной форме. Например, если на веб-страничку вашего сайта было проставлено множество ссылок с других интернет-ресурсов, то это может для поисковиков означать, что данная страница несет  более важную информацию, нежели та, на которую было указано заметно меньшее количество линков. Безусловно, стоит отметить, что при этом поисковики обращают также внимание на сайты, которые ссылаются на вашу страничку, на их тематику, на их контент и на массу других факторов. В совокупности из множества показателей и различных особенностей ссылочной массы и вычисляется степень важности вашей странички. Также важны и анкоры ссылок.</p>
<p style="text-align: justify;"><strong>Анкор ссылки</strong> &#8212; это текст, который заключен между тегами &lt;a&gt; и &lt;/a&gt;. Вот, например в HTML-коде:</p>
<pre class="brush: php; title: ; notranslate"> &lt;a href=&quot;http://seo-php.net&quot;&gt;SE-оптимизация на PHP&lt;/a&gt; </pre>
<p>анкором выступает фраза &#171;SE-оптимизация на PHP&#187;, которая будет видна в таком виде:</p>
<p style="text-align: center;"><a href="http://seo-php.net">SE-оптимизация на PHP</a></p>
<p style="text-align: justify;">Для поисковых систем это означает, что указанная  страница посвящена поисковой оптимизации на PHP.</p>
<p style="text-align: justify;">Ссылки определяют ценность интернет-страничек именно поэтому они играют ключевую роль в поисковой оптимизации. Именно поэтому есть такое понятие, как &#171;ссылочная ценность&#187;.</p>
<p style="text-align: justify;"><em><strong>Ссылочная ценность</strong> &#8212; является ценностью, которая передается другой страничке данной ссылкой.</em></p>
<p style="text-align: justify;">Стоит отметить, что среди огромного количества факторов, учитывающихся в сложных алгоритмах поисковых систем при вычислении ранга вебсайта можно сказать, что ссылочная ценность является, пожалуй одним из самых значимых, если даже не лидирующих  параметров. <strong> </strong></p>
<p style="text-align: justify;"><strong>Ссылочная ценность может проявляться в следующих аспектах:</strong></p>
<ol>
<li style="text-align: justify;"><span style="text-decoration: underline;">Ценность для ранжирования сайтов в поисковой выдаче.</span> Современные поисковики используют для определения полезности и релевантности вебстраниц такие показатели, как качество и количество ссылок. Интернет-сайт, у которого будет хорошая в этом отношении оценка сможет получить весьма неплохой ранг. Поэтому, можно сказать что URL-адрес наряду со своим содержимым имеет и экономическое значение. В то время, как сам контент, составляет ценность этого адреса. Однако при переносе информации на другой URL не будет переноситься его ценность, т.к. все ссылки с других сайтов будут указывать на старый адрес, который без какого-либо контента будет скорее всего просто удален или заметно упадет в позициях. Для того, чтобы решить эту проблему можно дать понять поисковикам, куда же был перенесен контент сделав перенаправление (редирект), с сообщение кода ошибки 301, что может в результате привести к переносу его ценности.  Однако без правильно сделанного  редирект поисковой системе не удастся сообщить, что все другие ссылающиеся сайты должны указывать на новую страничку, в результате чего  вся ценность старого URL будет утрачена.</li>
<li style="text-align: justify;">Ценность прямого цитирования. Это весьма важный фактор в продвижении сайта, когда другие интернет-ресурсы при перепечатке или использовании материалов с вашего сайта указывают его адрес в качестве источника в виде гиперссылки. Что само по себе может приносить вам  довольно таки неплохой ранг и трафик. Следовательно перемещение контента на другой адрес также приведет к прекращению трафика.</li>
<li style="text-align: justify;">Закладочная ценность. Опытные пользователи довольно часто оставляют на понравившиеся полезные странички закладки, чтобы при необходимости иметь возможность быстро найти их. Раньше это делалось исключительно в браузерах или в специальных программах, однако сейчас довольно популярными стали специальные социальные сервисы. Если контент со  старого адреса будет перемещен на новый, а редирект при этом вы не сделаете, то все пользователи, которые будут вновь пытаться зайти на нужныю им страничку просто напросто не смогут ее открыть (если она была полностью удалена) или найти желаемую информацию. Поэтому, перенаправление также важно делать для того чтобы не терять трафик.</li>
</ol>
<p style="text-align: justify;"><strong>Для того чтобы сделать правильный редирект на PHP следует прописать следующие строки:</strong></p>
<pre class="brush: php; title: ; notranslate"> &lt;?php
 header(“HTTP/1.1 301 Moved Permanently”);
header(“Location: http://newsite.ru/newurl.html”);
 exit();
?&gt; </pre>
<p style="text-align: justify;">Где  адрес http://newsite.ru/newurl.html следует заменить на новый URL вашего сайта.</p>
<p>© 2012 <a href="http://seo-php.net">SE-оптимизация на PHP</a>. Все права защищены.</p>]]></content:encoded>
			<wfw:commentRss>http://seo-php.net/ssyilochnaya-tsennost/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Что такое поисковая оптимизация и для чего она нужна?</title>
		<link>http://seo-php.net/chto-takoe-poiskovaya-optimizatsiya-i-dlya-chego-ona-nuzhna</link>
		<comments>http://seo-php.net/chto-takoe-poiskovaya-optimizatsiya-i-dlya-chego-ona-nuzhna#comments</comments>
		<pubDate>Sun, 26 Jun 2011 11:52:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Основы SEO]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[оптимизация]]></category>
		<category><![CDATA[поисковая оптиизиция]]></category>
		<category><![CDATA[продвижение]]></category>

		<guid isPermaLink="false">http://seo-php.net/?p=51</guid>
		<description><![CDATA[Сейчас среди пользователей наиболее популярным способом для поиска в Интернете информации или товаров является использование поисковых систем. Наиболее популярными в русскоязычном сегменте всемирной паутины являются такие поисковики, как Google и Яндекс. Еще также довольно хорошо известны Рамблер, Mail.ru и Aport, но их значимость на рынке менее выражена. В любом случае высокий поисковый ранг вашего сайте [...]<p>© 2012 <a href="http://seo-php.net">SE-оптимизация на PHP</a>. Все права защищены.</p>]]></description>
			<content:encoded><![CDATA[<p>Сейчас среди пользователей наиболее популярным способом для поиска в Интернете информации или товаров является использование поисковых систем.<span id="more-51"></span></p>
<p style="text-align: justify;">Наиболее популярными в русскоязычном сегменте всемирной паутины являются такие поисковики, как <a href="http://google.ru">Google</a> и <a href="http://yandex.ru">Яндекс</a>. Еще также довольно хорошо известны <a href="http://rambler.ru">Рамблер</a>, <a href="http://mail.ru">Mail.ru</a> и <a href="http://aport.ru">Aport</a>, но их значимость на рынке менее выражена.</p>
<p style="text-align: justify;">В любом случае высокий поисковый ранг вашего сайте в популярном поисковике по востребованному поисковому запросу может принести очень большую прибыль. А поскольку пользователи довольно редко просматривают результаты поисковой выдачи дальше одной или максимум второй страницы, то низкий ранг может не принести практически ничего или слишком мало, чтобы окупить даже затраты на содержание и наполнение сайта, что просто недопустимо. Итак, давайте все-таки определимся с тем, что же все-таки означает &#171;поисковая оптимизация&#187;.</p>
<p style="text-align: justify;"><strong>Поисковая оптимизация<strong> </strong>(от английского search engine optimization, т.е. сокращенно SEO) — это комплекс различных мер и методов, которые направлены для поднятия позиций вебсайта в результатах поисковой выдачи по каким-либо конкретным запросам пользователей. </strong></p>
<p style="text-align: justify;">Поэтому <a href="http://seodiv.ru/optimizatsiya-sayta">оптимизация сайта</a> для поисковых систем , то-бишь поисковая оптимизация направлена именно на создание условий, которые позволят увеличить поисковый ранг, что в свою очередь позволит заметно нарастить и количество посетителей вашего веб-сайта.</p>
<p style="text-align: justify;">Знание и понимание работы поисков, а также их алгоритмов и методов ранжирования может предоставить вам существенное преимущество среди множества конкурентов для вашего сайта. Однако главная сложность в изучении этих самых алгоритмов заключается в том, что поисковые механизмы намеренно, в целях предотвращения искусственного повышения ранге, не раскрывают особенности процесса своей работы.</p>
<p style="text-align: justify;">Более того, по сути, поисковый механизм &#8212; это синтез тысяч очень сложных и тесно взаимосвязанных алгоритмов, которые важны в совокупности, а не каждый по отдельности. Поэтому вполне возможно, что даже любой из программист в такой корпорации, как  Google самостоятельно не знает всех факторов, которые влияют на отображение результатов поиска. Ну, а так сказать извне  точно определить эти алгоритмы не удастся и подавно.</p>
<p style="text-align: justify;">Однако все-таки SEO-оптимизаторы знают о некоторых факторах, которые могут положительно влиять на ранг сайта в поисковой выдаче. При этом некоторые из них иногда подтверждаются со стороны самих поисковых систем. Стоит отметить, что имеются не только позитивные, но и негативные факторы, влияющие на позиции сайта в поисковой выдаче.  Поэтому в области поисковой оптимизации нужно с осторожностью относиться к источникам информации.<strong></strong></p>
<p>© 2012 <a href="http://seo-php.net">SE-оптимизация на PHP</a>. Все права защищены.</p>]]></content:encoded>
			<wfw:commentRss>http://seo-php.net/chto-takoe-poiskovaya-optimizatsiya-i-dlya-chego-ona-nuzhna/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Продвижение неизбежно</title>
		<link>http://seo-php.net/prodvizhenie-neizbezhno</link>
		<comments>http://seo-php.net/prodvizhenie-neizbezhno#comments</comments>
		<pubDate>Sun, 26 Jun 2011 11:04:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Основы SEO]]></category>
		<category><![CDATA[оптимизация]]></category>
		<category><![CDATA[продвижение]]></category>
		<category><![CDATA[раскрутка]]></category>

		<guid isPermaLink="false">http://seo-php.net/?p=46</guid>
		<description><![CDATA[Наверняка каждый вебмастер и владелец собственного сайта сталкивался с понятиями «продвижение» и «оптимизация» интернет-страниц. В настоящее время поисковые системы устроены так, что результаты поисковых запросов ранжируются в зависимости от уровня авторитетности и приспособленности ресурса к работе в Сети. Во многом положение сайта сейчас определяется уровнем оптимизации и качеством его содержания. Однако, помимо этого, владелец интернет-ресурса [...]<p>© 2012 <a href="http://seo-php.net">SE-оптимизация на PHP</a>. Все права защищены.</p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Наверняка каждый вебмастер и владелец собственного сайта сталкивался с понятиями «продвижение» и «оптимизация» интернет-страниц. В настоящее время поисковые системы устроены так, что результаты поисковых запросов ранжируются в зависимости от уровня авторитетности и приспособленности ресурса к работе в Сети.<span id="more-46"></span></p>
<p style="text-align: justify;">Во многом положение сайта сейчас определяется уровнем оптимизации и качеством его содержания. Однако, помимо этого, владелец интернет-ресурса обязан следить за позициями в поисковых системах. Для того, чтобы успешно пробиваться в ТОПы выдачи поисковых запросов, неизбежно продвижение своего сайта в глазах поисковых машин и пользователей.</p>
<p style="text-align: justify;"><a title="продвижение неизбежно" href="http://seodiv.ru/prodvizhenie-neizbezhno">Продвижение неизбежно</a>, но это довольно сложный процесс, который требует особых навыков со стороны оптимизатора. Тут необходимы умения размещать рабочие ссылки для своего ресурса на других сайтах, хорошо преподносить информацию, размещаемую на своем сайте, интересную пользователям и поисковым системам.</p>
<p style="text-align: justify;">Размещать ссылки на свой сайт вы можете платно и бесплатно. Платные варианты размещения ссылок – это, в первую очередь, работа через специальные биржи (Sape, Блогун, и т.п.) и сотрудничество с другими вебмастерами напрямую. Цены на ссылки на ваш проект зависят от показателей и посещаемости сайта, а также от значимости ресурса в глазах поисковых систем. Существуют также бесплатные способы размещения ссылок, например, размещение статей на авторитетных порталах, подразумевающих наполнение контентом самими пользователями, размещение ссылок в профилях и подписях на популярных форумах и многое другое.</p>
<p style="text-align: justify;">Результатом грамотного размещения ссылок, как правило, становится увеличение рейтинга сайта для поисковиков и приток новых посетителей на ваш проект. Для полноценного развития сайта его продвижение неизбежно.</p>
<p style="text-align: justify;">Очень важно оптимизировать ваш сайт не только для поисковых роботов, но и для пользователей. Для того, чтобы сайт был интересен людям, необходимо интересное и актуальное содержание вашего ресурса, а также приятный и удобный интерфейс и дизайн страницы. Помните, что продвижение неизбежно без хорошего наполнения сайта и привлечения целевого трафика пользователей.</p>
<p style="text-align: justify;">Очень важно, чтобы ваш сайт приносил вам не только удовольствие, но и доход. Для этого, вы должны максимально оптимизировать свой сайт и улучшить его в глазах поисковых систем и пользователей, а для этого продвижение неизбежно.</p>
<p>© 2012 <a href="http://seo-php.net">SE-оптимизация на PHP</a>. Все права защищены.</p>]]></content:encoded>
			<wfw:commentRss>http://seo-php.net/prodvizhenie-neizbezhno/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Контролирование спама с reCAPTCHA</title>
		<link>http://seo-php.net/kontrolirovanie-spama-s-recaptcha</link>
		<comments>http://seo-php.net/kontrolirovanie-spama-s-recaptcha#comments</comments>
		<pubDate>Sat, 25 Jun 2011 10:16:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[reCAPTCHA]]></category>
		<category><![CDATA[защита]]></category>
		<category><![CDATA[капча]]></category>
		<category><![CDATA[спам]]></category>

		<guid isPermaLink="false">http://seo-php.net/?p=43</guid>
		<description><![CDATA[Проверка введенных пользователем данных на сервере является важным оружием в борьбе со спамом. К сожалению, распространители спама находчивы и нередко находят способы обойти меры, направленные на то чтобы их остановить. Существуют различные мнения об эффективности методов анти-спама, но тот, который стоит рассматривать это reCAPTCHA (www.google.com/recaptcha/captcha). Сокращение CAPTCHA расшифровывается как «полностью автоматизированный публичный тест Тьюринга для [...]<p>© 2012 <a href="http://seo-php.net">SE-оптимизация на PHP</a>. Все права защищены.</p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Проверка введенных пользователем данных на сервере является важным оружием в борьбе со спамом. К сожалению, распространители спама находчивы и нередко находят способы обойти меры, направленные на то чтобы их остановить. Существуют различные мнения об эффективности методов анти-спама, но тот, который стоит рассматривать это reCAPTCHA (<a href="http://www.google.com/recaptcha/captcha">www.google.com/recaptcha/captcha</a>).<span id="more-43"></span></p>
<p style="text-align: justify;">Сокращение CAPTCHA расшифровывается как «полностью автоматизированный публичный тест Тьюринга для различия компьютеров и людей» (Completely Automated Public Turing Test to Tell Computers and Humans Apart). Наиболее распространенная форма предоставляет пользователю изображение случайных символов, которые должны быть правильно напечатаны в текстовое поле. Изображения созданы нечитаемыми для программ оптического распознавания символов (OCR) , но люди также часто испытывают трудности в их чтении. Недостатком проверки CAPTCHA является то, что она является препятствием для слепых и людей с плохим зрением.</p>
<p style="text-align: justify;">Проверка reCAPTCHA выделяется  среди подобных мер защиты от нежелательной почты тем, что автоматически обеспечивает возможность обновления изображения, если пользователь не может его прочитать. И что более важно, предлагает аудио альтернативу для людей, у которых проблемы со зрением.</p>
<p>Использование reCAPTCHA на самом деле имеет двойную выгоду. Изображения, используемые сервисом reCAPTCHA, поступают из книг и газет, которые были оцифрованы, но OCR программы имели трудности в их расшифровке. Пользователю предлагается ввести два слова, одно из которых успешно расшифровано OCR. Успех или провал определяется ответом на известное слово, которое может быть слева или справа. Сервис сопоставляет ответы на неизвестное слово, и использует их для улучшения точности OCR технологии.</p>
<p>Для использования Recaptcha, необходимо создать учетную запись Google, которая является свободной, и получить пару программных ключей (случайных слов, направленных на предотвращение обхода тест спамерами). После того как вы создали учетную запись, можно легко включить виджет reCAPTCHA в вашу контактную форму.</p>
<p>Вы можете найти инструкции по настройке внешнего вида виджета reCAPTCHA на сайте <a href="http://code.google.com/apis/recaptcha/docs/customization.html ">http://code.google.com/apis/recaptcha/docs/customization.html </a></p>
<p style="text-align: justify;">На момент написания данной статьи, вы можете выбрать одну из четырех тем или создать свои собственные. Также можно изменить язык. Существуют встроенные переводы на нескольких языках, включая французский, испанский и русский языки. Если язык не поддерживается, можно определить свой собственный перевод.</p>
<p>© 2012 <a href="http://seo-php.net">SE-оптимизация на PHP</a>. Все права защищены.</p>]]></content:encoded>
			<wfw:commentRss>http://seo-php.net/kontrolirovanie-spama-s-recaptcha/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Сессии в PHP</title>
		<link>http://seo-php.net/sessii-v-php</link>
		<comments>http://seo-php.net/sessii-v-php#comments</comments>
		<pubDate>Sat, 25 Jun 2011 10:01:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[использование]]></category>
		<category><![CDATA[сессии]]></category>

		<guid isPermaLink="false">http://seo-php.net/?p=39</guid>
		<description><![CDATA[Сессии обеспечивают неразрывность, сохраняя случайный идентификатор, ID сессии, на веб-сервере и на компьютере посетителя (как файл cookie). Веб-сервер использует файл cookie, чтобы определить, что он обменивается информацией с тем же человеком (или, если быть более точным, с тем же компьютером). cookie хранятся в браузере под названием PHPSESSID и содержат нагромождение букв и цифр. Эта случайная [...]<p>© 2012 <a href="http://seo-php.net">SE-оптимизация на PHP</a>. Все права защищены.</p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Сессии обеспечивают неразрывность, сохраняя случайный идентификатор, ID сессии, на веб-сервере и на компьютере посетителя (как файл cookie). Веб-сервер использует файл cookie, чтобы определить, что он обменивается информацией с тем же человеком (или, если быть более точным, с тем же компьютером). <span id="more-39"></span></p>
<p style="text-align: justify;">cookie хранятся в браузере под названием PHPSESSID и содержат нагромождение букв и цифр. Эта случайная строка является идентификатором сессии (session ID). Соответствующий файл, который содержит то же нагромождение букв и цифр как часть имени, создается и веб-сервере.</p>
<p style="text-align: justify;">Когда сессия инициирована, сервер хранит информацию в переменных, которые могут быть доступны на других страницах, пока сессия остается активной (как правило, до закрытия браузера). Поскольку идентификатор сессии является уникальным для каждого посетителя, никто другой не может увидеть информацию, хранящуюся в переменных сеанса. Это означает, что сессии идеально подходят для аутентификации пользователей, хотя и могут быть использованы в любой ситуации, где необходимо сохранить информацию для одного и того же пользователя при переходе от одной страницы к другой, например, в многостраничных формах или корзине для покупок.</p>
<p style="text-align: justify;">Единственная информация, хранящаяся на компьютере пользователя это cookie, содержащие идентификатор сессии, который сам по себе не имеет смысла. Это означает, что нет никакой опасности раскрытия частной информации, если кто-либо станет изучать содержимое cookie на общем компьютере. Переменные сессии и их значения хранятся на веб-сервере.</p>
<p style="text-align: justify;">Такая система имеет ряд последствий. Содержащий идентификатор сеанса cookie обычно остаются активными, пока браузер не закроется. Поэтому если несколько человек пользуются одним и тем же компьютером, все они имеют доступ к другим сессиям, если только они не закрывают всегда браузер, перед тем как передать его следующему человеку, но такую ситуацию невозможно контролировать. Таким образом, важно обеспечить механизм выхода из системы для удаления как cookie, так и переменных сессии, сохраняя ваш сайт в безопасности. Можно также создать механизм тайм-аута, который автоматически предотвращает любое получение доступа после определенного периода бездействия.</p>
<p style="text-align: justify;">Само по себе хранение переменных сессий в виде обычного текста на веб-сервере не является причиной для беспокойства. Если сервер правильно настроен, файлы сессии не могут быть доступны через браузер. Неактивные файлы также обычно удаляются в PHP (в теории, время жизни 1440 секунд &#8212; 24 минуты, но на это нельзя полагаться). Тем не менее, должно быть очевидно, что если злоумышленнику удастся скомпрометировать сервер или захватить сессии, информация может быть раскрыта. Таким образом, хотя сессии достаточно безопасны, для защищенных паролем частей сайта или работы с многостраничными формами не следует использовать переменные сессии, чтобы храненить конфиденциальную информацию, такую как пароли или данные кредитной карты. Пароль (желательно зашифрованный), используемый для получения доступа к защищенному сайту, должен храниться в отдельном месте, а не как переменная сессии.</p>
<p style="text-align: justify;">Сессии поддерживаются по умолчанию, поэтому не требуется никакой специальной конфигурации. Однако сессии не будут работать, если cookie отключены в браузере пользователя. Можно настроить PHP для отправки идентификатора сессии через строку запроса, но это считается риском безопасности.</p>
<p style="text-align: center;"><strong>Создание сессий в PHP</strong></p>
<p style="text-align: justify;">Просто поместите следующую команду на каждой странице PHP, на которой нужно использовать в сессии:</p>
<pre class="brush: php; title: ; notranslate"> session_start(); </pre>
<p style="text-align: justify;">Эта команда должна быть вызвана только один раз на каждой странице и до того как сценарий сгенерирует какой-либо вывод, поэтому идеальное положение сразу после открывающего тега PHP. Если какой-либо вывод будет сгенерирован до вызова функции session_start(), команда не выполнится и сессия не будет активирована на данной странице. (См. далее в разделе «Ошибка &#8216;Headers already sent»)</p>
<p style="text-align: center;"><strong>Создание и уничтожение переменных сессии</strong></p>
<p style="text-align: justify;">Переменная сессии создаётся добавлением её в суперглобальный массив $_SESSION, таким же образом, как и назначение обычной переменной. Скажем, необходимо сохранить имя посетителя и вывести его в приветствии. Если имя передано в форме авторизации как $_POST['name'], его нужно присвоить следующим образом:</p>
<pre class="brush: php; title: ; notranslate"> $_SESSION['name'] = $_POST['name']; </pre>
<p style="text-align: justify;">Теперь переменная $_SESSION['name'] может быть использована в любой странице, которая начинается с session_start(). Поскольку переменные сессии хранятся на сервере, вы должны избавиться от них, как только они больше не требуются сценарию или приложению. Отключите переменную сессии следующим образом:</p>
<pre class="brush: php; title: ; notranslate"> unset($_SESSION['name']); </pre>
<p style="text-align: justify;">Чтобы сбросить все переменные сессии, например, когда вы отключаете пользователя, установите суперглобальный массив $_SESSION в пустой массив следующим образом:</p>
<pre class="brush: php; title: ; notranslate"> $_SESSION = array(); </pre>
<p style="text-align: justify;">Не поддавайтесь искушению попробовать unset($_SESSION). Функция работает хорошо, но она слишком эффективна. Это не только очищает текущую сессию, но и предотвращает сохранение любых дополнительных переменных сессии.</p>
<p style="text-align: center;"><strong>Уничтожение сессии</strong></p>
<p style="text-align: justify;">Само по себе отключение всех переменных сессии эффективно предотвращает какое-либо повторное использование информации, но также необходимо сделать cookie сессии недействительными следующим образом:</p>
<pre class="brush: php; title: ; notranslate">

if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-86400, '/');
}
</pre>
<p style="text-align: justify;">При этом используется функция session_name(), чтобы получить имя сессии динамически, и выполняется сброс cookie сессии в пустую строку со сроком действия, истекшим 24 часа назад (86400 является количеством секунд в сутках). Последений аргумент (&#8216;/&#8217;) применяет cookie ко всему домену.</p>
<p>И наконец, уничтожьте сессию с помощью следующей команды:</p>
<pre class="brush: php; title: ; notranslate"> session_destroy(); </pre>
<p style="text-align: justify;">При уничтожении сессии таким способом нет риска несанкционированного доступа к ограниченной части сайта или любой информации, которой обмениваются в ходе сессии. Но посетитель может забыть выйти из системы, поэтому не всегда возможно гарантировать, что команда session_destroy( ) сработает, и именно поэтому так важно не хранить конфиденциальную информацию в переменной сессии.</p>
<p style="text-align: justify;">Вы можете встретить функции session_register() и session_unregister() в старых сценариях. Эти функции являются устаревшими. Вместо них используйте $_SESSION['variable_name'] и unset($_SESSION['variable_name']</p>
<p style="text-align: center;"><strong>Регенерация идентификатора сессии</strong></p>
<p style="text-align: justify;">Когда статус пользователя измененяется, например, после входа в систему, рекомендуется в качестве меры безопасности регенерировать идентификатор сессии. Это приводит к изменению случайного набора букв и цифр, которые идентифицируют сессию, но сохраняет всю информацию, хранящуюся в переменных сессии.</p>
<p style="text-align: justify;">Для регенерации идентификатора сессии, просто вызовите session_regenerate_id() и перенаправьте пользователя на другую страницу или перезагрузите эту же.</p>
<p style="text-align: center;"><strong>Ошибка «Headers already sent»</strong></p>
<p style="text-align: justify;">Хотя использовать PHP сессии довольно просто, существует одна проблема, которая ставит в новичков в тупик. Вместо того чтобы все работало так, как вы ожидали, вы увидите следующее сообщение:</p>
<p>Warning: Cannot add header information &#8212; headers already sent</p>
<p style="text-align: justify;">Она также затрагивает функции session_start() и setCookie(). В случае с функцией session_start(), решение очень простое: убедитесь, что вы поместили её сразу после открывающего тега PHP (или почти сразу), и проверьте, что перед открывающим тегом нет пробела.</p>
<p style="text-align: justify;">Иногда проблема возникает, даже если перед тегом PHP нет пробелов. Причиной этого, как правило, является программное обеспечение для редактирования, которое вставляет метку порядка следования байтов (BOM) в начале сценария. Если это происходит, откройте настройки редактора сценариев и отключите использование BOM на страницах PHP.</p>
<p style="text-align: justify;">При использовании функции setcookie() для удаления cookie сессии, скорее всего, вы отправили вывод в браузер перед вызовом функции. В этом случае, PHP позволяет сохранять результаты в буфере, используя ob_start(). Затем содержимое буфера отправляется с помощью функции ob_end_flush() после того, как setcookie() выполнит свою работу.</p>
<p style="text-align: center;"><strong>Ограничение сессий во времени</strong></p>
<p style="text-align: justify;">По умолчанию в PHP устанавливается время жизни cookie сессии на компьютере пользователя равным 0, что сохраняет сессию активной, то тех пор пока пользователь не выйдет из системы или не закроет браузер. Таймаут для сессии можно сделать и раньше, через вызов функции ini_set(), которая позволяет изменять некоторые директивы PHP конфигурации на лету. Как только сессия начинается, передайте директиву session.cookie_lifetime в качестве первого аргумента и строку, содержащую число секунд, которое cookie должны оставаться активными, в качестве второго аргумента. Например, ограничить время жизни cookie сессии до десяти минут можно было бы следующим образом:</p>
<pre class="brush: php; title: ; notranslate"> session_start();
ini_set('session.cookie_lifetime', '600'); </pre>
<p>© 2012 <a href="http://seo-php.net">SE-оптимизация на PHP</a>. Все права защищены.</p>]]></content:encoded>
			<wfw:commentRss>http://seo-php.net/sessii-v-php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Где размещать включаемые файлы?</title>
		<link>http://seo-php.net/gde-razmeshhat-vklyuchaemyie-faylyi</link>
		<comments>http://seo-php.net/gde-razmeshhat-vklyuchaemyie-faylyi#comments</comments>
		<pubDate>Sat, 25 Jun 2011 09:30:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[include]]></category>
		<category><![CDATA[безопасность]]></category>
		<category><![CDATA[защита]]></category>
		<category><![CDATA[использование]]></category>

		<guid isPermaLink="false">http://seo-php.net/?p=4</guid>
		<description><![CDATA[Полезной особенностью включаемых файлов PHP является то, что они могут быть расположены в любом месте, если страница с командой include знает, где их найти. Включаемые файлы даже не обязательно должны находиться в корневом каталоге веб-сервера. Это означает, что можно защитить включаемые файлы, содержащие конфиденциальную информацию, такую как пароли, в частных директориях (папках), которые не могут [...]<p>© 2012 <a href="http://seo-php.net">SE-оптимизация на PHP</a>. Все права защищены.</p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Полезной особенностью включаемых файлов PHP является то, что они могут быть расположены в любом месте, если страница с командой include знает, где их найти. Включаемые файлы даже не обязательно должны находиться в корневом каталоге веб-сервера. Это означает, что можно защитить включаемые файлы, содержащие конфиденциальную информацию, такую как пароли, в частных директориях (папках), которые не могут быть доступны через браузер.</p>
<p style="text-align: justify;"><span id="more-4"></span>Поэтому, если ваша хостинговая компания предоставляет возможность хранения файлов за пределами корневого каталога сервера, вы должны серьезно рассмотреть вопрос о размещении некоторых, если не всех включаемых файлов.</p>
<p style="text-align: justify;">Оператор include ожидает относительный путь или полный путь. Если ни один не задан, PHP автоматически проверяет include_path определенный в конфигурации PHP. В следующем разделе объясняется, как изменить папки, в которых PHP автоматически выполняет поиск включаемых файлов.</p>
<p style="text-align: center;"><strong>Настройка include_path </strong></p>
<p style="text-align: justify;">Преимущество размещения включаемых файлов в папке, указанной в переменной веб-сервера include_path заключается в том, что не нужно беспокоиться о том, являются ли правильными относительный или абсолютный путь. Все что нужно это имя файла. Это может быть очень полезно, если используется много операторов include или иерархия сайта состоит из нескольких уровней. Существует три способа изменения include_path:</p>
<ul>
<li>Изменить значения в php.ini: Если хостинг-компания предоставляет вам доступ к php.ini, это лучший способ добавить пользовательскую папку включаемых файлов.</li>
<li>Использовать .htaccess:. Если удаленный веб-сервер работает на Apache, и вы можете изменить конфигурацию с помощью .htaccess файла, это хорошая альтернатива.</li>
<li>Использовать set_include_path(): Используйте этот способ только тогда, когда предыдущие варианты не доступны, потому что функция влияет только на include_path для текущего файла.</li>
</ul>
<p style="text-align: justify;">Значение include_path для веб-сервера значится в разделе Core в сведениях о конфигурации при запуске phpinfo(). Как правило, путь начинается с точки, которая означает текущую папку, и далее следует абсолютный путь каждой папки для поиска. В Linux и Mac OS X, каждый путь разделен двоеточием. В Windows разделитель точка с запятой.</p>
<p style="text-align: justify;">На сервере под Linux или Mac текущая директива include_path может выглядеть следующим образом:</p>
<pre class="brush: php; title: ; notranslate"> .:/php/PEAR </pre>
<p style="text-align: justify;">На сервере Windows эквивалент выглядит следующим образом.</p>
<pre class="brush: php; title: ; notranslate"> .;C:phpPEAR </pre>
<p style="text-align: center;"><strong>Редактирование include_path в php.ini</strong></p>
<p style="text-align: justify;">В php.ini найдите директиву include_path. Чтобы добавить папку includes на вашем сайте, добавьте к концу текущего значения двоеточие или точку с запятой, в зависимости операционной системы вашего сервера, далее следует абсолютный путь к папке includes.</p>
<p style="text-align: justify;">На сервере под Linux или Mac используйте двоеточие:</p>
<pre class="brush: php; title: ; notranslate"> include_path=&quot;.:/php/PEAR:/home/mysite/public_html/includes&quot; </pre>
<p style="text-align: justify;">На сервере под Windows используйте точку с запятой:</p>
<pre class="brush: php; title: ; notranslate"> include_path=&quot;.;C:phpPEAR;C:sitesmysitewwwincludes&quot; </pre>
<p style="text-align: justify;">Использование .htaccess для изменения include_path</p>
<p style="text-align: justify;">Если можно воспользоваться .htaccess для изменения конфигурации сервера, настройте include_path на Linux или Mac следующим образом:</p>
<pre class="brush: php; title: ; notranslate"> php_value include_path &quot;.:/php/PEAR:/home/mysite/public_html/includes&quot; </pre>
<p style="text-align: justify;">В операционной системе Windows команда выглядит также, за исключением того, что пути отделяются точкой с запятой.</p>
<pre class="brush: php; title: ; notranslate"> php_value include_path &quot;.;C:phpPEAR;C:sitesmysitewwwincludes&quot; </pre>
<p style="text-align: justify;">Не вставляйте знак равенства между include_path и списоком имен. Поскольку .htaccess переопределяет include_path по умолчанию, убедитесь, что вы сделали копию существующего значения из phpinfo() и добавили новый путь к нему.</p>
<p style="text-align: justify;">Лучше всего создавать файл .htaccess на локальном компьютере с помощью специальной программы для веб разработки, такой как Dreamweaver или Zend Studio. При создании файла .htaccess в текстовом редакторе на Mac, он исчезнет без следа в Finder. Операционная система Mac OS X имеет неприятное свойство скрывать файлы с именами, которые начинаются с точки. Целевые программы для веб-разработки более понятливые.</p>
<p style="text-align: center;"><strong>Использование set_include_path()</strong></p>
<p style="text-align: justify;">Хотя set_include_path() влияет только на текущую страницу, вы можете легко создать фрагмент кода и вставить его на страницы, где хотите его использовать. В PHP также легко можно получать текущее значение include_path и объединять его с новым путём, независимо от платформы.</p>
<p style="text-align: justify;">Сохраните новый путь в переменной, а затем объедините его с текущим путём подключения файлов следующим образом:</p>
<pre class="brush: php; title: ; notranslate">&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;$includes_folder = '/home/mysite/public_html/includes';
set_include_path(get_include_path() . PATH_SEPARATOR . $includes_folder);&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;</pre>
<p style="text-align: justify;">На первый взгляд похоже, что в функцию set_include_path() передаются три аргумента, но это только один аргумент, потому что три элемента соединяются оператором конкатенации (точка), а не запятыми. Как вы уже поняли функция get_include_path() получает текущий include_path. Строка PATH_SEPARATOR является константой PHP, которая автоматически вставляет двоеточие или точку с запятой в зависимости от операционной системы. В результате строка содержит первоначальный и новый путь.</p>
<p style="text-align: justify;">Проблема с данным подходом заключается в том, что путь к новой папке includes будет разным на удаленном и локальном сервере тестирования. К счастью, это можно исправить с помощью условного оператора. Суперглобальная переменная $_SERVER['HTTP_HOST'] содержит доменное имя сайта. Итак, если ваш домен www.example.com, вы можете установить правильный путь для каждого сервера следующим образом:</p>
<pre class="brush: php; title: ; notranslate">&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;if ($_SERVER['HTTP_HOST'] == 'www.example.com') {
$includes_folder = '/home/example/public_html/includes';
} else {
$includes_folder = 'C:/xampp/htdocs/mysite/includes';
}
set_include_path(get_include_path() . PATH_SEPARATOR . $includes_folder);&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;</pre>
<p style="text-align: justify;">Вероятно, не стоит использовать функцию set_include_path() для небольших сайтов, которые не используют много включаемых файлов. Где функция действительно полезна, так это при использовании сторонних библиотек PHP, таких, как Zend Framework (http://framework.zend.com/) или Symfony (www.symfony-project.org), которые опираются на включаемые файлы.</p>
<p style="text-align: center;"><strong>Почему нельзя использовать ссылки относительно корня сайта при включении файлов в PHP?</strong></p>
<p style="text-align: justify;">Ответ &#8212; и да и нет. Для ясности, начнем с объяснения различий между ссылками по отношению к документу и к корневому каталогу сайта. При нажатии на ссылку для перехода на другую страницу, путь в теге сообщает браузеру, как добраться от текущей страницы к следующей. Большинство веб-инструментов разработки указывают путь относительно текущего документа. Если целевая страница находится в той же папке, используется только имя файла. Если страница на один уровень выше, чем текущая, перед именем файла ставится ../. Это известно как путь относительно документа или ссылка. Если сайт содержит много уровней папок, такой тип ссылок тяжело понять, по крайней мере, для людей.</p>
<p style="text-align: justify;">Другой тип ссылки всегда начинается с косой черты, которая кратко обозначает корневой каталог сайта. Преимуществом пути относительно корня сайта является то, что положение текущей страницы в иерархии сайта не имеет значения, косая черта в начале пути гарантирует, что веб-сервер начнет поиск с верхнего уровня сайта. Хотя ссылки относительно корня сайта гораздо легче читать, операторы include в PHP не могут их обрабатывать. Вы должны использовать путь относительно документа, абсолютный путь, или указать папку includes в директиве include_path.</p>
<p style="text-align: justify;">Необходимо сказать, что можно преобразовать путь относительно корня сайта в абсолютный путь, присоединив значение суперглобальной переменной $_SERVER['DOCUMENT_ROOT'] к началу пути, как в следующем примере:</p>
<pre class="brush: php; title: ; notranslate"> include($_SERVER['DOCUMENT_ROOT'] . '/includes/filename.php'); </pre>
<p style="text-align: justify;">Большинство серверов поддерживают $_SERVER['DOCUMENT_ROOT'], но вы должны для надёжности проверить раздел PHP Varaibles в нижней части деталей конфигурации отображаемых phpinfo()</p>
<p style="text-align: justify;">Теперь момент, который вводит многих людей в заблуждение. Хотя нельзя использовать ссылки относительно корня сайта для включаемого файла, ссылки внутри включаемого файла должны быть относительно корня документа. Поскольку файл может быть включен на любом уровне иерархии сайта, то ссылки относительно документа нарушаются, когда файл подключается на другом уровне.</p>
<p style="text-align: center;"><strong>Безопасность и включаемые файлы</strong></p>
<p style="text-align: justify;">Включаемые файлы очень мощная особенность PHP. С этой мощью появляются серьезные риски безопасности. Если внешний файл доступен, PHP подключает его и внедряет любой код в основной сценарий. Но, как уже упоминалось в предыдущем разделе, включаемые файлы могут быть расположены в любом месте. Технически говоря, они могут быть даже на другом сервере. Однако, учитывая риск безопасности, в PHP 5.2, была введена новая директива конфигурации allow_url_include. По умолчанию она отключена (Off), поэтому теперь невозможно включить файлы с другого сервера, если только у вас нет полного контроля конфигурации сервера. В отличие от include_path, директива allow_url_include может быть изменена только администратором сервера.</p>
<p>Даже если вы сами контролируете оба сервера, никогда не следует подключать файл с другого сервера. Это предоставляет возможность злоумышленнику подменить адрес и попытаться выполнить вредоносный сценарий на вашем сайте.</p>
<p>© 2012 <a href="http://seo-php.net">SE-оптимизация на PHP</a>. Все права защищены.</p>]]></content:encoded>
			<wfw:commentRss>http://seo-php.net/gde-razmeshhat-vklyuchaemyie-faylyi/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Предотвращение ошибок с включаемыми (include) файлами</title>
		<link>http://seo-php.net/predotvrashhenie-oshibok-s-vklyuchaemyimi-include-faylami</link>
		<comments>http://seo-php.net/predotvrashhenie-oshibok-s-vklyuchaemyimi-include-faylami#comments</comments>
		<pubDate>Sat, 25 Jun 2011 02:30:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[include]]></category>
		<category><![CDATA[ошибки]]></category>

		<guid isPermaLink="false">http://seo-php.net/?p=29</guid>
		<description><![CDATA[Важно устранить все ошибки перед развертыванием PHP-страниц в Интернете. Многие хостинговые компании отключают уведомления об ошибках, если вы не видите сообщения об ошибке, это не означает, что со страницей всё в порядке. Страницы, которые используют серверные технологии, такие как PHP, имеют дело с большим количеством непредвиденных ситуаций, поэтому разумно создавать защиту в коде, проверяя значения [...]<p>© 2012 <a href="http://seo-php.net">SE-оптимизация на PHP</a>. Все права защищены.</p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Важно устранить все ошибки перед развертыванием PHP-страниц в Интернете. Многие хостинговые компании отключают уведомления об ошибках, если вы не видите сообщения об ошибке, это не означает, что со страницей всё в порядке. Страницы, которые используют серверные технологии, такие как PHP, имеют дело с большим количеством непредвиденных ситуаций, поэтому разумно создавать защиту в коде, проверяя значения перед их использованием. <span id="more-29"></span></p>
<p style="text-align: center;"><strong>Проверка существования переменных</strong></p>
<p style="text-align: justify;">Всегда нужно использовать команду isset() для проверки существования переменной, которая получает значение из подключаемых файлов и заключать в условный оператор любой код, который её использует.</p>
<p style="text-align: justify;">Можно присвоить переменной значение по умолчанию следующим образом:</p>
<pre class="brush: php; title: ; notranslate">&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;if (!isset($someVariable)) {
$someVariable = default value;
}&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;</pre>
<p style="text-align: justify;">При этом используется оператор логического отрицания чтобы проверить, что переменная $someVariable не была установлена. Если переменная $some не существует, ей присваивается значение по умолчанию, которое затем может быть использовано в сценарии. Если переменная уже существует, код внутри условного оператора пропускается, и используется исходное значение.</p>
<p style="text-align: center;"><strong>Проверка существования функции или класса</strong></p>
<p style="text-align: justify;">Включаемые файлы часто используются для определения пользовательских функций или классов. Попытка использовать функцию или класс, которые не были определены, вызывает фатальную ошибку. Чтобы проверить, что функция определена, передайте имя функции в виде строки в function_exists(). При передаче имени функции в качестве параметра function_exists() не ставьте скобки в конце имени функции.</p>
<p style="text-align: justify;">Например, проверить, что функция doubleIt()определена, можно следующим образом:</p>
<pre class="brush: php; title: ; notranslate">&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;if (function_exists('doubleIt')) {
// используем doubleIt()
}&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;</pre>
<p style="text-align: justify;">Чтобы проверить, что класс определен, используйте функцию class_exists() таким же образом, передав строку, содержащую имя класса в качестве аргумента:</p>
<pre class="brush: php; title: ; notranslate">&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;if (class_exists('MyClass')) {
//используем MyClass
}&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;</pre>
<p style="text-align: justify;">Если предполагается использовать функцию или класс, которые ещё не определены в сценарии, более практичным подходом будет включить с помощью условного оператора файл, в котором находится определение данного класса или функции. Например, если определение функции doubleIt() находится в файле с именем utilities.inc.php:</p>
<pre class="brush: php; title: ; notranslate">&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;if (!function_exists('doubleIt')) {
require_once('includes/utilities.inc.php');
}&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;</pre>
<p style="text-align: center;"><strong>Временное включение сообщений об ошибках</strong></p>
<p style="text-align: justify;">Сообщения об ошибках нужны, чтобы помочь разработчику. К сожалению, вывод сообщений на рабочем сайте предоставляет информацию, которая может быть полезна для злоумышленника, и именно поэтому большинство хостинговых компаний отключают вывод сообщений об ошибках. В зависимости от характера ошибки, все, что вы можете видеть, когда заходите на страницу это пустой экран. Пользы от него мало, когда нужно выяснить что случилось со страницами, которые работали безупречно в локальной среде тестирования.</p>
<p style="text-align: justify;">К счастью, можно легко включить временный вывод сообщений об ошибках для отдельной страницы с помощью функции ini_set(), которая может быть использована для изменения некоторых директив в php.ini, в конфигурационном файле PHP на сервере.</p>
<p style="text-align: justify;">Добавьте следующий код в верхней части страницы, с которой возникают проблемы:</p>
<pre class="brush: php; title: ; notranslate">&lt;?php ini_set('display_errors', '1'); ?&gt;</pre>
<p style="text-align: justify;">Загрузите файл на удаленный сервер, и перезагрузите страницу в браузере. Вы должны увидеть на экране сообщение об ошибке. Исправьте проблему, и проверьте страницу снова. Если страница отображается правильно, удалите дополнительную строку кода.</p>
<p style="text-align: justify;">Если вы по-прежнему видите пустой экран, это означает, что в PHP коде ошибка синтаксиса. Использование ini_set() не работает, если существуют ошибки синтаксического разбора.</p>
<p style="text-align: justify;">Большинство ошибок возникает, когда разработчики забывают загрузить включаемый файл на удаленный сервер. Даже если загружены все файлы, всё равно может появиться сообщение об ошибке, сообщающее о недостаточных полномочиях для доступа к включаемому файлу. Это может произойти в следующих случаях:</p>
<ul>
<li style="text-align: justify;">Сервер работает в безопасном режиме: Если ваша хостинговая компания поддерживает PHP в ограниченном режиме, вы увидите предупреждение, что ограничения безопасного режима вступили в силу. Выполните phpinfo() и проверьте значение safe_mode_include_dir в разделе Core. Все ваши включаемые файлы должны храниться в этом месте. Настройте структуру сайта в соответствии с настройками. Безопасный режим запланирован для удаления из следующей версии PHP, так что эта проблема встречается реже.</li>
<li style="text-align: justify;">Установлена директива open_basedir: Директива open_basedir ограничивает возможность включать или открывать файлы. Директива должна подействовать, только если включаемый файл находится за пределами корневого каталога веб-сервера. Предупреждение генерируется на основе PHP списков разрешенных путей. Переместите включаемый файл в разрешенное расположение, и скорректируйте пути команд включения соответствующим образом.</li>
</ul>
<p style="text-align: center;"><strong>Обработка отсутствующих включаемых файлов </strong></p>
<p style="text-align: justify;">Предполагая, что включаемые файлы нормально работают на удаленном сервере, это вся проверка ошибок, которая требуется. Однако если удаленный сервер выводит сообщения об ошибках, нужно принять меры для их подавления, если включаемые файлы случайно удалены или повреждены.</p>
<p style="text-align: justify;">Довольно грубый, но эффективный способ заключается в использовании оператора управления ошибками (@) в PHP, который подавляет сообщение об ошибке, связанное со строкой кода, на которой оператор используется. Оператор управления ошибками размещается в начале строки или прямо напротив функции или оператора, который может выдавать ошибку следующим образом:</p>
<pre class="brush: php; title: ; notranslate"> @ include('./includes/random_image.php'); </pre>
<p>Проблема с оператором управления ошибками заключается в том, что он скрывает ошибки, вместо того чтобы обрабатывать их. Это только один символ, так что легко забыть, где он был использован. Следовательно, можно потратить много времени в поисках ошибки в другой части скрипта. При использовании оператора управления ошибками, знак @ должен быть первым, что следует удалить при устранении проблемы.</p>
<p style="text-align: justify;">Другой недостаток заключается в том, что нужно использовать оператор управления ошибками в каждой строке, которая может вызвать сообщение об ошибке, потому что действие оператора распространяется только на текущую строку.</p>
<p style="text-align: justify;">Лучший способ подавления сообщений об ошибках на рабочем сайте &#8212; это выключить директиву display_errors в конфигурации с веб-сервера. Наиболее эффективным способом является изменение php.ini, если хостинговая компания позволяет изменять его параметры. Кроме того, если ваш сервер работает на Apache и у вас есть разрешение на изменение конфигурации с помощью .htaccess файла, вы должны добавить следующую команду в файл .htaccess в корневой папке сервера:</p>
<pre class="brush: php; title: ; notranslate"> php_flag display_errors Off </pre>
<p style="text-align: justify;">Если ни один вариант не доступен, добавьте следующую строку в верхней части любого сценария, который использует включаемые файлы:</p>
<pre class="brush: php; title: ; notranslate"> &lt;?php ini_set('display_errors', '0'); ?&gt; </pre>
<p style="text-align: justify;">Все методы, предложенные ранее, только подавляют сообщения об ошибках, если включаемый файл не может быть найден. Если страница не имеет смысла без включаемого файла, следует перенаправить пользователя на страницу с ошибкой, если включаемый файл отсутствует.</p>
<p style="text-align: justify;">Один из способов перенаправить пользователя &#8212; вызвать исключение следующим образом:</p>
<pre class="brush: php; title: ; notranslate">&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;$file = 'includes/menu.inc.php';
if (file_exists($file) &amp;&amp; is_readable($file)) {
include($file);
} else {
throw new Exception(&quot;$file can't be found&quot;);
}
</pre>
<p style="text-align: justify;">При использовании кода, который может вызвать исключение, необходимо заключить его в блок try и создать блок catch для обработки исключения.</p>
<p>© 2012 <a href="http://seo-php.net">SE-оптимизация на PHP</a>. Все права защищены.</p>]]></content:encoded>
			<wfw:commentRss>http://seo-php.net/predotvrashhenie-oshibok-s-vklyuchaemyimi-include-faylami/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Уменьшение нагрузки с помощью include-файлов</title>
		<link>http://seo-php.net/umenshenie-nagruzki-s-pomoshhyu-include-faylov</link>
		<comments>http://seo-php.net/umenshenie-nagruzki-s-pomoshhyu-include-faylov#comments</comments>
		<pubDate>Sat, 25 Jun 2011 02:14:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[include]]></category>
		<category><![CDATA[уменьшение нагрузки]]></category>

		<guid isPermaLink="false">http://seo-php.net/?p=21</guid>
		<description><![CDATA[Возможность включить содержимое одного файла в другой является одной из наиболее мощных функций PHP. Она также является одной из самых простых в реализации. Большинство страниц сайта имеют общие элементы, такие как header, footer и меню навигации. Можно изменить внешний вид этих элементов по всему сайту, изменив правила стиля во внешней стилевой таблице. Но CSS имеет [...]<p>© 2012 <a href="http://seo-php.net">SE-оптимизация на PHP</a>. Все права защищены.</p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Возможность включить содержимое одного файла в другой является одной из наиболее мощных функций PHP. Она также является одной из самых простых в реализации.<span id="more-21"></span></p>
<p style="text-align: justify;">Большинство страниц сайта имеют общие элементы, такие как header, footer и меню навигации. Можно изменить внешний вид этих элементов по всему сайту, изменив правила стиля во внешней стилевой таблице. Но CSS имеет лишь ограниченные возможности для изменения содержимого элементов страницы. Если вы хотите добавить новый пункт меню, вам необходимо отредактировать HTML на каждой странице, которая его отображает. Средства веб разработки, такие как Dreamweaver и Expression Web, имеют системы шаблонов, которые автоматически обновляют все страницы, подключенные к главному файлу, но вам все еще нужно будет загружать файлы на удаленный сервер.</p>
<p style="text-align: justify;">Это не обязательно, если PHP поддерживает серверные включения (SSI). Серверное включение (server-side include) является внешним файлом, содержащим динамический код или HTML (или и то и другое), который необходимо включить в несколько страниц. В PHP содержимое встраивается в каждую веб-страницу на сервере. Поскольку каждая страница использует один и тот же внешний файл, можно обновить меню или другие общие элементы путем редактирования и загрузки одного файла, что существенно экономит время.</p>
<p style="text-align: center;"><strong>Команды включения файлов в PHP </strong></p>
<p style="text-align: justify;">В PHP существует четыре команды, которые могут быть использованы для включения кода из внешнего файла, а именно:</p>
<ul>
<li>include();</li>
<li>include_once();</li>
<li>require();</li>
<li>require_once();</li>
</ul>
<p style="text-align: center;"><strong>Все они делают в основном одно и то же, так почему их четыре?</strong></p>
<p style="text-align: justify;">Принципиальное отличие в том, что include() пытается продолжать обработку сценария, даже если внешний файл отсутствует, в то время как require() является обязательным: если файл отсутствует, PHP интерпретатор останавливает обработку и генерирует фатальную ошибку. В практическом плане это означает, что необходимо использовать include(), если страница должна оставаться рабочей даже без содержимого внешнего файла. Используйте require(), если страница зависит от внешнего файла.</p>
<p style="text-align: justify;">Две другие команды, include_once() и require_once(), работают так же, но предотвращают включение одного и того же файла более одного раза на странице. Это особенно важно при включении файлов, определяющих функции и классы. Попытка определить функцию или класс в сценарии более одного раза вызывает фатальную ошибку. Таким образом, использование include_once() или require_once() гарантирует, что функции и классы определяются только один раз, даже если сценарий пытается включить внешний файл более одного раза, как может произойти, если команды выполняются в условных операторах.</p>
<p style="text-align: justify;">Так какую же из команд использовать? Я рекомендую использовать include() для внешних файлов, которые не являются критически важными, и require_once() для файлов, которые содержат определения функций и классов.</p>
<p style="text-align: center;"><strong>Где PHP ищет включаемые файлы?</strong></p>
<p style="text-align: justify;">Чтобы включить внешний файл, необходимо передать одной из четырех команд include путь к файлу в виде строки, другими словами, путь к файлу должен быть в кавычках (одинарные или двойные, не имеет значения). Путь к файлу может быть абсолютным или относительно текущего документа. Например, любая из следующих строк будет работать (при условии, что целевой файл существует):</p>
<pre class="brush: php; title: ; notranslate">

include('includes/menu.inc.php');
include('C:/xampp/htdocs/phpsols/includes/menu.inc.php');
include('/Applications/MAMP/htdocs/phpsols/includes/menu.inc.php');
</pre>
<p style="text-align: justify;">PHP принимает символы косой черты в путях к файлам в операционной системе Windows.</p>
<p style="text-align: justify;">Использование скобок в командах включения не является обязательным, поэтому следующие строки также будут работать:</p>
<pre class="brush: php; title: ; notranslate">

include 'includes/menu.inc.php';
include 'C:/xampp/htdocs/phpsols/includes/menu.inc.php';
include '/Applications/MAMP/htdocs/phpsols/includes/menu.inc.php';
</pre>
<p style="text-align: justify;">При использовании относительного пути к файлу, рекомендуется использовать ./, чтобы указать, что путь начинается в текущей папке. Таким образом, более эффективным будет переписать первый пример следующим образом:</p>
<pre class="brush: php; title: ; notranslate"> include('./includes/menu.inc.php'); // путь начинается в текущей папке </pre>
<p>Использование пути к файлу относительно корня сайта не работает, как в следующем примере:</p>
<pre class="brush: php; title: ; notranslate"> include('/includes/menu.inc.php'); // РАБОТАТЬ НЕ БУДЕТ </pre>
<p style="text-align: justify;">Если интерпретатор PHP не может найти файл, он также выполняет поиск в include_path, как определено в конфигурации PHP. Я вернусь к данному вопросу позднее в этой главе. Но перед этим попробуем использовать PHP включения на практике. На данный момент, я рекомендую вам использовать путь к файлу относительно текущего документа.</p>
<p style="text-align: center;"><strong>Выбор правильного расширения имени файла для включений</strong></p>
<p style="text-align: justify;">Как вы только что видели, включаемый файл может содержать сырой HTML. Когда интерпретатор PHP встречает команду include, он прекращает обработку в начале внешнего файла и возобновляет в конце. Если вы хотите, чтобы внешний файл использовал PHP код, то код должен быть заключен в теги PHP. Из этого можно сделать вывод, что включаемый файл может иметь любое расширение.</p>
<p style="text-align: justify;">Общепринятым является использование .inc в качестве расширения имени файла, чтобы было понятно, что файл предназначен для включения в другой файл. Однако большинство серверов обрабатывают .inc файлы как обычный текст. Это создает угрозу безопасности, если файл содержит конфиденциальную информацию, такую как имя пользователя и пароль к базе данных. Если файл хранится в корневой папке вашего сайта, любой, кто узнает имя файла, может просто набрать URL в адресной строке браузера, а браузер услужливо покажет все ваши тайные подробности!</p>
<p style="text-align: justify;">С другой стороны, любой файл с расширением .php расширение автоматически отправляется к интерпретатору PHP для парсинга (разбора), перед тем как будет отправлен в браузер. Итак, пока ваша секретная информация находится внутри блока кода PHP и в файле с расширением .php, она не будет раскрыта. Поэтому многие разработчики используют .inc.php как двойное расширение для включений PHP. Расширение .inc напоминает вам, что это включаемый файл, но только серверы интересует только .php на конце, которое гарантирует, что весь код PHP правильно обработан.</p>
<p style="text-align: justify;">Поскольку обычной практикой является хранение включаемых файлов в отдельной папке, которую часто называют includes, вы можете утверждать, что .inc.php является излишним. Какие соглашения об именования вы выбирете решать вам, но использовать только .inc менее безопасно.</p>
<p>© 2012 <a href="http://seo-php.net">SE-оптимизация на PHP</a>. Все права защищены.</p>]]></content:encoded>
			<wfw:commentRss>http://seo-php.net/umenshenie-nagruzki-s-pomoshhyu-include-faylov/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Запрет индексирования страниц с сообщениями об ошибках с помощью кода состояния HTTP</title>
		<link>http://seo-php.net/zapret-indeksirovaniya-stranits-s-soobshheniyami-ob-oshibkah-s-pomoshhyu-koda-sostoyaniya-http</link>
		<comments>http://seo-php.net/zapret-indeksirovaniya-stranits-s-soobshheniyami-ob-oshibkah-s-pomoshhyu-koda-sostoyaniya-http#comments</comments>
		<pubDate>Sat, 18 Jun 2011 01:24:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://seo-php.net/?p=1</guid>
		<description><![CDATA[Давным-давно, в тридевятом царстве, в тридесятом государстве, ваш Web-сервер работал себе потихоньку, и все было прекрасно и замечательно. Но потом прилетел Змей-Горыныч, а за ним полетела и база данных. Из-за этого неожиданного ошибочного состояния (а кто ж такое сможет предвидеть!) многие страницы стали возвращать ошибочные пустые страницы или, возможно, код 404. Может, Web-сервер даже вообще [...]<p>© 2012 <a href="http://seo-php.net">SE-оптимизация на PHP</a>. Все права защищены.</p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Давным-давно, в тридевятом царстве, в тридесятом государстве, ваш Web-сервер работал себе потихоньку, и все было прекрасно и замечательно. Но потом прилетел Змей-Горыныч, а за ним полетела и база данных.</p>
<p style="text-align: justify;"><span id="more-1"></span>Из-за этого неожиданного ошибочного состояния (а кто ж такое сможет предвидеть!) многие страницы стали возвращать ошибочные пустые страницы или, возможно, код 404. Может, Web-сервер даже вообще лег. И, что вообще ужасно, его совершенно нечем заменить. А в это время поисковые механизмы пытаются индексировать ваши страницы, ничего не могут найти, получают пустые страницы и т.д.</p>
<p style="text-align: justify;">Возможны следующие варианты:</p>
<ul style="text-align: justify;">
<li>Возврат кодов 404 или пустых страниц. Это серьезная проблема. Если сервер  возвращает код 404, поисковый механизм исключит ваши страницы из списков.<br />
При выдаче пустых страниц или страниц с кучей ошибок результат может быть тем же. Этого следует избегать всеми возможными способами.</li>
<li>Ничего не обнаружено (нет соединения). Это более желательный результат, если иметь в виду индексирование. При этом поисковый механизм, скорее всего,предположит, что возникли временные проблемы со связью и попытаетсяповторить индексирование позже — хотя это может показаться и совсем непрофессиональным подходом. Ваши пользователи могут огорчиться. Однако, с точки зрения поискового агента, если проблема будет устранена в течение сутокили около того, то особых проблем не будет.</li>
</ul>
<p style="text-align: justify;">На самом деле все довольно просто. Можно возвратить код состояния 500, а также специальную страницу с описанием ошибки. Для поисковых механизмов это означает, что возникла временная техническая проблема. Возможно, на сайте выполняется техническое обслуживание. Все это надо объяснить вежливо и с указанием момента энчания обслуживания. А возможно, случилась серьезная катастрофа национального масштаба — например, как с некоторыми Web-серверами в Новом Орлеане в 2006 г.</p>
<p style="text-align: justify;">Подберите для каждого URL страницу с вежливым сообщением о глобальной ошибке ждите, когда все наладится.</p>
<p style="text-align: justify;">В РНР для этого нужен такой фрагмент программы, за которым следует нужный контент:</p>
<pre class="brush: php; title: ; notranslate"> header('HTTP/1.0 500 Internal Server Error');
echo ' Банк закрыт, пока не улетят эти противные пришельцы. Извините за неудобства, благодарим за сотрудничество с Банком Марса. ';
exit(); </pre>
<p>© 2012 <a href="http://seo-php.net">SE-оптимизация на PHP</a>. Все права защищены.</p>]]></content:encoded>
			<wfw:commentRss>http://seo-php.net/zapret-indeksirovaniya-stranits-s-soobshheniyami-ob-oshibkah-s-pomoshhyu-koda-sostoyaniya-http/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

