<?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/"
	 xmlns:slash="http://purl.org/rss/1.0/modules/slash/" 
>

<channel>
	<title>Denis Moskalets&#039; blog &#187; php</title>
	<atom:link href="http://blog.denyamsk.ru/categories/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.denyamsk.ru</link>
	<description>фото, софт, железо, вебдев + python/django :)</description>
	<lastBuildDate>Wed, 05 Oct 2011 16:40:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Яндекс-like поиск своими&#160;руками</title>
		<link>http://blog.denyamsk.ru/2007/09/11/yandeks-like-poisk-svoimi-rukami/</link>
		<comments>http://blog.denyamsk.ru/2007/09/11/yandeks-like-poisk-svoimi-rukami/#comments</comments>
		<pubDate>Mon, 10 Sep 2007 23:46:16 +0000</pubDate>
		<dc:creator>Denya</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.denyamsk.ru/2007/09/11/yandeks-like-poisk-svoimi-rukami/</guid>
		<description><![CDATA[Классная статья на Хабре про&#160;то, как быстро слепить хороший поисковйы&#160;механизм. Про учет морфологии я думал, что&#160;все намного сложнее. Оказывается, есть неплохие простые&#160;решения. Ну а&#160;про soundex (&#171;возможно, вы искали?&#187;) вообще первый раз слышу. Все это очень&#160;интересно Хабрахабр: Яндекс-like поиск своими&#160;руками. P.S.&#160;Заодно, &#8230; <a href="http://blog.denyamsk.ru/2007/09/11/yandeks-like-poisk-svoimi-rukami/">Continue reading <span class="meta-nav">&#8594;</span></a>


Посты на схожую тематику:<ol><li><a href='http://blog.denyamsk.ru/2006/03/17/webdev-php-sessions/' rel='bookmark' title='Permanent Link: WebDev / PHP /&nbsp;Sessions'>WebDev / PHP /&nbsp;Sessions</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Классная статья на Хабре про&nbsp;то, как быстро слепить хороший поисковйы&nbsp;механизм.<br/>
Про учет морфологии я думал, что&nbsp;все намного сложнее. Оказывается, есть неплохие простые&nbsp;решения.<br/>
Ну а&nbsp;про soundex (&laquo;возможно, вы искали?&raquo;) вообще первый раз слышу. Все это очень&nbsp;интересно</p>
<p><a href="http://www.habrahabr.ru/blog/webdev/24953.html" >Хабрахабр: Яндекс-like поиск своими&nbsp;руками</a>.</p>
<p>P.S.&nbsp;Заодно, <span style="white-space:nowrap" >где-то</span> рядом там нашел линк на &laquo;правильную&raquo; <a href="http://forum.dklab.ru/php/advises/Strip_tags_smartKorrektniyAnalogStrip_tags.html" >реализацию PHP-функции strip_tags</a>. Так, на всякий случай в&nbsp;закладки.<br/>
P.S.S.&nbsp;Нашел забавный блог &laquo;<a href="http://tips.xet.ru/" >Коротко и ясно</a>&raquo;. Просто полезные кусочки кода... Там есть и стеммер, который у слов корни вырезает, если вариант реализации русского soundex&#39;а. Вроде, неплохо, попробуем&nbsp;почитать.</p>
<p><img src="http://blog.denyamsk.ru/?ak_action=api_record_view&id=177&type=feed"  alt="" /></p>


<p>Посты на схожую тематику:<ol><li><a href='http://blog.denyamsk.ru/2006/03/17/webdev-php-sessions/' rel='bookmark' title='Permanent Link: WebDev / PHP /&nbsp;Sessions'>WebDev / PHP /&nbsp;Sessions</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.denyamsk.ru/2007/09/11/yandeks-like-poisk-svoimi-rukami/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<slash:comments>1</slash:comments>
	</item>
		<item>
		<title>WordPress: постоянное подключение к&#160;mysql</title>
		<link>http://blog.denyamsk.ru/2007/07/08/wordpress-postoyannoe-podklyuchenie-k-mysql/</link>
		<comments>http://blog.denyamsk.ru/2007/07/08/wordpress-postoyannoe-podklyuchenie-k-mysql/#comments</comments>
		<pubDate>Sat, 07 Jul 2007 23:23:28 +0000</pubDate>
		<dc:creator>Denya</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.denyamsk.ru/2007/07/08/wordpress-postoyannoe-podklyuchenie-k-mysql/</guid>
		<description><![CDATA[Сделал WordPress&#39;у persistent-connection к&#160;MySQL. Стало в 5 раз&#160;быстрее. Причем не нашел, как сделать это через &#171;нормальные&#187;&#160;настройки. Залез в&#160;код да поменял. Интересно, почему выбрать-то не&#160;дают?.. wp-includes/wp-db.php, 61&#160;строка. Меняем mysql_connect на&#160;mysql_pconnect. Всем клиентам Нашего Хостинга&#160;&#8212; советую&#160;:-) Посты на схожую тематику:WordPress OpenID plugin &#8230; <a href="http://blog.denyamsk.ru/2007/07/08/wordpress-postoyannoe-podklyuchenie-k-mysql/">Continue reading <span class="meta-nav">&#8594;</span></a>


Посты на схожую тематику:<ol><li><a href='http://blog.denyamsk.ru/2006/01/19/wordpress-openid/' rel='bookmark' title='Permanent Link: WordPress OpenID plugin and&nbsp;server'>WordPress OpenID plugin and&nbsp;server</a></li>
<li><a href='http://blog.denyamsk.ru/2005/12/28/wordpress-trackback-bug/' rel='bookmark' title='Permanent Link: WordPress / TrackBack&nbsp;Bug?'>WordPress / TrackBack&nbsp;Bug?</a></li>
<li><a href='http://blog.denyamsk.ru/2006/01/24/livejournal-wordpress/' rel='bookmark' title='Permanent Link: LiveJournal ->&nbsp;WordPress'>LiveJournal ->&nbsp;WordPress</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Сделал WordPress&#39;у persistent-connection к&nbsp;MySQL.<br/>
Стало в 5 раз&nbsp;быстрее.</p>
<p>Причем не нашел, как сделать это через &laquo;нормальные&raquo;&nbsp;настройки.<br/>
Залез в&nbsp;код да поменял. Интересно, почему <span style="white-space:nowrap" >выбрать-то</span> не&nbsp;дают?..</p>
<p><em>wp-includes/wp-db.ph</em>p, 61&nbsp;строка.<br/>
Меняем mysql_connect на&nbsp;mysql_pconnect.</p>
<p>Всем клиентам <a href="http://gluek.info/wiki/our-hosting" >Нашего Хостинга</a>&nbsp;&mdash; советую&nbsp;:-)</p>
<p><img src="http://blog.denyamsk.ru/?ak_action=api_record_view&id=171&type=feed"  alt="" /></p>


<p>Посты на схожую тематику:<ol><li><a href='http://blog.denyamsk.ru/2006/01/19/wordpress-openid/' rel='bookmark' title='Permanent Link: WordPress OpenID plugin and&nbsp;server'>WordPress OpenID plugin and&nbsp;server</a></li>
<li><a href='http://blog.denyamsk.ru/2005/12/28/wordpress-trackback-bug/' rel='bookmark' title='Permanent Link: WordPress / TrackBack&nbsp;Bug?'>WordPress / TrackBack&nbsp;Bug?</a></li>
<li><a href='http://blog.denyamsk.ru/2006/01/24/livejournal-wordpress/' rel='bookmark' title='Permanent Link: LiveJournal ->&nbsp;WordPress'>LiveJournal ->&nbsp;WordPress</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.denyamsk.ru/2007/07/08/wordpress-postoyannoe-podklyuchenie-k-mysql/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	<slash:comments>8</slash:comments>
	</item>
		<item>
		<title>IBM developerWorks Россия: Изучаем&#160;PHP</title>
		<link>http://blog.denyamsk.ru/2007/01/20/ibm-developerworks-rossiya-izuchaem-php/</link>
		<comments>http://blog.denyamsk.ru/2007/01/20/ibm-developerworks-rossiya-izuchaem-php/#comments</comments>
		<pubDate>Sat, 20 Jan 2007 16:54:11 +0000</pubDate>
		<dc:creator>Denya</dc:creator>
				<category><![CDATA[documentation]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.denyamsk.ru/2007/01/20/ibm-developerworks-rossiya-izuchaem-php/</guid>
		<description><![CDATA[На сайте IBM developerWorks Россия появился интересный мануал &#171;Изучаем PHP&#187;.&#160; Цель этого учебного пособия&#160;&#8212; научить вас писать на языке PHP приложения, поддерживающие workflow. Мы начнем с того, что научимся регистрироваться с определенным именем пользователя и паролем, загружать файлы на сервер &#8230; <a href="http://blog.denyamsk.ru/2007/01/20/ibm-developerworks-rossiya-izuchaem-php/">Continue reading <span class="meta-nav">&#8594;</span></a>


Посты на схожую тематику:<ol><li><a href='http://blog.denyamsk.ru/2006/01/30/torrents-kak-skachivat-faylyi-iz-bittorrent-setey/' rel='bookmark' title='Permanent Link: Как скачивать файлы из torrent-сетей, инструкция для&nbsp;начинающих'>Как скачивать файлы из torrent-сетей, инструкция для&nbsp;начинающих</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>На сайте <a href="http://www.ibm.com/developerworks/ru/" >IBM developerWorks Россия</a> появился интересный мануал &laquo;Изучаем PHP&raquo;.&nbsp;</p>
<blockquote  style="border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;">
<p><img src="http://static.php.net/www.php.net/images/php.gif"  style="float: left; margin: 5px 5px 5px 5px; " />Цель этого учебного пособия&nbsp;&mdash; научить вас писать на языке PHP приложения, поддерживающие workflow. Мы начнем с того, что научимся регистрироваться с определенным именем пользователя и паролем, загружать файлы на сервер из браузера, просматривать загруженные файлы. В дальнейшем для пользователей с административными полномочиями мы разработаем специальную процедуру одобрения документов для публичного доступа. В последующих двух частях этой серии (Часть 2 и Часть 3) мы рассмотрим HTTP-аутентификацию, использование потоков данных, обработку исключений и другие важные&nbsp;вопросы.</p>
</blockquote>
<p>В <a href="http://www-128.ibm.com/developerworks/ru/edu/os-phptut1/" >первой части</a> даются базовые понятия языка, на примерах объясняется синтаксис PHP; рассматривается создание базовой страницы, переменные, циклы и условные операторы if-then, массивы и функции, доступ к базам данных, включение файлов с помощью оператора include&nbsp;</p>
<p>Во <a href="http://www-128.ibm.com/developerworks/ru/edu/os-phptut2/" >второй части</a> рассматривается создание сессий, передача информации между сессиями, процедура загрузки файлов на сервер из браузера и использование XML для хранения и отображения информации о&nbsp;файлах.</p>
<p>В <a href="http://www-128.ibm.com/developerworks/ru/edu/os-phptut3/" >третьей части</a> описывается процедура добавления HTTP-аутентификации, потокового перемещения документов из каталогов, закрытых для доступа из сети, обработки исключений. Вводится понятие объекта и с учетом этого понятия изменяется структура&nbsp;приложения.</p>
<p>Короче, довольно кратко и интересно написано :) Почерпнул для себя много нового из второй-третьей&nbsp;части...</p>
<p><img src="http://blog.denyamsk.ru/?ak_action=api_record_view&id=148&type=feed"  alt="" /></p>


<p>Посты на схожую тематику:<ol><li><a href='http://blog.denyamsk.ru/2006/01/30/torrents-kak-skachivat-faylyi-iz-bittorrent-setey/' rel='bookmark' title='Permanent Link: Как скачивать файлы из torrent-сетей, инструкция для&nbsp;начинающих'>Как скачивать файлы из torrent-сетей, инструкция для&nbsp;начинающих</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.denyamsk.ru/2007/01/20/ibm-developerworks-rossiya-izuchaem-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<slash:comments>2</slash:comments>
	</item>
		<item>
		<title>News / Дырка в&#160;PHP4,5</title>
		<link>http://blog.denyamsk.ru/2006/10/07/news-dyirka-v-php45/</link>
		<comments>http://blog.denyamsk.ru/2006/10/07/news-dyirka-v-php45/#comments</comments>
		<pubDate>Fri, 06 Oct 2006 22:37:41 +0000</pubDate>
		<dc:creator>Denya</dc:creator>
				<category><![CDATA[news]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://blog.denyamsk.ru/2006/10/07/news-dyirka-v-php45/</guid>
		<description><![CDATA[Для тех, кто не слышал&#160;&#8212; в PHP4/5 нашелся метод обходить ограничения, накладываемые директивой base_dir. А это значит, что можно написать нехороший скрипт, который будет работать с чужими файлами (ну а какие еще файлы могут быть в чужих&#160;папках?). Решение простое. В &#8230; <a href="http://blog.denyamsk.ru/2006/10/07/news-dyirka-v-php45/">Continue reading <span class="meta-nav">&#8594;</span></a>


Посты на схожую тематику:<ol><li><a href='http://blog.denyamsk.ru/2006/04/15/server-apache-php-security-hole/' rel='bookmark' title='Permanent Link: Server / Памятка начинающим хостерам по затыканию дырок в&nbsp;PHP'>Server / Памятка начинающим хостерам по затыканию дырок в&nbsp;PHP</a></li>
<li><a href='http://blog.denyamsk.ru/2006/10/13/news-paypal-zarabotal-s-rossiey/' rel='bookmark' title='Permanent Link: News / PayPal заработал с&nbsp;Россией'>News / PayPal заработал с&nbsp;Россией</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Для тех, кто не слышал&nbsp;&mdash; <a href="http://www.hardened-php.net/advisory_082006.132.html" >в PHP4/5 нашелся метод обходить ограничения, накладываемые директивой base_dir</a>. А это значит, что можно написать нехороший скрипт, который будет работать с чужими файлами (ну а какие еще файлы могут быть в чужих&nbsp;папках?).</p>
<p>Решение простое. В списку запрещенных функций надо добавить <strong>symlink</strong>. Как это делалось&nbsp;&mdash; можно почитать в моей маленькой <a href="http://blog.denyamsk.ru/2006/04/15/server-apache-php-security-hole/" >памятке по затыканию&nbsp;дыр</a>.</p>
<p><img src="http://blog.denyamsk.ru/?ak_action=api_record_view&id=129&type=feed"  alt="" /></p>


<p>Посты на схожую тематику:<ol><li><a href='http://blog.denyamsk.ru/2006/04/15/server-apache-php-security-hole/' rel='bookmark' title='Permanent Link: Server / Памятка начинающим хостерам по затыканию дырок в&nbsp;PHP'>Server / Памятка начинающим хостерам по затыканию дырок в&nbsp;PHP</a></li>
<li><a href='http://blog.denyamsk.ru/2006/10/13/news-paypal-zarabotal-s-rossiey/' rel='bookmark' title='Permanent Link: News / PayPal заработал с&nbsp;Россией'>News / PayPal заработал с&nbsp;Россией</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.denyamsk.ru/2006/10/07/news-dyirka-v-php45/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<slash:comments>1</slash:comments>
	</item>
		<item>
		<title>Server / Памятка начинающим хостерам по затыканию дырок в&#160;PHP</title>
		<link>http://blog.denyamsk.ru/2006/04/15/server-apache-php-security-hole/</link>
		<comments>http://blog.denyamsk.ru/2006/04/15/server-apache-php-security-hole/#comments</comments>
		<pubDate>Fri, 14 Apr 2006 23:41:55 +0000</pubDate>
		<dc:creator>Denya</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://blog.denyamsk.ru/2006/04/15/server-pamyatka-nachinayuschim-hosteram-po-zatyikaniyu-dyirok-v-php/</guid>
		<description><![CDATA[Сегодня один перловщик спросил меня, а нельзя&#160;ли в PHP через&#160;suEXEC что-нибудь да как-нибудь запустить. Штудирование мануалов показало, что в случае mod_php нельзя, да и ненужно. Ну а в случае fastcgi&#160;&#8212; можно. И это хорошо, это безопасно, но сказка не о &#8230; <a href="http://blog.denyamsk.ru/2006/04/15/server-apache-php-security-hole/">Continue reading <span class="meta-nav">&#8594;</span></a>


Посты на схожую тематику:<ol><li><a href='http://blog.denyamsk.ru/2006/01/18/server-moving/' rel='bookmark' title='Permanent Link: Server /&nbsp;Moving'>Server /&nbsp;Moving</a></li>
<li><a href='http://blog.denyamsk.ru/2006/01/23/server-firstvdsru/' rel='bookmark' title='Permanent Link: Server /&nbsp;FirstVDS.ru'>Server /&nbsp;FirstVDS.ru</a></li>
<li><a href='http://blog.denyamsk.ru/2006/01/19/wordpress-openid/' rel='bookmark' title='Permanent Link: WordPress OpenID plugin and&nbsp;server'>WordPress OpenID plugin and&nbsp;server</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Сегодня один перловщик спросил меня, а нельзя&nbsp;ли в PHP через&nbsp;suEXEC <span style="white-space:nowrap" >что-нибудь</span> да <span style="white-space:nowrap" >как-нибудь</span> запустить. Штудирование мануалов показало, что в случае mod_php нельзя, да и ненужно. Ну а в случае fastcgi&nbsp;&mdash; можно. И это хорошо, это безопасно, но сказка не о том, а о&nbsp;mod_php.<br/>
В мануале по PHP кроме функций <strong>exec</strong> и <strong>system</strong>, про которые я давно знал и вроде&nbsp;бы их запретил у себя на сервере, я нашел еще функцию <strong>popen</strong>. Я насторожился, потому что точно помнил&nbsp;&mdash; этой функции я в настройках PHP не&nbsp;запрещал!<br/>
Тут&nbsp;же из мануала был скопирован и запущен пример. Результат... удивил. Листинги большинства папок сервера, содержимое /etc/passwd, doc_root чужих виртуальных-серверов... Все это предстало перед моим взором :-) Конечно, виноват я. suEXEC&#39;а нету, ведь нету&nbsp;же mod_php, да&nbsp;ну и&nbsp;не&nbsp;все файлы стояли с ограничением на чтение от&nbsp;all. Мой промах,&nbsp;признаю.</p>
<p>Вот код&nbsp;примера:</p>
<blockquote  style="border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;">
<p>&lt;? if(!isset($q)) { $q = &#39;ls -alp&#39;; }&nbsp;?&gt;&lt;html&gt;<br/>
&lt;body&gt;<br/>
	&lt;form&nbsp;method="post"&gt;<br/>
		&lt;input type="text" name="q"&nbsp;value="&lt;?=$q?&gt;"&gt;<br/>
		&lt;input&nbsp;type="submit"&gt;<br/>
	&lt;/form&gt;</p>
<p>	&lt;pre&gt;</p>
<p>	&lt;?php<br/>
	error_reporting(E_ALL);<br/>
	$fp = <strong>popen</strong>($q,&nbsp;&#39;r&#39;);<br/>
	$read =&nbsp;&#39;&#39;;<br/>
	while&nbsp;(!feof($fp))<br/>
	{<br/>
		$read .= fread($fp,&nbsp;4096);<br/>
	}<br/>
	echo&nbsp;$read;<br/>
	pclose($fp);<br/>
	?&gt;</p>
<p>	&lt;/pre&gt;<br/>
&lt;/body&gt;<br/>
&lt;/html&gt;</p>
</blockquote>
<p>Мне это не понравилось и я полез в конфиг Апача <em>httpd.conf</em>. В список disabled_functions я дописал <strong>popen</strong>, перезапустился... Нулевой результат. Попробовал вызвать функцию <strong>exec</strong>&nbsp;&mdash;&nbsp;вызывается.</p>
<p>Шоковое&nbsp;состояние...</p>
<p><strong>Что таким образом можно&nbsp;сделать?</strong><br/>
Многое. Дело в том, что PHP запускается с правами Апача. А тем временем, Апач имеет доступ ко ВСЕМ файлам ВСЕХ виртуальных хостов. Такова необходимость, иначе он не мог&nbsp;бы их отображать и отдавать клиентам. Соответственно, их можно удалить. Этого мало, чтобы считать эту дырку&nbsp;критической?</p>
<p>Я не знаю, как дела обстоят у крупных хостеров, но <span style="white-space:nowrap" >почему-то</span> мне кажется, что у 50% эта дырка есть (проверено на примере во время написания&nbsp;заметки)</p>
<p>Как&nbsp;же все-таки запретить пользователям виртуального хостинга через PHP делать гадости, а&nbsp;именно:<br/>
A) Читать чужие файлы из чужих&nbsp;папок<br/>
B) Вызывать любые системные&nbsp;функции</p>
<ul>
<li><strong>Пункт&nbsp;A</strong></li>
</ul>
<p>По первому пункту все оказалось просто. Не надо включать никакой Safe Mode, бога ради. Это зло. Это очень-очень неудобно и плохо. Тем более, есть методы&nbsp;проще.<br/>
Виртуальный хост в Апаче создается директивой <VirtualHost>. Это естественно, что&nbsp;для каждого виртуального хоста вы указываете DocumentRoot. Ну так давайте&nbsp;же сделаем так, чтобы скрипты, запущенные из&nbsp;под этого виртуального хоста не могли читать файла ниоткуда, кроме как&nbsp;из DocumentRoot&#39;а. А еще, давайте сделаем так, чтобы сессии для каждого виртуального хоста сохранялись в отдельных папках. Это тоже логично, зачем&nbsp;же все&nbsp;перемешивать?</p>
<p>Добавьте в секцию  <VirtualHost>следующие&nbsp;строчки</p>
<blockquote  style="border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;">
<p>&lt;<strong>IfModule</strong>&nbsp;mod_php4.c&gt;<br/>
<strong>php_admin_value</strong> open_basedir&nbsp;/home/username/<br/>
<strong>php_admin_value</strong> doc_root&nbsp;/home/username/html/<br/>
<strong>php_admin_value</strong> upload_tmp_dir&nbsp;/home/username/tmp/<br/>
<strong>php_admin_value</strong> session.save_path&nbsp;/home/username/tmp/<br/>
&lt;/<strong>IfModule</strong>&gt;</p>
</blockquote>
<p>mod_php4.c замените на mod_php5.c в зависимости от версии&nbsp;PHP.</p>
<p>В этом примере DocumentRoot этого виртуального&nbsp;хоста:</p>
<blockquote  style="border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;">
<p><strong>DocumentRoot</strong>&nbsp;&laquo;/home/username/html&raquo;</p>
</blockquote>
<p>Таким образом, первая проблема решена. Попробуйте сделать <em>fopen(&laquo;/home/anotheruser/html/hacked.txt&raquo;,"a");</em>&nbsp;&mdash; не получится.&nbsp;</p>
<ul>
<li><strong>Пункт&nbsp;B</strong></li>
</ul>
<p>Переходим ко второму&nbsp;пункту.<br/>
В данном случае я совершил две ошибки: директиву <strong>disable_functions</strong> я задал там, где этого делать не стоит; да и список запрещенных функций был ДАЛЕКО&nbsp;неполный.</p>
<p>Не повторяйте мою ошибку, не пытайтесь задавать параметр <strong>disable_functions</strong> в <em>httpd.conf</em> отдельно для каждого виртуального хоста. У ВАС НИЧЕГО НЕ ВЫЙДЕТ! Это раньше так можно было, наверное... потому что у меня именно так и было, а я&nbsp;об этом <span style="white-space:nowrap" >где-то</span> как-то&nbsp;прочитал.</p>
<p><strong>disable_functions</strong> надо задавать в <em>php.ini</em>. Чтобы узнать, какой php.ini используется у вас, выполните в шелле следующую&nbsp;команду:</p>
<blockquote  style="border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;">
<p>php -i | grep&nbsp;ini</p>
</blockquote>
<p>И с большой вероятностью вы увидите, где лежит ваш&nbsp;php.ini</p>
<p>В нем, в районе 199 строки есть <span style="white-space:nowrap" >что-то</span>&nbsp;вроде:</p>
<blockquote  style="border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;">
<p>; This directive allows you to disable certain functions for security&nbsp;reasons.<br/>
; It receives a comma-delimited list of function names. This directive&nbsp;is<br/>
; *NOT* affected by whether Safe Mode is turned On or&nbsp;Off.<br/>
disable_functions =&nbsp;
</p>
</blockquote>
<p>Так вот. Список функций, которые <strong>НЕОБХОДИМО ОГРАНИЧИТЬ</strong> на виртуальном&nbsp;хостинге:<br/>
disable_functions =&nbsp;&laquo;popen,dl,set_time_limit,passthru,system,exec,proc_open,shell_exec,proc_close,symlink&raquo;</p>
<p>Это минимум. Я не уверен, что&nbsp;это все. Я с 90% вероятностью могу увтерждать, что&nbsp;ни один системный вызов на сервере не пройдет. А вот <span style="white-space:nowrap" >какую-нибудь</span> еще гадость наверняка можно&nbsp;сделать.</p>
<p><strong>UPD&nbsp;2006.10.07</strong><br/>
К списку опасных функций добавилась&nbsp;<strong><a href="http://blog.denyamsk.ru/2006/10/07/news-dyirka-v-php45/" >symlink</a></strong>.</p>
<ul>
<li><strong>Ссылки</strong></li>
</ul>
<ul>
<li><strong><a href="http://ilia.ws/archives/5_Top_10_ways_to_crash_PHP.html" >Top 10 ways to crash&nbsp;PHP</a></strong><br/>
Довольно интересная статья. Правда, боюсь, она немного&nbsp;устарела.</li>
</ul>
<p><img src="http://blog.denyamsk.ru/?ak_action=api_record_view&id=89&type=feed"  alt="" /></p>


<p>Посты на схожую тематику:<ol><li><a href='http://blog.denyamsk.ru/2006/01/18/server-moving/' rel='bookmark' title='Permanent Link: Server /&nbsp;Moving'>Server /&nbsp;Moving</a></li>
<li><a href='http://blog.denyamsk.ru/2006/01/23/server-firstvdsru/' rel='bookmark' title='Permanent Link: Server /&nbsp;FirstVDS.ru'>Server /&nbsp;FirstVDS.ru</a></li>
<li><a href='http://blog.denyamsk.ru/2006/01/19/wordpress-openid/' rel='bookmark' title='Permanent Link: WordPress OpenID plugin and&nbsp;server'>WordPress OpenID plugin and&nbsp;server</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.denyamsk.ru/2006/04/15/server-apache-php-security-hole/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	<slash:comments>8</slash:comments>
	</item>
		<item>
		<title>WebDev / PHP /&#160;Sessions</title>
		<link>http://blog.denyamsk.ru/2006/03/17/webdev-php-sessions/</link>
		<comments>http://blog.denyamsk.ru/2006/03/17/webdev-php-sessions/#comments</comments>
		<pubDate>Fri, 17 Mar 2006 11:29:06 +0000</pubDate>
		<dc:creator>Denya</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.denyamsk.ru/2006/03/17/webdev-php-sessions/</guid>
		<description><![CDATA[Вы никогда не сталкивались с проблемой, когда после авторизации на сайте www.domain.ru вы переходите на domain.ru, а&#160;вас не&#160;узнают? Или вот, случай из жизни. Заходите в интернет-магазин aaa.ru, в разделе comp.aaa.ru добавляете в корзину один товар, переходите в раздел audio.aaa.ru, а &#8230; <a href="http://blog.denyamsk.ru/2006/03/17/webdev-php-sessions/">Continue reading <span class="meta-nav">&#8594;</span></a>


Посты на схожую тематику:<ol><li><a href='http://blog.denyamsk.ru/2005/12/28/webdev-novyie-veyaniya-rubyonrails/' rel='bookmark' title='Permanent Link: WebDev / Новые Веяния,&nbsp;RubyOnRails'>WebDev / Новые Веяния,&nbsp;RubyOnRails</a></li>
<li><a href='http://blog.denyamsk.ru/2006/01/15/webdev-solitaire-on-js/' rel='bookmark' title='Permanent Link: WebDev / Solitaire on&nbsp;JS'>WebDev / Solitaire on&nbsp;JS</a></li>
<li><a href='http://blog.denyamsk.ru/2006/04/06/webdev-button/' rel='bookmark' title='Permanent Link: WebDev /&nbsp;&lt;button&gt;'>WebDev /&nbsp;&lt;button&gt;</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Вы никогда не сталкивались с проблемой, когда после авторизации на сайте www.domain.ru вы переходите на domain.ru, а&nbsp;вас не&nbsp;узнают?<br/>
Или вот, случай из жизни. Заходите в интернет-магазин aaa.ru, в разделе comp.aaa.ru добавляете в корзину один товар, переходите в раздел audio.aaa.ru, а корзина опять пустая. И делай чего хочешь&nbsp;&mdash; НЕ&nbsp;РАБОТАЕТ!</p>
<p>Я сталкиваюсь с подобными проблемами КАЖДЫЙ ДЕНЬ. Куча форумов, интернет-магазинов... да тот&nbsp;же <a href="http://news2.ru" >news2.ru</a> тоже имеет эту&nbsp;проблему.</p>
<p>Попробуйте зайти на <a href="http://news2.ru" >news2.ru</a>, залогиниться, а потом зайти на <a href="http://www.news2.ru" >www.news2.ru</a>. Вам скажут: &laquo;Привет,&nbsp;Гость!&raquo;.</p>
<p>В принципе, в&nbsp;чем проблема&nbsp;&mdash; я догадался уже давно... Дело в том, что cookie, &laquo;ключик&raquo;, по которому сайт вас узнает, ставится на domain.ru, домен второго уровня. А вот в домене третьего уровня (www.domain.ru) cookie уже не видится. И идут&nbsp;косяки.</p>
<p>Полистав RFC, узналось, что можно поставить кукиз на&nbsp;<strong>.</strong>domain.ru<br/>
Обратите внимание на ТОЧКУ перед именем домена. Это значит, что кука будет доступна как и&nbsp;при обращении к domain.ru, так и&nbsp;во всех поддоменах ТРЕТЬЕГО уровня. Это то, что было нам нужно&nbsp;:-)</p>
<p>Как в PHP это делается? Просто! Функция&nbsp;<strong><a href="http://php.rinet.ru/manual/en/function.session-set-cookie-params.php" >session_set_cookie_params</a></strong>:</p>
<p><em>void</em> <strong>session_set_cookie_params</strong> ( <em>int</em> lifetime [, <em>string </em>path [, <em>string</em> domain [, <em>bool</em> secure]]]&nbsp;)</p>
<p><em>int</em> lifetime&nbsp;&mdash; время жизни кука. Обычно session_start(); ставит куку PHPSESSID с lifetime=0. То есть после закрытия браузера кук удалится и сессия закроется. Если поставить число (в секундах) побольше, то после закрытия браузера сессия не умрет сразу, в течение этого времени можно будет открыть сайт заново, и&nbsp;вы останетесь залогиненным, товар в корзине интернет-магазина останется на&nbsp;месте.</p>
<p><em>string</em> path&nbsp;&mdash; путь, начиная с которого кукиз будет действительным. &laquo;/&raquo;&nbsp;&mdash; значит, что прямо с корня. Кук будет виден и в http://aaa.ru/ и в&nbsp;http://aaa.ru/vobla<br/>
А если, например, передать функции значение path равное &laquo;/forum/&raquo;, то кукиз будет &laquo;виден&raquo; только из папки и подпапок forum: http://aaa.ru/forum, http://aaa.ru/forum/comp/, но&nbsp;не будет &laquo;виден&raquo; из: http://aaa.ru/,&nbsp;http://aaa.ru/chat/</p>
<p><em>string</em> domain&nbsp;&mdash; ключевой параметр, который обсуждался :-) Если вы хотите, чтоб кук был виден как&nbsp;по основному адресу http://aaa.ru, так и&nbsp;по адресу http://www.aaa.ru, то передайте функции значение параметра domain равное &laquo;.aaa.ru&raquo; и&nbsp;все будет&nbsp;тип-топ.</p>
<p>session_set_cookie_params() необходимо вызывать каждый раз перед session_start().&nbsp;</p>
<p>К сожалению, задать список доменов, из&nbsp;под которых будет виден cookie нельзя. Нельзя передать в&nbsp;эту функцию параметр domain типа &laquo;www.aaa.ru,comp.aaa.ru,audio.aaa.ru&raquo;. Тут уже нужно думать, как быть, что&nbsp;делать.</p>
<p>А вот Perl программисты думают сами. Можно точно так&nbsp;же поставить кукиз на&nbsp;.domain.ru<br/>
А можно поставить на domain.ru и на&nbsp;www.domain.ru<br/>
Это уж&nbsp;на&nbsp;что хватит фантазии :-) Вот так&nbsp;вот.</p>
<p>Удачи в webdev&#39;е, и&nbsp;не забывайте про такие&nbsp;&laquo;мелочи&raquo;.</p>
<p><img src="http://blog.denyamsk.ru/?ak_action=api_record_view&id=79&type=feed"  alt="" /></p>


<p>Посты на схожую тематику:<ol><li><a href='http://blog.denyamsk.ru/2005/12/28/webdev-novyie-veyaniya-rubyonrails/' rel='bookmark' title='Permanent Link: WebDev / Новые Веяния,&nbsp;RubyOnRails'>WebDev / Новые Веяния,&nbsp;RubyOnRails</a></li>
<li><a href='http://blog.denyamsk.ru/2006/01/15/webdev-solitaire-on-js/' rel='bookmark' title='Permanent Link: WebDev / Solitaire on&nbsp;JS'>WebDev / Solitaire on&nbsp;JS</a></li>
<li><a href='http://blog.denyamsk.ru/2006/04/06/webdev-button/' rel='bookmark' title='Permanent Link: WebDev /&nbsp;&lt;button&gt;'>WebDev /&nbsp;&lt;button&gt;</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.denyamsk.ru/2006/03/17/webdev-php-sessions/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	<slash:comments>7</slash:comments>
	</item>
		<item>
		<title>WebDev / Новые Веяния,&#160;RubyOnRails</title>
		<link>http://blog.denyamsk.ru/2005/12/28/webdev-novyie-veyaniya-rubyonrails/</link>
		<comments>http://blog.denyamsk.ru/2005/12/28/webdev-novyie-veyaniya-rubyonrails/#comments</comments>
		<pubDate>Wed, 28 Dec 2005 16:31:52 +0000</pubDate>
		<dc:creator>Denya</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.denyamsk.ru/2005/12/28/webdev-novyie-veyaniya-rubyonrails/</guid>
		<description><![CDATA[Кто-то, прочитав заголовок, скажет: &#171;Да какие&#160;же они новые!&#187;. Кто-то скажет: &#171;Ну, руби, ну, рельсы. А зачем мне? PHP(Perl?) спасет мир&#187;. А кто-то просто прочитает и&#160;закроет. По последней схеме раньше действовал и я, хотя многие уважаемые мной блоггеры (urbansheep, Clops, Maniac, &#8230; <a href="http://blog.denyamsk.ru/2005/12/28/webdev-novyie-veyaniya-rubyonrails/">Continue reading <span class="meta-nav">&#8594;</span></a>


Посты на схожую тематику:<ol><li><a href='http://blog.denyamsk.ru/2006/03/17/webdev-php-sessions/' rel='bookmark' title='Permanent Link: WebDev / PHP /&nbsp;Sessions'>WebDev / PHP /&nbsp;Sessions</a></li>
<li><a href='http://blog.denyamsk.ru/2006/01/15/webdev-solitaire-on-js/' rel='bookmark' title='Permanent Link: WebDev / Solitaire on&nbsp;JS'>WebDev / Solitaire on&nbsp;JS</a></li>
<li><a href='http://blog.denyamsk.ru/2006/04/06/webdev-button/' rel='bookmark' title='Permanent Link: WebDev /&nbsp;&lt;button&gt;'>WebDev /&nbsp;&lt;button&gt;</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><span style="white-space:nowrap" >Кто-то</span>, прочитав заголовок, скажет: &laquo;Да какие&nbsp;же они новые!&raquo;. <span style="white-space:nowrap" >Кто-то</span> скажет: &laquo;Ну, руби, ну, рельсы. А зачем мне? PHP(Perl?) спасет мир&raquo;. А <span style="white-space:nowrap" >кто-то</span> просто прочитает и&nbsp;закроет.<br/>
По последней схеме раньше действовал и я, хотя многие уважаемые мной блоггеры (urbansheep, Clops, <a href="http://softwaremaniacs.org/blog" >Maniac</a>, <a href="http://live.julik.nl/" >julik</a>) писали посты, употребляя загадочные термины типа <acronym title="RubyOnRails"  style="border-bottom: 1px dotted;" >RoR</acronym>&nbsp;или <acronym title="Python framework"  style="border-bottom: 1px dotted;" >Django</acronym>, причем эти загадочные штуки они исключительно нахваливали. Да все <span style="white-space:nowrap" >как-то</span> мимо ушей шло, не цепляло, да лень&nbsp;было.</p>
<p>А лказывается, очень интересная штуки, эти RoRы и&nbsp;Джанги.<br/>
По <span&nbsp;style="white-space:nowrap">порядку.</p>
<p>Когда-то</span>, давным давно, захотелось повебдевить (webdev). Выбор был небольшой,&nbsp;либо старик Perl,&nbsp;либо довольно новый на&nbsp;то время, активно рекламирующийся и захватывающий мир, PHP. Выбор пал на&nbsp;PHP, который был изучен за пару дней для удовлетворения собственного любопытства: &laquo;Динамический контент&nbsp;&mdash; это как?&raquo;. И так делали многие, насколько я себе представляю. И даже зарабатывали на этом деньги. А <span style="white-space:nowrap" >кто-то</span> и&nbsp;до&nbsp;сих пор зарабатывает. Но жизнь не стоит на месте. Это ключевой момент. Жизнь движется, все развивается. <b>Кроме Perl и PHP есть ЕЩЕ ЧТО-ТО!</b> И это давно надо было&nbsp;понять.</p>
<blockquote    style="border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;">
<p>Даже если работать с&nbsp;Rails и&nbsp;Ruby претит принципиально рекомендуется <span style="white-space:nowrap" >наконец-то</span> высунуть голову из PHP-болотца (как жаль что я&nbsp;это сделал так поздно) и оглядеться&nbsp;вокруг.</p>
</blockquote>
<p>Пока еще не поздно&nbsp;:)<br/>
Вы программируете на&nbsp;PHP? PHP&nbsp;&mdash; это уродливый клон синтаксиса C. Хорошо конечно, но можно и&nbsp;<b>по-другому</b>.</p>
Все цитаты на тему ruby выдернуты из поста julik&#39;а. <b>Очень советую</b> почитать его пост на&nbsp;эту тему. Может хоть это откроет вам глаза. Попробовать RoR совсем не сложно, framework ставится легко. С полпинка. Лень ставить? Смотрите в конец поста. Try ruby!
<ul>
<li>Читать: <font size="+1" ><a href="http://live.julik.nl/2005/11/php-is-so-90s" ><b>Рельсовые войны</b></a></font>&nbsp;</li>
</ul>
<p>Кстати да, забыл сказать. Вообще, <a href="http://www.ruby-lang.org/" >Ruby</a>&nbsp;&mdash; это язык такой. Довольно молодой. Основные&nbsp;принципы?</p>
<blockquote    style="border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;">
<ul>
<li>Все&nbsp;&mdash; объект&nbsp;</li>
<li>Класс&nbsp;&mdash; тоже&nbsp;объект</li>
<li>Класс класса&nbsp;&mdash; объект&nbsp;(ха!)</li>
<li>И строка, и число&nbsp;&mdash; объекты, равно как&nbsp;True и&nbsp;False.</li>
<li>Да, null тоже объект. Кстати, его класс&nbsp;&mdash; объект класса&nbsp;Класс.</li>
<li>Объекты отвечают на сообщения, причем сообщения сходной семантики в классах называются&nbsp;одинаково</li>
</ul>
<p>Все. Этого&nbsp;достаточно.</p>
<p>Чтобы выяснить разницу двух массивов в&nbsp;PHP, нужно хорошенько прочитать про&nbsp;все 6478 функций set arithmetic. Чтобы сделать это в&nbsp;Ruby, нужно отнять один массив от другого знаком&nbsp;минус.</p>
<p>...</p>
<p><b>Rails</b>&nbsp;&mdash; это framework (набор библиотек, к которому надо приписать минимум кода для создания готового веб-приложения), сделанный для создания веб-сайтов с базами данных “с нуля”. Это важно&nbsp;&mdash; именно “с нуля”, для “напяливания” сайта на 1С оно не подойдет&nbsp;совершенно.</p>
<p>...</p>
<p>Но все вышесказанное нужно попробовать. По крайней мере по тому что в области архитектуры сейчас Rails&nbsp;&mdash; культовая система, а через&nbsp;год будет baseline-решением (а место Rails займут Seaside и ему&nbsp;подобные).</p>
<p>...</p>
<p>А хостинг&nbsp;&mdash; проблемой не является. Если он нужен, то&nbsp;он будет. А если нет&nbsp;&mdash; то пусть ваш клиент сделает вам одолжение и выберет среднестатистический русский хостинг, а&nbsp;не вас. Он вас не&nbsp;заслуживает.</p>
</blockquote>
<p><b>Try&nbsp;ruby!</b><br/>
Ну что, уговорили мы вас попробовать? Тогда сделайте это в окне браузера прямо <b><a href="http://tryruby.hobix.com/" >здесь и&nbsp;сейчас</a></b>.</p>
<p>PS. На тему Python&#39;а в применении к webdev&#39;у сейчас не осилил. Лучше сделаю отдельный пост. А пока, <a href="http://softwaremaniacs.org/blog/2005/12/08/django/" >можно прочитать про&nbsp;Django у Maniac&#39;а в&nbsp;блоге</a>.</p>
<p><img src="http://blog.denyamsk.ru/?ak_action=api_record_view&id=11&type=feed"  alt="" /></p>


<p>Посты на схожую тематику:<ol><li><a href='http://blog.denyamsk.ru/2006/03/17/webdev-php-sessions/' rel='bookmark' title='Permanent Link: WebDev / PHP /&nbsp;Sessions'>WebDev / PHP /&nbsp;Sessions</a></li>
<li><a href='http://blog.denyamsk.ru/2006/01/15/webdev-solitaire-on-js/' rel='bookmark' title='Permanent Link: WebDev / Solitaire on&nbsp;JS'>WebDev / Solitaire on&nbsp;JS</a></li>
<li><a href='http://blog.denyamsk.ru/2006/04/06/webdev-button/' rel='bookmark' title='Permanent Link: WebDev /&nbsp;&lt;button&gt;'>WebDev /&nbsp;&lt;button&gt;</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.denyamsk.ru/2005/12/28/webdev-novyie-veyaniya-rubyonrails/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<slash:comments>1</slash:comments>
	</item>
		<item>
		<title>WordPress / TrackBack&#160;Bug?</title>
		<link>http://blog.denyamsk.ru/2005/12/28/wordpress-trackback-bug/</link>
		<comments>http://blog.denyamsk.ru/2005/12/28/wordpress-trackback-bug/#comments</comments>
		<pubDate>Wed, 28 Dec 2005 16:24:45 +0000</pubDate>
		<dc:creator>Denya</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.denyamsk.ru/2005/12/28/wordpress-trackback-bug/</guid>
		<description><![CDATA[Однако, как всегда. У всех все работает, а у меня&#160;&#8212; через&#160;задницу. Наплильник да помог.&#160; ТрэкБэки от меня к другим блогам уходили в какой-то злоебучей кодировке. В заголовке прописывалась utf-8, а текст был сконверчен во что-то&#160;странное. Итого. Файл wp-trackback.php, строки&#160;41-50. .&#160; &#8230; <a href="http://blog.denyamsk.ru/2005/12/28/wordpress-trackback-bug/">Continue reading <span class="meta-nav">&#8594;</span></a>


Посты на схожую тематику:<ol><li><a href='http://blog.denyamsk.ru/2006/01/24/lj-crossposting/' rel='bookmark' title='Permanent Link: WordPress /&nbsp;LJ-crossposting'>WordPress /&nbsp;LJ-crossposting</a></li>
<li><a href='http://blog.denyamsk.ru/2006/01/19/wordpress-openid/' rel='bookmark' title='Permanent Link: WordPress OpenID plugin and&nbsp;server'>WordPress OpenID plugin and&nbsp;server</a></li>
<li><a href='http://blog.denyamsk.ru/2007/07/08/wordpress-postoyannoe-podklyuchenie-k-mysql/' rel='bookmark' title='Permanent Link: WordPress: постоянное подключение к&nbsp;mysql'>WordPress: постоянное подключение к&nbsp;mysql</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Однако, как всегда. У всех все работает, а у меня&nbsp;&mdash; через&nbsp;задницу.<br/>
Наплильник да помог.&nbsp;</p>
<p>ТрэкБэки от меня к другим блогам уходили в <span style="white-space:nowrap" >какой-то</span> злоебучей кодировке. В заголовке прописывалась utf-8, а текст был сконверчен во <span style="white-space:nowrap" >что-то</span>&nbsp;странное.</p>
<p>Итого. Файл wp-trackback.php, строки&nbsp;41-50.</p>
<blockquote    style="border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;">
<p>.&nbsp; .&nbsp;&nbsp;.<br/>
if&nbsp;($charset)<br/>
&nbsp; &nbsp; &nbsp; &nbsp; $charset = strtoupper( trim($charset)&nbsp;);<br/>
else<br/>
&nbsp; &nbsp; &nbsp; &nbsp; <b>$charset = &#39;ASCII, UTF-8, ISO-8859-1, JIS, EUC-JP,&nbsp;SJIS&#39;;</b></p>
<p>if ( function_exists(&#39;mb_convert_encoding&#39;) ) { // For international&nbsp;trackbacks<br/>
&nbsp; &nbsp; &nbsp; &nbsp; $title&nbsp; &nbsp;  = <b>mb_convert_encoding</b>($title, get_settings(&#39;blog_charset&#39;),&nbsp;$charset);<br/>
&nbsp; &nbsp; &nbsp; &nbsp; $excerpt&nbsp;  = <b>mb_convert_encoding</b>($excerpt, get_settings(&#39;blog_charset&#39;),&nbsp;$charset);<br/>
&nbsp; &nbsp; &nbsp; &nbsp; $blog_name = <b>mb_convert_encoding</b>($blog_name, get_settings(&#39;blog_charset&#39;),&nbsp;$charset);<br/>
}<br/>
.&nbsp; .&nbsp;&nbsp;.
</p>
</blockquote>
<p>Таким образом, в заголовке у&nbsp;нас прописано utf-8, а текст... волшебной функцией ЗАЧЕМ-ТО конвертится из utf-8(именно это возвращает <i>get_settings(&#39;blog_charset&#39;)</i>) в&nbsp;ASCII.</p>
<p>Все, что надо сделать для решения проблемы, это заменить&nbsp;строку</p>
<blockquote  style="border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;">
<p>$charset = &#39;<strong>ASCII</strong>, UTF-8, ISO-8859-1, JIS, EUC-JP,&nbsp;SJIS&#39;;</p>
</blockquote>
<p>на</p>
<blockquote  style="border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;border: 1px dotted #303030; border-left: 3px double #303030; padding: 10px 10px 10px 10px; margin: 10px 10px 10px 40px; background: #E9E9E9; color: #303030;">
<p>$charset = &#39;UTF-8, ISO-8859-1, JIS, EUC-JP,&nbsp;SJIS&#39;;</p>
</blockquote>
<p>Ключевой вопрос&nbsp;&mdash; А У ДРУГИХ ПОЧЕМУ ВСЕ РАБОТАЕТ СРАЗУ,&nbsp;а?</p>
<p><strong>UPD</strong>. Через полгода после написания записи нашелся-таки один человек, которому эти манипуляции помогли избавится от кривой кодровки в трекбеках :-)&nbsp;Ура!</p>
<p><img src="http://blog.denyamsk.ru/?ak_action=api_record_view&id=8&type=feed"  alt="" /></p>


<p>Посты на схожую тематику:<ol><li><a href='http://blog.denyamsk.ru/2006/01/24/lj-crossposting/' rel='bookmark' title='Permanent Link: WordPress /&nbsp;LJ-crossposting'>WordPress /&nbsp;LJ-crossposting</a></li>
<li><a href='http://blog.denyamsk.ru/2006/01/19/wordpress-openid/' rel='bookmark' title='Permanent Link: WordPress OpenID plugin and&nbsp;server'>WordPress OpenID plugin and&nbsp;server</a></li>
<li><a href='http://blog.denyamsk.ru/2007/07/08/wordpress-postoyannoe-podklyuchenie-k-mysql/' rel='bookmark' title='Permanent Link: WordPress: постоянное подключение к&nbsp;mysql'>WordPress: постоянное подключение к&nbsp;mysql</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.denyamsk.ru/2005/12/28/wordpress-trackback-bug/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	<slash:comments>4</slash:comments>
	</item>
	</channel>
</rss>

