<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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" version="2.0">

<channel>
	<title>Voronov-IT: Blog</title>
	
	<link>http://voronov-it.com/blog</link>
	<description />
	<pubDate>Mon, 24 Nov 2008 09:51:02 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/voronov-it" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="voronov-it" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Пишем скрипт автозаполнения поисковых форм</title>
		<link>http://voronov-it.com/blog/pishem-skript-avtozapolneniya-poiskovyx-form/</link>
		<comments>http://voronov-it.com/blog/pishem-skript-avtozapolneniya-poiskovyx-form/#comments</comments>
		<pubDate>Tue, 12 Aug 2008 05:51:21 +0000</pubDate>
		<dc:creator>Rii</dc:creator>
		
		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[AJAX]]></category>

		<category><![CDATA[автозаполнение]]></category>

		<category><![CDATA[формы]]></category>

		<guid isPermaLink="false">http://voronov-it.com/blog/?p=29</guid>
		<description><![CDATA[Сегодня попробуем сами написать скрипт для автозаполнения поисковых форм, например как в Google или Википедии. По моему довольно удобная функция. И, как оказалось, довольно проста в реализации. Ну что же, приступим!



Система простая: при вводе в поле символа – отправляем с помощью ajax`а запрос. В серверной части обрабатываем его и выдаём. В нашем примере сделаем простой [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня попробуем сами написать скрипт для автозаполнения поисковых форм, например как в Google или Википедии. По моему довольно удобная функция. И, как оказалось, довольно проста в реализации. Ну что же, приступим!</p>
<div align="center">
<a href="http://voronov-it.com/blog/wp-content/uploads/2008/08/autosrch011.jpg"><img src="http://voronov-it.com/blog/wp-content/uploads/2008/08/autosrch011.jpg" alt="" title="Автозаполнение поисковой формы Google" width="400" height="120" class="alignnone size-full wp-image-30" /></a>
</div>
<p><span id="more-29"></span>Система простая: при вводе в поле символа – отправляем с помощью ajax`а запрос. В серверной части обрабатываем его и выдаём. В нашем примере сделаем простой поиск по именам. Для начала создадим саму поисковую форму:</p>
<p><div class="codecolorer-container html"><div class="codecolorer" style="font-family: monospace;"><span class="sc2"><a href="http://december.com/html/4/element/br.html"><span class="kw2">&lt;br</span></a> /<span class="kw2">&gt;</span></span><br />
<span class="sc2"><a href="http://december.com/html/4/element/html.html"><span class="kw2">&lt;html&gt;</span></a></span><span class="sc2"><a href="http://december.com/html/4/element/br.html"><span class="kw2">&lt;br</span></a> /<span class="kw2">&gt;</span></span><br />
<span class="sc2"><a href="http://december.com/html/4/element/head.html"><span class="kw2">&lt;head&gt;</span></a></span><span class="sc2"><span class="kw2">&lt;/p&gt;</span></span><br />
<span class="sc2"><a href="http://december.com/html/4/element/p.html"><span class="kw2">&lt;p&gt;</span></a></span><span class="sc2"><a href="http://december.com/html/4/element/meta.html"><span class="kw2">&lt;meta</span></a> <span class="kw3">http-equiv</span>=<span class="st0">&quot;Content-Type&quot;</span> <span class="kw3">content</span>=<span class="st0">&quot;text/html; charset=utf-8&quot;</span> /<span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/p&gt;</span></span><br />
<span class="sc2"><a href="http://december.com/html/4/element/style.html"><span class="kw2">&lt;style</span></a> <span class="kw3">type</span>=<span class="st0">&quot;text/css&quot;</span><span class="kw2">&gt;</span></span><br />
.searchbar {<br />
&nbsp; position: absolute;<br />
&nbsp; width: 230px;<br />
&nbsp; display: none;<br />
&nbsp; border: 1px solid #333;<br />
}<br />
.asearch {<br />
&nbsp; background-color: #FFFFDE;<br />
&nbsp; cursor: pointer;<br />
&nbsp; padding: 1px 0px 1px 5px;<br />
}<br />
<span class="sc2"><span class="kw2">&lt;/style&gt;</span></span><br />
<span class="sc2"><a href="http://december.com/html/4/element/p.html"><span class="kw2">&lt;p&gt;</span></a></span><span class="sc2"><a href="http://december.com/html/4/element/script.html"><span class="kw2">&lt;script</span></a> <span class="kw3">language</span>=<span class="st0">&quot;JavaScript&quot;</span> <span class="kw3">src</span>=<span class="st0">&quot;autosearch.js&quot;</span> <span class="kw3">type</span>=<span class="st0">&quot;text/javascript&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/script&gt;</span></span><span class="sc2"><span class="kw2">&lt;/p&gt;</span></span><br />
<span class="sc2"><a href="http://december.com/html/4/element/p.html"><span class="kw2">&lt;p&gt;</span></a></span><span class="sc2"><span class="kw2">&lt;/head&gt;</span></span><span class="sc2"><a href="http://december.com/html/4/element/br.html"><span class="kw2">&lt;br</span></a> /<span class="kw2">&gt;</span></span><br />
<span class="sc2"><a href="http://december.com/html/4/element/body.html"><span class="kw2">&lt;body&gt;</span></a></span><span class="sc2"><span class="kw2">&lt;/p&gt;</span></span><br />
<span class="sc2"><a href="http://december.com/html/4/element/form.html"><span class="kw2">&lt;form</span></a> <span class="kw3">action</span>=<span class="st0">&quot;&quot;</span> <span class="kw3">method</span>=<span class="st0">&quot;post&quot;</span><span class="kw2">&gt;</span></span><br />
<span class="sc2"><a href="http://december.com/html/4/element/input.html"><span class="kw2">&lt;input</span></a> <span class="kw3">type</span>=<span class="st0">&quot;text&quot;</span> <span class="kw3">name</span>=<span class="st0">&quot;search&quot;</span> <span class="kw3">id</span>=<span class="st0">&quot;search&quot;</span> <span class="kw3">size</span>=<span class="st0">&quot;35&quot;</span> <span class="kw3">onKeyUp</span>=<span class="st0">&quot;ajaxSend(event,this.value)&quot;</span><span class="kw2">&gt;</span></span><span class="sc1">&amp;nbsp;</span><span class="sc2"><span class="kw2">&lt;/p&gt;</span></span><br />
<span class="sc2"><a href="http://december.com/html/4/element/input.html"><span class="kw2">&lt;input</span></a> <span class="kw3">type</span>=<span class="st0">&quot;submit&quot;</span> <span class="kw3">value</span>=<span class="st0">&quot;Искать&quot;</span><span class="kw2">&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;/form&gt;</span></span><br />
<span class="sc2"><a href="http://december.com/html/4/element/div.html"><span class="kw2">&lt;div</span></a> <span class="kw3">class</span>=<span class="st0">&quot;searchbar&quot;</span> <span class="kw3">id</span>=<span class="st0">&quot;sbar&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
<span class="sc2"><a href="http://december.com/html/4/element/p.html"><span class="kw2">&lt;p&gt;</span></a></span><span class="sc2"><span class="kw2">&lt;/body&gt;</span></span><span class="sc2"><span class="kw2">&lt;/html&gt;</span></span><span class="sc2"><a href="http://december.com/html/4/element/br.html"><span class="kw2">&lt;br</span></a> /<span class="kw2">&gt;</span></span></div></div>
</p>
<div align="center"><a href="http://voronov-it.com/blog/wp-content/uploads/2008/08/autosrch02_ex1.jpg"><img src="http://voronov-it.com/blog/wp-content/uploads/2008/08/autosrch02_ex1.jpg" alt="Пишем скрипт автозаполнения поисковых форм" width="309" height="141" class="alignright size-full wp-image-35" /></a></div>
<p>Теперь по порядку. Мы имеем простую формочку, состоящую из текстового поля и кнопки. Сразу под ним – блок, где мы будем выводить результаты. Ширину, рамку и остальное меняем в классе <em>searchbar</em>. Класс <em>asearch</em> – это уже само оформления вариантов подсказки (подробнее будет дальше).</p>
<p>Так, с формочкой вроде разобрались. Теперь разберём что у нас будет в <em>autosearch.js</em>.</p>
<p><div class="codecolorer-container javascript"><div class="codecolorer" style="font-family: monospace;">&lt;br /&gt;<br />
<span class="kw2">function</span> sendRequest<span class="br0">&#40;</span>file,_resultId,getRequestProc<span class="br0">&#41;</span> <span class="br0">&#123;</span>&lt;br /&gt;<br />
&nbsp; resultId = _resultId;&lt;br /&gt;<br />
&nbsp; document.<span class="me1">getElementById</span><span class="br0">&#40;</span>resultId<span class="br0">&#41;</span>.<span class="me1">innerHTML</span> = <span class="st0">''</span>;&lt;br /&gt;<br />
&nbsp; httpRequest.<span class="kw3">open</span><span class="br0">&#40;</span><span class="st0">'get'</span>, file<span class="br0">&#41;</span>;&lt;br /&gt;<br />
&nbsp; httpRequest.<span class="me1">onreadystatechange</span> = getRequestProc;&lt;br /&gt;<br />
&nbsp; httpRequest.<span class="me1">send</span><span class="br0">&#40;</span><span class="kw2">null</span><span class="br0">&#41;</span>;&lt;br /&gt;<br />
<span class="br0">&#125;</span>&lt;/p&gt;<br />
&lt;p&gt;function getRequest<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>&lt;br /&gt;<br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>httpRequest.<span class="me1">readyState</span>==<span class="nu0">4</span> &amp;#<span class="nu0">038</span>;&amp; httpRequest.<span class="me1">responseText</span>!=<span class="st0">''</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>&lt;br /&gt;<br />
&nbsp; &nbsp; document.<span class="me1">getElementById</span><span class="br0">&#40;</span>resultId<span class="br0">&#41;</span>.<span class="me1">innerHTML</span> = httpRequest.<span class="me1">responseText</span>;&lt;br /&gt;<br />
&nbsp; &nbsp; document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">'sbar'</span><span class="br0">&#41;</span>.<span class="me1">style</span>.<span class="me1">display</span> = <span class="st0">'block'</span>;&lt;br /&gt;<br />
&nbsp; <span class="br0">&#125;</span>&lt;br /&gt;<br />
<span class="br0">&#125;</span>&lt;/p&gt;<br />
&lt;p&gt;function m_over<span class="br0">&#40;</span>obj<span class="br0">&#41;</span> <span class="br0">&#123;</span>&lt;br /&gt;<br />
&nbsp; obj.<span class="me1">style</span>.<span class="me1">backgroundColor</span>=<span class="st0">'#3A4057'</span>;&lt;br /&gt;<br />
&nbsp; obj.<span class="me1">style</span>.<span class="me1">color</span>=<span class="st0">'#FFFFFF'</span>;&lt;br /&gt;<br />
<span class="br0">&#125;</span>&lt;br /&gt;<br />
<span class="kw2">function</span> m_out<span class="br0">&#40;</span>obj<span class="br0">&#41;</span> <span class="br0">&#123;</span>&lt;br /&gt;<br />
&nbsp; obj.<span class="me1">style</span>.<span class="me1">backgroundColor</span>=<span class="st0">'#FFFFDE'</span>;&lt;br /&gt;<br />
&nbsp; obj.<span class="me1">style</span>.<span class="me1">color</span>=<span class="st0">'#000000'</span>;&lt;br /&gt;<br />
<span class="br0">&#125;</span>&lt;br /&gt;<br />
<span class="kw2">function</span> m_change<span class="br0">&#40;</span>val<span class="br0">&#41;</span> <span class="br0">&#123;</span>&lt;br /&gt;<br />
&nbsp; document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">'search'</span><span class="br0">&#41;</span>.<span class="me1">value</span>=val;&lt;br /&gt;<br />
&nbsp; document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">'sbar'</span><span class="br0">&#41;</span>.<span class="me1">style</span>.<span class="me1">display</span>=<span class="st0">'none'</span>;&lt;br /&gt;<br />
<span class="br0">&#125;</span>&lt;/p&gt;<br />
&lt;p&gt;function ajaxSend<span class="br0">&#40;</span>event,text<span class="br0">&#41;</span> <span class="br0">&#123;</span>&lt;br /&gt;<br />
&nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>event.<span class="me1">charCode</span><span class="br0">&#41;</span> <span class="kw2">var</span> charCode=event.<span class="me1">chatCode</span>;&lt;br /&gt;<br />
&nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>event.<span class="me1">keyCode</span><span class="br0">&#41;</span> <span class="kw2">var</span> charCode=event.<span class="me1">keyCode</span>;&lt;br /&gt;<br />
&nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>event.<span class="me1">which</span><span class="br0">&#41;</span> <span class="kw2">var</span> charCode=event.<span class="me1">which</span>;&lt;br /&gt;<br />
&nbsp; <span class="kw1">else</span> <span class="kw2">var</span> charCode=<span class="nu0">0</span>;&lt;br /&gt;<br />
&nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>charCode&lt;<span class="nu0">31</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="kw2">false</span>;&lt;br /&gt;<br />
&nbsp; sendRequest<span class="br0">&#40;</span><span class="st0">'request.php?s='</span>+encodeURIComponent<span class="br0">&#40;</span>text<span class="br0">&#41;</span>,<span class="st0">'sbar'</span>,getRequest<span class="br0">&#41;</span>;&lt;br /&gt;<br />
<span class="br0">&#125;</span>&lt;/p&gt;<br />
&lt;p&gt;var resultId = <span class="st0">''</span>;&lt;br /&gt;<br />
<span class="kw1">if</span> <span class="br0">&#40;</span>navigator.<span class="me1">appName</span> == <span class="st0">&quot;Microsoft Internet Explorer&quot;</span><span class="br0">&#41;</span>&lt;br /&gt;<br />
&nbsp; <span class="kw2">var</span> httpRequest = <span class="kw2">new</span> ActiveXObject<span class="br0">&#40;</span><span class="st0">&quot;Microsoft.XMLHTTP&quot;</span><span class="br0">&#41;</span>;&lt;br /&gt;<br />
else&lt;br /&gt;<br />
&nbsp; <span class="kw2">var</span> httpRequest = <span class="kw2">new</span> XMLHttpRequest<span class="br0">&#40;</span><span class="br0">&#41;</span>;&lt;br /&gt;</div></div>
</p>
<p>Тут всё просто. Функция <em>sendRequest</em> – служит для отправки запроса, <em>getRequest</em> – получение данных. <em>m_over</em> меняет внешний вид варианта подсказки при наведении курсора, <em>m_out</em> – при уходе курсора с объекта. <em>m_change</em> – при клике на подсказку вставляет текст в поле и исчезает (тут к примеру можно поставить после клика начинать поиск).<br />
В функции <em>ajaxSend</em> я поставил ограничение на клавиши, чтобы избежать отправки запросов при нажатии на Shift, Ctrl и другие не символьные клавиши.</p>
<p>Запросы мы будем отправлять в файл <em>request.php</em>. Так как у IE ajax-запросы отправляются в <em>win-1251</em> кодировке (а не <em>utf-8</em>, как у всех остальных браузеров) мы кодируем текст на кириллице с помощью функции <em>encodeURIComponent()</em>. Я на этом моменте долго помучался, пока разобрался =)</p>
<p>Ну, а теперь серверная часть нашего скрипта. Тут уже каждый может менять код под свои нужды, усовершенствовать и дополнять его.</p>
<p><div class="codecolorer-container php"><div class="codecolorer" style="font-family: monospace;">&lt;br /&gt;<br />
&lt;?php&lt;br /&gt;<br />
<a href="http://www.php.net/header"><span class="kw3">header</span></a><span class="br0">&#40;</span><span class="st0">&quot;Content-type: text/plain; charset=utf-8&quot;</span><span class="br0">&#41;</span>;&lt;br /&gt;<br />
<span class="re0">$s</span> = <a href="http://www.php.net/mysql_real_escape_string"><span class="kw3">mysql_real_escape_string</span></a><span class="br0">&#40;</span><a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><a href="http://www.php.net/trim"><span class="kw3">trim</span></a><span class="br0">&#40;</span><span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">'s'</span><span class="br0">&#93;</span><span class="br0">&#41;</span>,<span class="nu0">0</span>,<span class="nu0">50</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;&lt;br /&gt;<br />
<span class="kw1">if</span><span class="br0">&#40;</span>!<a href="http://www.php.net/empty"><span class="kw3">empty</span></a><span class="br0">&#40;</span><span class="re0">$s</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>&lt;br /&gt;<br />
&nbsp; <a href="http://www.php.net/mysql_connect"><span class="kw3">mysql_connect</span></a><span class="br0">&#40;</span><span class="st0">'localhost'</span>,<span class="st0">'root'</span>,<span class="st0">''</span><span class="br0">&#41;</span>;&lt;br /&gt;<br />
&nbsp; <a href="http://www.php.net/mysql_select_db"><span class="kw3">mysql_select_db</span></a><span class="br0">&#40;</span><span class="st0">'test'</span><span class="br0">&#41;</span>;&lt;br /&gt;<br />
&nbsp; <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;SET NAMES utf8&quot;</span><span class="br0">&#41;</span>;&lt;br /&gt;<br />
&nbsp; <span class="re0">$res</span> = <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;SELECT name FROM names WHERE name LIKE '&quot;</span>.<span class="re0">$s</span>.<span class="st0">&quot;%' ORDER BY name ASC LIMIT 7&quot;</span><span class="br0">&#41;</span>;&lt;br /&gt;<br />
&nbsp; <span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$row</span> = <a href="http://www.php.net/mysql_fetch_array"><span class="kw3">mysql_fetch_array</span></a><span class="br0">&#40;</span><span class="re0">$res</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>&lt;br /&gt;<br />
?&gt;&lt;/p&gt;<br />
&lt;div <span class="kw2">class</span>=<span class="st0">&quot;asearch&quot;</span> onMouseOver=<span class="st0">&quot;m_over(this)&quot;</span> onMouseOut=<span class="st0">&quot;m_out(this)&quot;</span> onClick=<span class="st0">&quot;m_change('&lt;?=$row['name'];?&gt;')&quot;</span>&gt;&lt;br /&gt;<br />
<span class="kw2">&lt;?</span>=<span class="re0">$row</span><span class="br0">&#91;</span><span class="st0">'name'</span><span class="br0">&#93;</span>;?&gt;<br />
&lt;/div&gt;<br />
&lt;p&gt;&lt;?php <span class="br0">&#125;</span><span class="br0">&#125;</span> ?&gt;&lt;br /&gt;</div></div>
</p>
<p>В итоге серверная часть скрипта должна выдать что-то вроде этого:</p>
<p><div class="codecolorer-container html"><div class="codecolorer" style="font-family: monospace;"><span class="sc2"><span class="kw2">&lt;/p&gt;</span></span><br />
<span class="sc2"><a href="http://december.com/html/4/element/div.html"><span class="kw2">&lt;div</span></a> <span class="kw3">class</span>=<span class="st0">&quot;asearch&quot;</span> <span class="kw3">onMouseOver</span>=<span class="st0">&quot;m_over(this)&quot;</span> <span class="kw3">onMouseOut</span>=<span class="st0">&quot;m_out(this)&quot;</span> <span class="kw3">onClick</span>=<span class="st0">&quot;m_change('Анатолий')&quot;</span><span class="kw2">&gt;</span></span>Анатолий<span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
<span class="sc2"><a href="http://december.com/html/4/element/div.html"><span class="kw2">&lt;div</span></a> <span class="kw3">class</span>=<span class="st0">&quot;asearch&quot;</span> <span class="kw3">onMouseOver</span>=<span class="st0">&quot;m_over(this)&quot;</span> <span class="kw3">onMouseOut</span>=<span class="st0">&quot;m_out(this)&quot;</span> <span class="kw3">onClick</span>=<span class="st0">&quot;m_change('Антон')&quot;</span><span class="kw2">&gt;</span></span>Антон<span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
<span class="sc2"><a href="http://december.com/html/4/element/p.html"><span class="kw2">&lt;p&gt;</span></a></span></div></div>
</p>
<p><a href="http://voronov-it.com/demo/autosearch/" target="_blank">Рабочий вариант скрипта</a><br />
<a href="http://voronov-it.com/files/autosearch.zip">Скачать архив со скриптом</a> (1.7Кб)</p>
<p>Вот, пожалуй, и весь скрипт. Я решил, что не стоит загружать фреемворками. Для тех, кто ищет вариант с фреемворком могу предложить <noindex><a href="http://digitarald.de/project/autocompleter/" target="_blank" rel="nofollow">AutoCompleter</a></noindex>(для MooTools).</p>
]]></content:encoded>
			<wfw:commentRss>http://voronov-it.com/blog/pishem-skript-avtozapolneniya-poiskovyx-form/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Как загрузить и распаковать ZIP-архив на сервере</title>
		<link>http://voronov-it.com/blog/kak-zagruzit-i-raspakovat-zip-arxiv-na-servere/</link>
		<comments>http://voronov-it.com/blog/kak-zagruzit-i-raspakovat-zip-arxiv-na-servere/#comments</comments>
		<pubDate>Wed, 06 Aug 2008 23:57:19 +0000</pubDate>
		<dc:creator>Rii</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[PCLZip]]></category>

		<category><![CDATA[zip]]></category>

		<category><![CDATA[распаковщик]]></category>

		<guid isPermaLink="false">http://voronov-it.com/blog/?p=3</guid>
		<description><![CDATA[Привет!! Думаю у вас случалось, когда нужно было залить на сервер какой-нибудь движок или скрипт. Но он состоял из большого количества различных файлов и его загрузка занимала довольно много времени. Эх, как бы хотелось всё это сделать быстро и одним файлом. Вот и пришла мне идея написать небольшой скрипт для облегчения своей и вашей жизни.
В [...]]]></description>
			<content:encoded><![CDATA[<p>Привет!! Думаю у вас случалось, когда нужно было залить на сервер какой-нибудь движок или скрипт. Но он состоял из большого количества различных файлов и его загрузка занимала довольно много времени. Эх, как бы хотелось всё это сделать быстро и одним файлом. Вот и пришла мне идея написать небольшой скрипт для облегчения своей и вашей жизни.<span id="more-3"></span></p>
<p>В сети я нашёл очень удобную библиотеку для работы с zip-архивами. Знакомьтесь – <a href="http://www.phpconcept.net/pclzip/index.php" target="_blank">PCLZip</a>.</p>
<p>Теперь наш скрипт распаковщика:</p>
<p><div class="codecolorer-container php"><div class="codecolorer" style="font-family: monospace;">&lt;br /&gt;<br />
&lt;?php&lt;br /&gt;<br />
<a href="http://www.php.net/set_time_limit"><span class="kw3">set_time_limit</span></a><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>;&nbsp; <span class="co1">// Установим максимальное время выполнения скрипта до бесконечности&lt;/p&gt;</span><br />
&lt;p&gt;<span class="re0">$loadarch</span> = <span class="re0">$_FILES</span><span class="br0">&#91;</span><span class="st0">'arch'</span><span class="br0">&#93;</span>;&nbsp;<span class="co1">// Это для удобства&lt;/p&gt;</span><br />
&lt;p&gt;<span class="co1">// Если ничего не загружено или произошла ошибка при загрузке - выводим форму&lt;br /&gt;</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/empty"><span class="kw3">empty</span></a><span class="br0">&#40;</span><span class="re0">$loadarch</span><span class="br0">&#91;</span><span class="st0">'name'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> || <span class="re0">$loadarch</span><span class="br0">&#91;</span><span class="st0">'error'</span><span class="br0">&#93;</span>!=UPLOAD_ERR_OK<span class="br0">&#41;</span> <span class="br0">&#123;</span>&lt;br /&gt;<br />
?&gt;&lt;/p&gt;<br />
&lt;form action=<span class="st0">&quot;&quot;</span> method=<span class="st0">&quot;post&quot;</span> enctype=<span class="st0">&quot;multipart/form-data&quot;</span>&gt;<br />
&nbsp; &lt;b&gt;Выберите zip-архив:&lt;/b&gt;&lt;/p&gt;<br />
&lt;input type=<span class="st0">&quot;file&quot;</span> name=<span class="st0">&quot;arch&quot;</span>&gt;<br />
&nbsp; &lt;b&gt;Извлечь в папку:&lt;/b&gt;&lt;/p&gt;<br />
&lt;input type=<span class="st0">&quot;text&quot;</span> name=<span class="st0">&quot;fold&quot;</span>&gt;<br />
&lt;input type=<span class="st0">&quot;submit&quot;</span> value=<span class="st0">&quot;Загрузить&quot;</span>&gt;<br />
&lt;/form&gt;<br />
&lt;p&gt;&lt;?php&lt;br /&gt;<br />
<a href="http://www.php.net/exit"><span class="kw3">exit</span></a>;&nbsp;<span class="co1">// Вывели формочку и закончили&lt;br /&gt;</span><br />
<span class="br0">&#125;</span>&lt;/p&gt;<br />
&lt;p&gt;<span class="co1">// Если файл загружен, выполняем код ниже&lt;/p&gt;</span><br />
&lt;p&gt;<span class="co1">// Проверим, является ли файл zip-архивом&lt;br /&gt;</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$loadarch</span><span class="br0">&#91;</span><span class="st0">'type'</span><span class="br0">&#93;</span>!=<span class="st0">'application/zip'</span> &amp;<span class="co2">#038;&amp; $loadarch['type']!='application/x-zip-compressed')&lt;br /&gt;</span><br />
&nbsp; <a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="st0">'Ошибка! Это не zip-архив!'</span><span class="br0">&#41;</span>;&lt;/p&gt;<br />
&lt;p&gt;<span class="co1">// Загружаем архив в папку со скриптом&lt;br /&gt;</span><br />
<a href="http://www.php.net/copy"><span class="kw3">copy</span></a><span class="br0">&#40;</span><span class="re0">$loadarch</span><span class="br0">&#91;</span><span class="st0">'tmp_name'</span><span class="br0">&#93;</span>,<span class="re0">$loadarch</span><span class="br0">&#91;</span><span class="st0">'name'</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;&lt;/p&gt;<br />
&lt;p&gt;<span class="co1">// Подключаем библиотеку для работы с ZIP-архивами&lt;br /&gt;</span><br />
<span class="kw1">require_once</span><span class="br0">&#40;</span><span class="st0">'pclzip.lib.php'</span><span class="br0">&#41;</span>;&lt;/p&gt;<br />
&lt;p&gt;<span class="co1">// $loadarch['name'] - название архива&lt;br /&gt;</span><br />
<span class="re0">$zip</span> = <span class="kw2">new</span> PclZip<span class="br0">&#40;</span><span class="re0">$loadarch</span><span class="br0">&#91;</span><span class="st0">'name'</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;&lt;/p&gt;<br />
&lt;p&gt;<span class="co1">// Если указана папка для извлечения, распаковываем туда&lt;br /&gt;</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/empty"><span class="kw3">empty</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st0">'fold'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>&lt;br /&gt;<br />
&nbsp; <span class="re0">$ext</span> = <span class="re0">$zip</span>-&gt;<span class="me1">extract</span><span class="br0">&#40;</span>PCLZIP_OPT_SET_CHMOD, <span class="nu0">0777</span><span class="br0">&#41;</span>;&lt;br /&gt;<br />
<span class="co1">// Иначе, в папку со скриптом&lt;br /&gt;</span><br />
else&lt;br /&gt;<br />
&nbsp; <span class="re0">$ext</span> = <span class="re0">$zip</span>-&gt;<span class="me1">extract</span><span class="br0">&#40;</span>&lt;br /&gt;<br />
&nbsp; &nbsp; PCLZIP_OPT_PATH,<span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st0">'fold'</span><span class="br0">&#93;</span>,&lt;br /&gt;<br />
&nbsp; &nbsp; PCLZIP_OPT_SET_CHMOD, <span class="nu0">0777</span>&lt;br /&gt;<br />
<span class="br0">&#41;</span>;&lt;/p&gt;<br />
&lt;p&gt;<span class="co1">// Если возвращает 0, выводим ошибку и выходим&lt;br /&gt;</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$ext</span>==<span class="nu0">0</span><span class="br0">&#41;</span>&lt;br /&gt;<br />
&nbsp; <a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="st0">&quot;Ошибка! &quot;</span>.<span class="re0">$zip</span>-&gt;<span class="me1">errorInfo</span><span class="br0">&#40;</span><span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;&lt;/p&gt;<br />
&lt;p&gt;<span class="co1">// Выводим список загруженных файлов&lt;br /&gt;</span><br />
<span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$ext</span> <span class="kw1">as</span> <span class="re0">$val</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>&lt;br /&gt;<br />
&nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$val</span><span class="br0">&#91;</span><span class="st0">'filename'</span><span class="br0">&#93;</span>.<span class="st0">&quot;&lt;br /&gt;&quot;</span>;&lt;br /&gt;<br />
<span class="br0">&#125;</span>&lt;br /&gt;<br />
<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;&lt;b&gt;Файлы успешно извлечены!!&lt;/b&gt;&quot;</span>;&lt;/p&gt;<br />
&lt;p&gt;<span class="co1">// и удаляем уже распакованный архив&lt;br /&gt;</span><br />
<a href="http://www.php.net/unlink"><span class="kw3">unlink</span></a><span class="br0">&#40;</span><span class="re0">$loadarch</span><span class="br0">&#91;</span><span class="st0">'name'</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;&lt;br /&gt;<br />
<span class="kw2">?&gt;</span></div></div>
</p>
<p>Итак, что в итоге получилось. Когда открываем страничку, мы видим перед собой простую форму с 2 полями: для выбора загружаемого архива и для указания каталогу, куда всё это дело распаковать. Поле с каталогом не обязательное, и если его оставить пустым – архив распакуется в папку со скриптом. После распаковки скрипт выведет список распакованных папок и файлов.</p>
<p><a href="http://voronov-it.com/files/php_zipextract.zip"><strong>Скачать скрипт распаковщика</strong></a></p>
<p>Вот в принципе и всё! Конечно, скрипт очень простой, но то, что должен делать – он делает исправно. Жду ваших вопросов, отзывов и идей по поводу библиотеки и нашего скрипта.</p>
]]></content:encoded>
			<wfw:commentRss>http://voronov-it.com/blog/kak-zagruzit-i-raspakovat-zip-arxiv-na-servere/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
