<?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>Юникс и другие &#187; PHP</title>
	<atom:link href="http://boombick.org/blog/posts/category/programming/php/feed" rel="self" type="application/rss+xml" />
	<link>http://boombick.org/blog</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Tue, 29 Nov 2011 22:14:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Тестируем MariaDB</title>
		<link>http://boombick.org/blog/posts/99</link>
		<comments>http://boombick.org/blog/posts/99#comments</comments>
		<pubDate>Wed, 26 May 2010 14:33:09 +0000</pubDate>
		<dc:creator>boombick</dc:creator>
				<category><![CDATA[*NIX]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://boombick.org/blog/posts/99</guid>
		<description><![CDATA[На недавно прошедшей DevConf выступал с докладом Michael &#8220;Monty&#8221; Widenius, автор и идейный вдохновитель MySQL. Он рассказал про то, что Oracle потихоньку убивает MySQL и презентовал форк под названием MariaDB. Меня заинтересовала эта СУРБД и вот представляю вам свой опыт ее использования :) Итак, по шагам. Эксперементировать решил на Debian, коий и поднял в виртуальной [...]]]></description>
			<content:encoded><![CDATA[<p>На недавно прошедшей <a href="http://devconf.ru">DevConf</a> выступал с докладом <a href="http://en.wikipedia.org/wiki/Michael_Widenius">Michael &#8220;Monty&#8221; Widenius</a>, автор и идейный вдохновитель MySQL. Он рассказал про то, что Oracle потихоньку убивает MySQL и презентовал форк под названием <a href="http://askmonty.org/wiki/MariaDB_versus_MySQL">MariaDB</a>.<br />
Меня заинтересовала эта СУРБД и вот представляю вам свой опыт ее использования :)<br />
<span id="more-99"></span><br />
Итак, по шагам.<br />
Эксперементировать решил на Debian, коий и поднял в виртуальной машине. Меня, в первую очередь, интересовало ее применение на собственных проектах и совместимость с моими скриптами и сайтиками :)<br />
Итак, сначала выполняем следующие действия:</p>
<p>Добавляем ключ репозитория в хранилище и добавляем репозиторий в sources.list</p>
<blockquote><pre>
wget -O- http://ourdelta.org/deb/ourdelta.gpg | sudo apt-key add -
    sudo wget http://ourdelta.org/deb/sources/lenny-mariadb-ourdelta.list \
      -O /etc/apt/sources.list.d/ourdelta.list
</pre>
</blockquote>
<p>Затем устанавливаем, собственно, сервер и клиентскую либу. Все остальное, что нам будет нужно, потянется по зависимостям</p>
<blockquote><pre>
aptitude install libmariadbclient16 mariadb-server-5.1
 </pre>
</blockquote>
<p><a href='http://boombick.org/blog/wp-content/uploads/2010/05/password_setup.png' title='password_setup.png'><img src='http://boombick.org/blog/wp-content/uploads/2010/05/password_setup.png' alt='password_setup.png' /></a><br />
Все, как в mysql :) Вводим желаемый пароль root для входа в mariadb</p>
<p><a href='http://boombick.org/blog/wp-content/uploads/2010/05/login.png' title='login.png'><img src='http://boombick.org/blog/wp-content/uploads/2010/05/login.png' alt='login.png' /></a><br />
Затем логинимся</p>
<blockquote><pre>
mysql -u root -p
</pre>
</blockquote>
<p>Все до боли привычно и знакомо :)<br />
Ну чтож, пока все отлично (даже запускается как /etc/init.d/mysql start), проверим, как оно дружит с PHP</p>
<p>Сначала я хотел запустить стандартные бенчмарки, но жестоко обломался :) В репозитории были версии только для 64-битных систем<br />
<a href='http://boombick.org/blog/wp-content/uploads/2010/05/test_failed.png' title='test_failed.png'><img src='http://boombick.org/blog/wp-content/uploads/2010/05/test_failed.png' alt='test_failed.png' /></a></p>
<p>Ну и фиг с ним, подрубаем PHP</p>
<blockquote><pre>
aptitude install php5-cli php5-mysql
</pre>
</blockquote>
<p>создаем тестовую табличку<br />
<a href='http://boombick.org/blog/wp-content/uploads/2010/05/create_table.png' title='create_table.png'><img src='http://boombick.org/blog/wp-content/uploads/2010/05/create_table.png' alt='create_table.png' /></a><br />
и проверяем</p>
<p><a href='http://boombick.org/blog/wp-content/uploads/2010/05/test_connect.png' title='test_connect.png'><img src='http://boombick.org/blog/wp-content/uploads/2010/05/test_connect.png' alt='test_connect.png' /></a></p>
<p><a href='http://boombick.org/blog/wp-content/uploads/2010/05/test_connect_result.png' title='test_connect_result.png'><img src='http://boombick.org/blog/wp-content/uploads/2010/05/test_connect_result.png' alt='test_connect_result.png' /></a></p>
<p>Как видите, со стороны PHP все абсолютно прозрачно и никаких лишних телодвижений совершать не приходится. Это радует :)<br />
Для эксперимента можно поставить Wordpres<br />
Доставляем apache и все необходимое для него и пробуем<br />
<a href='http://boombick.org/blog/wp-content/uploads/2010/05/wp_install.png' title='wp_install.png'><img src='http://boombick.org/blog/wp-content/uploads/2010/05/wp_install.png' alt='wp_install.png' /></a></p>
<p><a href='http://boombick.org/blog/wp-content/uploads/2010/05/wp_installed.png' title='wp_installed.png'><img src='http://boombick.org/blog/wp-content/uploads/2010/05/wp_installed.png' alt='wp_installed.png' /></a></p>
<p>Все отлично :)</p>
<p>PS Моей целью не было выяснение всех отличий MariaDB от MySQL, меня интересовала именно возможность применять ее в собственных проектах и дальнейшего отказа от MySQL. Возможность проверил, в дальнейшем попробую поставить ее на реальный сервер и попробовать в  production на каких-нибудь не очень критичных проектах :)<br />
О результатх будет отдельный пост.</p>
]]></content:encoded>
			<wfw:commentRss>http://boombick.org/blog/posts/99/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Логирование писем, отосланных через функцию mail()</title>
		<link>http://boombick.org/blog/posts/77</link>
		<comments>http://boombick.org/blog/posts/77#comments</comments>
		<pubDate>Fri, 31 Jul 2009 11:20:22 +0000</pubDate>
		<dc:creator>boombick</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://boombick.org/blog/posts/77</guid>
		<description><![CDATA[Если у вас свой сервер (или хостинг-сервер), на котором расположено множество различных проектов, то, возможно, вы сталкивались со следующей проблемой: из-за уязвимости в скрипте на один из проектов попал вредоносный код, занимающийся рассылкой спама. Найти виновника порой бывает весьма проблематично. Так что оптимальным выходом будет просто логировать действия функции mail() Все крайне просто Создайте файл [...]]]></description>
			<content:encoded><![CDATA[<p>Если у вас свой сервер (или хостинг-сервер), на котором расположено множество различных проектов, то, возможно, вы сталкивались со следующей проблемой: из-за уязвимости в скрипте на один из проектов попал вредоносный код, занимающийся рассылкой спама. Найти виновника порой бывает весьма проблематично. Так что оптимальным выходом будет просто логировать действия функции mail()<br />
<span id="more-77"></span><br />
Все крайне просто<br />
Создайте файл <code>/usr/local/bin/phpsendmail</code> и поместите в него следующий код:</p>
<blockquote>
<pre>
#!/usr/bin/php
&lt;?php
/**
  This script is a sendmail wrapper for php to log calls of the php mail() function.
  Author: Till Brehm, www.ispconfig.org
*/

$sendmail_bin = '/usr/sbin/sendmail';
$logfile = '/var/log/mail.form';

//* Get the email content
$logline = '';
while ($line = fgets(STDIN)) {
	if(stristr($line,'to:') || stristr($line,'from:')) $logline .= trim($line).' ';
	$mail .= $line;
}

//* compose the sendmail command
$command = 'echo "'.$mail.'" | '.$sendmail_bin.' ';
for ($i = 1; $i &lt; $_SERVER['argc']; $i++) {
	$command .= $_SERVER['argv'][$i].' ';
}

//* rotate log if it gets too big
if(is_file($logfile) &amp;&amp; filesize($logfile) &gt; 10000000) {
	if(is_file($logfile.'.old')) unlink($logfile.'.old');
	exec('cp -pf '.$logfile.' '.$logfile.'.old');
	exec('cat /dev/null &gt; '.$logfile);
}

//* Write the log
system('echo "'.date("Y-m-d H:i:s").' '.$_ENV['PWD'].' '.$logline.'" &gt;&gt; '.$logfile);

//* Execute the command
return shell_exec($command);
?&gt;</pre>
</blockquote>
<p>Это логгер всех сообщений с ротированием лог-файла.<br />
Не забудьте указать верный путь к <code>sendmail</code> в переменной <code>$sendmail_bin</code></p>
<p>Затем сделайте скрипт исполняемым</p>
<blockquote><p> chmod +x /usr/local/bin/phpsendmail</p></blockquote>
<p>Создайте лог-файл, смените владельца на пользователя, от которого запускается веб-сервер и дайте ему права на запись</p>
<blockquote><p> touch /var/log/mail.form<br />
chown www-data:www-data /var/log/mail.form<br />
chmod 0700 /var/log/mail.form</p></blockquote>
<p>Приведите ваш конфигурационный файл php.ini к следующему виду (измените параметр sendmail_path)</p>
<blockquote>
<pre>
[mail function]
; For Win32 only.
;SMTP = localhost
;smtp_port = 25

; For Win32 only.
;sendmail_from = me@example.com

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = /usr/local/bin/phpsendmail</pre>
</blockquote>
<p>И перезапустите веб-сервер</p>
<blockquote><p>/etc/init.d/apache2 restart</p></blockquote>
<p>Проверить логгер можно с помощью нехитрого скрипта:</p>
<blockquote>
<pre>
&lt;?php
mail('yourname@yourdomain.com','This is a test message subject','This is a test message body');
echo 'Mail sent.';
?&gt;</pre>
</blockquote>
<p>Запустите этот сценарий через web и проверьте лог:</p>
<blockquote><p>cat /var/log/mail.form</p></blockquote>
<p><noindex><strong>Оригинал:</strong> <a href="http://howtoforge.org/how-to-log-emails-sent-with-phps-mail-function-to-detect-form-spam">http://howtoforge.org/how-to-log-emails-sent-with-phps-mail-function-to-detect-form-spam</a></noindex></p>
]]></content:encoded>
			<wfw:commentRss>http://boombick.org/blog/posts/77/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Собственный видеохостинг</title>
		<link>http://boombick.org/blog/posts/72</link>
		<comments>http://boombick.org/blog/posts/72#comments</comments>
		<pubDate>Thu, 21 May 2009 15:40:56 +0000</pubDate>
		<dc:creator>boombick</dc:creator>
				<category><![CDATA[*NIX]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[highload]]></category>
		<category><![CDATA[web-servers]]></category>

		<guid isPermaLink="false">http://boombick.org/blog/posts/72</guid>
		<description><![CDATA[Статья описывает процесс построения собственного видеохостинга (как, например, YouTube) на базе lighttpd с модулем mod_flv_streaming для трансляции потокового видео в формате .flv и модулем mod_secdownload для предотвращения хотлинкинга. В качестве проигрывателя мы возьмем FlowPlayer, который поддерживает mod_flv_streaming. Также мы опишем процесс перекодировки видео различных форматов (.mp4 .mov .mpg .3gp .mpeg .wmv .avi) в формат FLV, [...]]]></description>
			<content:encoded><![CDATA[<p>Статья описывает процесс построения собственного видеохостинга (как, например, YouTube) на базе lighttpd с модулем <em>mod_flv_streaming</em> для трансляции потокового видео в формате .flv и модулем<br />
<em>mod_secdownload</em> для предотвращения хотлинкинга. В качестве проигрывателя мы возьмем <noindex><a href="http://flowplayer.org/">FlowPlayer</a></noindex>, который поддерживает <em>mod_flv_streaming</em>. Также мы опишем процесс перекодировки видео различных форматов (.mp4 .mov .mpg .3gp .mpeg .wmv .avi) в формат FLV, который будет использоваться на нашем сайте<br />
<span id="more-72"></span><br />
<strong>Необходимые замечания</strong><br />
Перед описанием непосредственно процесса давайте определим используемые в статье некоторые параметры, которые могут отличаться от ваших (и наверняка отличаются :))<br />
Все происходит на сервере с адресом <code>server1.example.com</code> и IP-адресом <code>192.168.0.100</code>. Предполагается, что на сервере уже установлен lighttpd и php с поддержкой MySQL<br />
В Лайти также включена поддержка PHP. В качестве операционной системы мы используем Debian Etch<br />
Итак, приступим</p>
<p><strong>Устанавливаем LAME</strong><br />
<noindex><a href="http://lame.sourceforge.net/">LAME</a></noindex> &#8211; это mp3-декодер. Он необходим нам для того, чтобы в наших сконвертированных видеофайлах сохранялась аудиодорожка. В репозитриях Etch LAME отсутствует, поэтому мы будем собирать его вручную.<br />
Установим необходимые пакеты:</p>
<blockquote><p> apt-get install build-essential</p></blockquote>
<p>Затем скачаем и скомпилируем LAME</p>
<blockquote>
<pre>
cd /tmp
wget http://mesh.dl.sourceforge.net/sourceforge/lame/lame-3.97.tar.gz
tar xvfz lame-3.97.tar.gz
cd lame-3.97
./configure --enable-shared --prefix=/usr
make
make install</pre>
</blockquote>
<p><strong>Устанавливаем ffmpeg</strong><br />
Для перекодирования видео мы будем использовать <code>ffmpeg</code>. Установим его и плагины к нему</p>
<blockquote><p> apt-get install ffmpeg libavcodec0d libavformat0d libavifile-0.7c2 libpostproc0d libasound2-plugins avifile-player avifile-utils avifile-mad-plugin avifile-mjpeg-plugin avifile-vorbis-plugin</p></blockquote>
<p>Проблема LAME в Debian заключается в том, что он не поддерживает кодирование mp3 из-за патентных ограничений, а значит наше видео превратится в &#8220;немое кино&#8221;. Чтож, немного поправим пакет</p>
<blockquote><p> cd /usr/src/<br />
apt-get source ffmpeg<br />
cd ffmpeg-0.cvs20060823</p></blockquote>
<p>Отредактируем файл <code>debain/rules</code>. В начале файла есть две строки <code>confflags</code> с опциями сборки. Добавим в одну из них <code>--enable-mp3lame</code> и сохраним файл</p>
<blockquote>
<pre>
[...]
confflags += --enable-gpl --enable-pp --enable-pthreads --enable-mp3lame
confflags += --enable-vorbis --enable-libogg --enable-a52 --enable-dts --enable-libgsm
[...]</pre>
</blockquote>
<p>Соберем пакет</p>
<blockquote><p> dpkg-buildpackage</p></blockquote>
<p><code>dpkg-buildpackage</code>, скорее всего, будет &#8220;ругаться&#8221; на отсутствующие пакеты, которые нужны ему для сборки <code>ffmpeg</code></p>
<blockquote>
<pre>
server1:/usr/src/ffmpeg-0.cvs20060823# dpkg-buildpackage
dpkg-buildpackage: source package is ffmpeg
dpkg-buildpackage: source version is 0.cvs20060823-8
dpkg-buildpackage: source changed by Sam Hocevar (Debian packages) <sam+deb@zoy.org>
dpkg-buildpackage: host architecture i386
dpkg-buildpackage: source version without epoch 0.cvs20060823-8
dpkg-checkbuilddeps: Unmet build dependencies: debhelper (&gt;= 4.0) quilt libogg-dev libvorbis-dev liba52-dev libdts-dev zlib1g-dev libsdl1.2-dev libfreetype6-dev libimlib2-dev texi2html libraw1394-dev libdc1394-13-dev libtheora-dev (&gt;&gt; 0.0.0.alpha4) libgsm1-dev
dpkg-buildpackage: Build dependencies/conflicts unsatisfied; aborting.
dpkg-buildpackage: (Use -d flag to override.)
server1:/usr/src/ffmpeg-0.cvs20060823#
</sam+deb@zoy.org></pre>
</blockquote>
<p>Если вы видите что-то подобное, то просто доставьте недостающие пакеты</p>
<blockquote><p> apt-get install debhelper quilt libogg-dev libvorbis-dev liba52-dev libdts-dev zlib1g-dev libsdl1.2-dev libfreetype6-dev libimlib2-dev texi2html libraw1394-dev libdc1394-13-dev libtheora-dev libgsm1-dev</p></blockquote>
<p>и запустите <code>dpkg-buildpackage</code> снова</p>
<blockquote><p> dpkg-buildpackage</p></blockquote>
<p>Процесс создания нового пакета займет некоторое время, а результатом его будут *.deb-файлы в директории <code>/usr/src</code>. Установим их командой</p>
<blockquote><p> cd ..<br />
dpkg -i *.deb</p></blockquote>
<p><strong>Устанавливаем flvtool2</strong><br />
При перекодировке видео неплохо было добавить некоторые метаданные в конечные файлы, например информацию о длительности, чтобы наш плеер смог корректно показывать счетчик времени. Для этого воспользуемся утилитой <noindex><a href="http://rubyforge.org/projects/flvtool2/">flvtool2</a></noindex>. Она написана на Ruby, поэтому сначала установим его</p>
<blockquote><p> apt-get install ruby</p></blockquote>
<p>Затем скачаем и установим flvtool2</p>
<blockquote><p> cd /tmp<br />
wget http://rubyforge.org/frs/download.php/17497/flvtool2-1.0.6.tgz<br />
tar xvfz flvtool2-1.0.6.tgz<br />
cd flvtool2-1.0.6<br />
ruby setup.rb config<br />
ruby setup.rb setup<br />
ruby setup.rb install</p></blockquote>
<p><strong>Подгототавливаем директории для видео</strong><br />
Корневой директорией для Лайти в нашем случае является <code>/var/www</code> (по умолчанию в Debian так и есть). Конечно же мы не хотим хранить оригинальные и сконвертированные видеофайлы в этой директории, иначе их смогут скачать все, кто захочет (зная прямую ссылку). Поэтому директорию с оригинальными видео (<code>/var/videos/incoming</code>) и сконвертированными (<code>/var/videos/flv</code>) мы расположим <strong>вне</strong> DocumentRoot</p>
<blockquote><p> mkdir -p /var/videos/incoming<br />
mkdir -p /var/videos/flv</p></blockquote>
<p>Вы (или ваши пользователи) смогут загружать файлы в <code>/var/videos/incoming</code> через FTP или WEB-интерфейс, а вы будете их перекодировать (вручную или автоматически) в FLV-формат и хранить в <code>/var/videos/flv</code></p>
<p><strong>Перекодирование видео</strong><br />
Предположим, что у нас есть файл <code>video.avi</code> в директории <code>/var/videos/incoming</code> (или .mp4 .mov .mpg .3gp .mpeg .wmv). Мы хотим сконвертировать его в <code>fideo.flv</code> и сохранить в <code>/var/videos/flv</code>. Разрешение конечного файла должно быть 320&#215;240, звук 44100 Hz и частота кадров 12 fps</p>
<blockquote><p> ffmpeg -i /var/videos/incoming/video.avi -s 320&#215;240 -ar 44100 -r 12 /var/videos/flv/video.flv</p></blockquote>
<p>(для дополнительной информации рекомендую обратиться к <code>man ffmpeg</code>). Это займет некоторое время, а вывод будет похож на</p>
<blockquote>
<pre>
server1:~# ffmpeg -i /var/videos/incoming/video.avi -s 320x240 -ar 44100 -r 12 /var/videos/flv/video.flv
FFmpeg version SVN-rUNKNOWN, Copyright (c) 2000-2004 Fabrice Bellard
  configuration:  --enable-gpl --enable-pp --enable-pthreads --enable-mp3lame --enable-vorbis --enable-libogg
 --enable-a52 --enable-dts --enable-libgsm --enable-dc1394 --disable-debug --enable-shared --prefix=/usr
  libavutil version: 0d.49.0.0
  libavcodec version: 0d.51.11.0
  libavformat version: 0d.50.5.0
  built on Aug 14 2007 15:02:25, gcc: 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
Input #0, avi, from '/var/videos/incoming/video.avi':
  Duration: 00:10:53.8, start: 0.000000, bitrate: 5455 kb/s
  Stream #0.0: Video: mpeg4, yuv420p, 1024x576, 24.00 fps(r)
  Stream #0.1: Audio: ac3, 48000 Hz, 5:1, 448 kb/s
Output #0, flv, to '/var/videos/flv/video.flv':
  Stream #0.0: Video: flv, yuv420p, 320x240, q=2-31, 200 kb/s, 12.00 fps(c)
  Stream #0.1: Audio: mp3, 44100 Hz, stereo, 64 kb/s
Stream mapping:
  Stream #0.0 -&gt; #0.0
  Stream #0.1 -&gt; #0.1
No accelerated IMDCT transform found
Press [q] to stop encoding
frame= 7847 q=2.0 Lsize=   21682kB time=653.8 bitrate= 271.7kbits/s
video:16061kB audio:5108kB global headers:0kB muxing overhead 2.427536%
server1:~#</pre>
</blockquote>
<p>Обратите особое внимание на секцию <code>Output</code> &#8211; там должно быть два потока: видео и аудио. Если вы видите там только видеопоток, то значит какие-то проблемы с аудиокодированием, внимательно проверьте наши инструкции по подключению LAME<br />
После кодирования добавим метаданные</p>
<blockquote><p> cat /var/videos/flv/video.flv | flvtool2 -U stdin /var/videos/flv/video.flv</p></blockquote>
<p><strong>Настройка Lighttpd</strong><br />
Теперь приступим к настройке Лайти. Откроем главный конфигурационный файл <code>/etc/lighttpd/lighttpd.conf</code>  активируем в нем модули <code>mod_secdownload</code> и <code>mod_flv_streaming</code>. Обратите внимание: крайне важно, чтобы модуль <code>mod_secdownload</code> шел <em>перед</em> модулем <code>mod_flv_streaming</code> в секции <code>server.modules</code>. В обратном случае будут проблемы с отображением видео FlowPlayer&#8217;ом</p>
<blockquote>
<pre>
[...]
server.modules              = (
            "mod_access",
            "mod_alias",
            "mod_accesslog",
            "mod_fastcgi",
#           "mod_rewrite",
#           "mod_redirect",
#           "mod_status",
#           "mod_evhost",
#           "mod_compress",
#           "mod_usertrack",
#           "mod_rrdtool",
#           "mod_webdav",
#           "mod_expire",
            "mod_secdownload",
            "mod_flv_streaming",
#           "mod_evasive"
 )
[...]</pre>
</blockquote>
<p>Также добавьте в конец конфига следующие строки</p>
<blockquote>
<pre>
[...]
flv-streaming.extensions = ( ".flv" )
secdownload.secret          = "somesecret"
secdownload.document-root   = "/var/videos/flv/"
secdownload.uri-prefix      = "/dl/"
secdownload.timeout         = 120</pre>
</blockquote>
<p>Не забудьте заменить <code>somesecret</code> на реальную парольную фразу<br />
Как работает <code>mod_secdownload</code>:<br />
На web-странице расположена ссылка примерно следующего вида:<br />
<em>&lt;uri-prefix&gt;/&lt;token&gt;/&lt;timestamp-in-hex&gt;/&lt;rel-path&gt; </em> (например: <em>/dl/d8a8cb150f7e5962f6a8443b0b6c6cc2/46c1d9f6/video.flv</em>)<br />
Где &lt;token&gt; &#8211; это md5-хэш от</p>
<ul>
<li>Секретной строки</li>
<li>&lt;rel-path&gt; (начинающегося с /)</li>
<li></li>
<li>&lt;timestamp-in-hex&gt;</li>
<p><code>mod_secdownload</code> перенаправит эту ссылку на файл, расположенный в  <code>secdownload.document-root</code> (который вне основного корня веб-сервера) и обеспечит доступ к нему в течении <code>secdownload.timeout</code> секунд. По истечении времени ссылка перестанет быть валидной и доступ будет закрыт.<br />
После установки FlowPalyer мы будем генерировать валидные сслыки для <code>mod_secdownload</code> при помощи PHP-скрипта. Дополнительную информацию по <code>mod_secdownload</code> можно получить <noindex><a href="http://trac.lighttpd.net/trac/wiki/Docs%3AModSecDownload">здесь</a></noindex><br />
Не забудьте перезапустить Лайти</p>
<blockquote><p> /etc/init.d/lighttpd restart</p></blockquote>
<p><strong>Установка FlowPlayer</strong><br />
Скачайте последнюю версию плеера с <noindex><a href="http://flowplayer.org/download">http://flowplayer.org/download</a></noindex> и приготовьте его к работе</p>
<blockquote><p> cd /tmp<br />
wget http://belnet.dl.sourceforge.net/sourceforge/flowplayer/flowplayer-1.19.zip<br />
unzip flowplayer-1.19.zip<br />
mv flowplayer /var/www/</p></blockquote>
<p><strong>Настройка FlowPlayer</strong><br />
Плеер установлен, теперь давайте создадим файл, с помощью которого можно будет посмотреть наше видео. В нашем примере это <code>/var/www/flowplayertest.php</code>, в котором расположены все параметры для запуска плеера и генерируются валидные ссылки для <code>mod_secdownload</code></p>
<blockquote>
<pre>
&lt;?php
$secret = "somesecret";
$uri_prefix = "/dl/";

# filename
$f = "/video.flv";

# current timestamp
$t = time();

$t_hex = sprintf("%08x", $t);
$m = md5($secret.$f.$t_hex);

?&gt;

&lt;object type="application/x-shockwave-flash" data="/flowplayer/FlowPlayerThermo.swf"&gt;
    width="320" height="256" id="FlowPlayer"&gt;
&lt;param name="allowScriptAccess" value="sameDomain"&gt;&lt;/param&gt;
&lt;param name="movie" value="/flowplayer/FlowPlayerThermo.swf"&gt;&lt;/param&gt;
&lt;param name="quality" value="high"&gt;&lt;/param&gt;
&lt;param name="scale" value="noScale"&gt;&lt;/param&gt;
&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;
&lt;param name="flashvars" value="config={videoFile: '&lt;?php printf('%s%s/%s%s', $uri_prefix, $m, $t_hex, $f, $f); ?&gt;', streamingServer: 'lighttpd', loop: 'false', useNativeFullScreen: true}"&gt;&lt;/param&gt;
&lt;/object&gt;</pre>
</blockquote>
<p>Не забудьте позаботиться о том, чтобы переменная <code>$secret</code> совпадала со значением, указанным в конфиге Лайти. Также должны совпадать <code>$uri_prefix</code> и <code>secdownload.uri-prefix</code>. Если все верно, то ссылки точно будут рабочими. В переменной <code>$f</code> содержится имя видеофайла, начинающееся со слеша (&#8220;/&#8221;). В нашем примере имя &#8220;жестко&#8221; зашито в код, но вы можете получать его из БД, например.<br />
В тэгах <code>&lt;object&gt;&lt;/object&gt;</code> содержатся конфигурационные параметры для FlowPlayer. Плеер может использовать разные скины (в нашем примере это <code>FlowPlayerThermo</code>), видео имеет размер 320&#215;240 и панель управления имеет высоту 16px. Пожтому мы указали ширину равной 320px и высоту (240+16) 256px. Если вы используете другой скин, поправьте эти параметры. За документацией по FlowPlayer обращайтесь на <noindex><a href="http://flowplayer.org/demos/index.html">официальный сайт</a></noindex><br />
В параметре <code>&lt;param name="flashvars"...</code> содержатся настройки окружения плеера. Важным параметром является <code>videoFile</code> &#8211; это ссылка на файл, которую генерирует наш скрипт. Другая важная опция &#8211; это <code>streamingServer: 'lighttpd'</code>, которая указывает, что для потоковой трансляции файла мы используем <code>mod_flv_streaming</code> Остальные опции (<code>loop, useNativeFullScreen</code>) являются необязательными. Например, если вы установите опцию <code>useNativeFullScreen</code> в <code>true</code> (это поддержка нативного полноэкранного режима для Flash Player 9), то вы должны включить в object строку &lt;param name=&#8221;allowFullScreen&#8221; value=&#8221;true&#8221; /&gt; и не можете использовать &lt;param name=&#8221;wmode&#8221; value=&#8221;transparent&#8221; /&gt;<br />
За дополнительными настройками FlowPlayer обратитесь к документации</p>
<p><strong>Проверим?</strong><br />
Зайдем браузером на <code>http://192.168.0.100/flowplayertest.php</code> &#8211; видео должно работать (со звуком)<br />
<a href="http://boombick.org/blog/wp-content/uploads/2009/05/2.png" title="2.png"><img src="http://boombick.org/blog/wp-content/uploads/2009/05/2.thumbnail.png" alt="2.png" /></a><br />
И даже в полноэкранном режиме<br />
<a href="http://boombick.org/blog/wp-content/uploads/2009/05/3.png" title="3.png"><img src="http://boombick.org/blog/wp-content/uploads/2009/05/3.thumbnail.png" alt="3.png" /></a><br />
Enjoy.</p>
<p><strong>Оригинал:</strong> <noindex><a href="http://howtoforge.org/video_streaming_lighttpd_flowplayer">http://howtoforge.org/video_streaming_lighttpd_flowplayer</a></noindex></ul>
]]></content:encoded>
			<wfw:commentRss>http://boombick.org/blog/posts/72/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Обзор PHP-акселераторов с инструкциями по установке</title>
		<link>http://boombick.org/blog/posts/10</link>
		<comments>http://boombick.org/blog/posts/10#comments</comments>
		<pubDate>Thu, 15 Nov 2007 07:50:16 +0000</pubDate>
		<dc:creator>boombick</dc:creator>
				<category><![CDATA[*NIX]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://boombick.org/blog/posts/10</guid>
		<description><![CDATA[В этой заметке рассмотрены 3 хороших opensource php-акселатора: eAccelerator, APC и xcache с инструкциями по их установке и настройке для Debian. (В статье также приводятся руководства по установке в ubuntu, но здесь они опущены, так как процесс фактически не отличается. И еще я внес собственные небольшие поправки &#8211; прим. переводчика) eAccelerator eAccelerator &#8211; это свободный [...]]]></description>
			<content:encoded><![CDATA[<p>В этой заметке рассмотрены 3 хороших opensource php-акселатора: eAccelerator, APC и xcache с инструкциями по их установке и настройке для Debian.<br />
<span id="more-10"></span><br />
(В статье также приводятся руководства по установке в ubuntu, но здесь они опущены, так как процесс фактически не отличается. И еще я внес собственные небольшие поправки &#8211; <em>прим. переводчика</em>)</p>
<p><strong>eAccelerator</strong><br />
eAccelerator &#8211; это свободный opensource-проект, выполняющий роли акселератора, оптимизатора и распаковщика. Также встроены функции динамического кэширования контента. eAccelerator повышает производительность работы PHP-скриптов за счет кэширования скомпилированного байт-кода, таким образом издержки на процесс компиляции ликвидируются. Также он оптимизирует скрипты для ускорения времени их исполнения. eAccelerator обычно снижает нагрузку на сервер и увеличивает скорость работы вашего кода в 1-10 раз.</p>
<p>Сайт проекта:<br />
<noindex><a HREF="http://www.eaccelerator.net/">http://www.eaccelerator.net</a></noindex><br />
<strong>Установка eAccelerator</strong><br />
Для сборки eAccelerator вам необходимо установить пакет php4-dev:</p>
<blockquote><p>#apt-get install php4-dev</p></blockquote>
<p>Или, если вы используете php5:</p>
<blockquote><p>#apt-get install php5-dev</p></blockquote>
<p>Загрузите архив с исходными кодами eAccelerator:</p>
<blockquote><p>#wget http://bart.eaccelerator.net/source/0.9.5/eaccelerator-0.9.5.tar.bz2</p></blockquote>
<p>Распакуйте архив:</p>
<blockquote><p>#tar jxvf eaccelerator-0.9.5.tar.bz2<br />
#cd eaccelerator-0.9.5</p></blockquote>
<p>Запустите phpize для создания config-файлов, необходимых для сборки:</p>
<blockquote><p>#phpize<br />
#./configure –enable-eaccelerator=shared –with-php-config=/usr/bin/php-config<br />
#make<br />
#make install</p></blockquote>
<p>Акселератор установлен.</p>
<p>Теперь необходимо отредактировать файл /etc/php4/apache2/php.ini для пользователей php4 и добавить в него следующие параметры для подключения расширения:</p>
<blockquote><p>#vi /etc/php4/apache2/php.ini</p>
<p>extension=”eaccelerator.so”<br />
eaccelerator.shm_size=”16″<br />
eaccelerator.cache_dir=”/tmp/eaccelerator”<br />
eaccelerator.enable=”1″<br />
eaccelerator.optimizer=”1″<br />
eaccelerator.check_mtime=”1″<br />
eaccelerator.debug=”0″<br />
eaccelerator.filter=”&#8221;<br />
eaccelerator.shm_max=”0″<br />
eaccelerator.shm_ttl=”0″<br />
eaccelerator.shm_prune_period=”0″<br />
eaccelerator.shm_only=”0″<br />
eaccelerator.compress=”1″<br />
eaccelerator.compress_level=”9″</p></blockquote>
<p>Если вы хотите установить его как расширение Zend, то необходимо отредактировать /etc/php4/apache2/php.ini следующим образом:</p>
<blockquote><p> zend_extension=”/usr/lib/php4/eaccelerator.so”<br />
eaccelerator.shm_size=”16″<br />
eaccelerator.cache_dir=”/tmp/eaccelerator”<br />
eaccelerator.enable=”1″<br />
eaccelerator.optimizer=”1″<br />
eaccelerator.check_mtime=”1″<br />
eaccelerator.debug=”0″<br />
eaccelerator.filter=”&#8221;<br />
eaccelerator.shm_max=”0″<br />
eaccelerator.shm_ttl=”0″<br />
eaccelerator.shm_prune_period=”0″<br />
eaccelerator.shm_only=”0″<br />
eaccelerator.compress=”1″<br />
eaccelerator.compress_level=”9″</p></blockquote>
<p>Если вы используете thread-safe сборку PHP, то необходимо использовать “zend_extension_ts” вместо “zend_extension”.</p>
<p>Если вы используете php5, то редактируйте файл /etc/php5/apache2/php.ini</p>
<p><strong>Создание cache-директории</strong><br />
Последний важный шаг в настройке акселератора &#8211; это создание директории для кэша, имя которой мы задавали в конфиге. Значение по умолчанию &#8211; /tmp/eaccelerator, потому что права на запись в папку /tmp обычно есть у всех пользователей</p>
<p>Не очень хорошим решением будет оставлять права на запись для всех пользователей. Более безопасным будет сменить владельца директории eaccelerator на пользователя, от имени которого запущен PHP (в большинстве случаев это web-сервер. Например apache или lighttpd) и установить на нее права 0644</p>
<blockquote><p>#mkdir /tmp/eaccelerator<br />
chown nobody:nobody /tmp/eaccelerator <em>(укажите пользователя PHP)</em><br />
#chmod 0644 /tmp/eaccelerator</p></blockquote>
<p>Перезапустите web-сервер. На этом настройка eAccelerator закончена</p>
<blockquote><p>#/etc/init.d/apache2 restart</p></blockquote>
<p>Проверьте, все ли корректно поставилось. Создайте файл test.php со следующим содержанием:</p>
<blockquote><p>?&gt;?&gt;?&gt; eaccelerator();<br />
?&gt;</p></blockquote>
<p>Если вы видите информацию о eAccelerator, то все установлено корректно.<br />
Также вы можете использовать следующую команду:</p>
<blockquote><p> #php -v</p></blockquote>
<p>eAccelerator сохраняет скомпилированый PHP-код сначала в общей памяти, затем на диске, все время поддерживая размер занятой памяти оптимальным для производительной работы приложений.</p>
<p><strong>Alternative PHP Cache (APC)</strong><br />
APC &#8211; это открытый и свободный оптимизатор кэша для php. Он был разработан для обеспечения свободной, открытой и надежной базы кэширования и оптимизации промежуточного кода PHP.</p>
<p><strong>Сайт проекта</strong><br />
<noindex><a HREF="http://pecl.php.net/package/APC">http://pecl.php.net/package/APC</a></noindex><br />
<strong>Установка APC</strong><br />
Установите необходимые пакеты:</p>
<blockquote><p># apt-get install apache2-threaded-dev php5-dev php5-pear make gcc g++</p></blockquote>
<p>Затем установите APC при помощи pecl:</p>
<blockquote><p># pecl install apc</p></blockquote>
<p>Отредактируйте конфигурационный файл:</p>
<blockquote><p>#vi /etc/php5/apache2/php.ini</p></blockquote>
<p>Добавив в него следующую строку:</p>
<blockquote><p>extension=apc.so</p></blockquote>
<p>Перезапустите сервер:</p>
<blockquote><p>#/etc/init.d/apache2 restart</p></blockquote>
<p><strong>XCache</strong><br />
XCache этобыстрый и стабильный акселератор PHP-кода, который тестируется и используется на системах с высокой нагрузкой. Он протестирован (на Linux-системах) на всех последних срезах cvs php: PHP_4_3, PHP_4_4, PHP_5_0, PHP_5_1, PHP_5_2 и HEAD(6.x). ThreadSafe/Windows также поддерживаются. XCache решает большинство проблем, которые пристутствуют у других акселераторов. Например, возможность использования с более новыми версиями PHP.<br />
<strong>Домашняя страница</strong><br />
<noindex><a HREF="http://trac.lighttpd.net/xcache/">http://trac.lighttpd.net/xcache/</a></noindex></p>
<p><strong>Установка XCache</strong></p>
<blockquote><p>#apt-get install php5-xcache</p></blockquote>
<p>Теперь отредактируйте файл /etc/php5/apache2/php.ini и добавьте в него следующие значения:</p>
<blockquote><p> zend_extension = /usr/lib/php5/20050606/xcache.so<br />
xcache.size = 64M<br />
xcache.cacher = On</p></blockquote>
<p>Перезапустите сервер</p>
<blockquote><p>#/etc/init.d/apache2 restart</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://boombick.org/blog/posts/10/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	<img style='margin:0;padding:0;border:0;' width='1px' height='1px' src="http://boombick.org/blog/wp-content/plugins/mystat/mystat.php?act=time_load&id=0&rnd=501436383" /></channel>
</rss>

