<?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>Saiman says &#187; PHP</title>
	<atom:link href="http://saiman.thefreeart.com/category/%d0%ba%d0%be%d0%bc%d0%bf%d1%8e%d1%82%d1%80%d0%b8/php/feed" rel="self" type="application/rss+xml" />
	<link>http://saiman.thefreeart.com</link>
	<description>личен блог на saiman</description>
	<lastBuildDate>Tue, 27 Sep 2011 16:10:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Изтриване на елемент от масив в PHP</title>
		<link>http://saiman.thefreeart.com/kompyutri/php/iztrivane-na-element-ot-masiv-v-php</link>
		<comments>http://saiman.thefreeart.com/kompyutri/php/iztrivane-na-element-ot-masiv-v-php#comments</comments>
		<pubDate>Fri, 11 Sep 2009 10:25:16 +0000</pubDate>
		<dc:creator>saiman</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://saiman.thefreeart.com/?p=74</guid>
		<description><![CDATA[Вчера попаднах на няколко &#8222;гениални&#8220; функции написани на PHP, на които заслужава да се обърне особено внимание. Функциите сами по себе си са повече от ненужни, но това е без значение за автора, който в този ред на мисли е &#8230; <a href="http://saiman.thefreeart.com/kompyutri/php/iztrivane-na-element-ot-masiv-v-php">Има още <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Вчера попаднах на няколко &#8222;гениални&#8220; функции написани на PHP, на които заслужава да се обърне особено внимание. Функциите сами по себе си са повече от ненужни, но това е без значение за автора, който в този ред на мисли е възпитаник на ФМИ, следователно знае и може всичко. Ето и функциите:</p>
<p>[geshi lang=php]<br />
function delete_array_element(&#038;$arr, $search_value, $modify_arr = false) {<br />
    $result_arr = array();</p>
<p>    foreach ($arr as $key => $value) {<br />
        if ($value != $search_value) {<br />
            $result_arr[$key] = $value;<br />
        }<br />
    }</p>
<p>    if ($modify_arr) {<br />
        $arr = $result_arr;<br />
    } else {<br />
        return $result_arr;<br />
    }<br />
}</p>
<p>function delete_array_element_by_index(&#038;$arr, $search_key, $modify_arr = false) {<br />
    $result_arr = array();</p>
<p>    foreach ($arr as $key => $value) {<br />
        if ($key != $search_key) {<br />
            $result_arr[$key] = $value;<br />
        }<br />
    }</p>
<p>    if ($modify_arr) {<br />
        $arr = $result_arr;<br />
    } else {<br />
        return $result_arr;<br />
    }<br />
}<br />
[/geshi]</p>
<p>А ето и не чак толкова гениалното решение, което обезсмисля двете функции по-горе.</p>
<p>[geshi lang=php]<br />
unset($myarray['key']);<br />
unset($myarray[array_search('value', $myarray)]);<br />
[/geshi]</p>
]]></content:encoded>
			<wfw:commentRss>http://saiman.thefreeart.com/kompyutri/php/iztrivane-na-element-ot-masiv-v-php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework Application/Tool components</title>
		<link>http://saiman.thefreeart.com/kompyutri/php/zend-framework-applicationtool-components</link>
		<comments>http://saiman.thefreeart.com/kompyutri/php/zend-framework-applicationtool-components#comments</comments>
		<pubDate>Wed, 03 Jun 2009 10:10:49 +0000</pubDate>
		<dc:creator>saiman</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://saiman.thefreeart.com/?p=67</guid>
		<description><![CDATA[Днес изтеглих последната версия на Zend Framework с мисълта да разгледам новите компоненти в него, по-точно Zend Application и Zend Tool. Целта на тези два компонента е да ни спести главоболията свързани със създаването на необходимите директории и конфигурирането в &#8230; <a href="http://saiman.thefreeart.com/kompyutri/php/zend-framework-applicationtool-components">Има още <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Днес изтеглих последната версия на Zend Framework с мисълта да разгледам новите компоненти в него, по-точно Zend Application и Zend Tool. Целта на тези два компонента е да ни спести главоболията свързани със създаването на необходимите директории и конфигурирането в bootstrap файла. За жалост обаче, поне според мен в момента повече пречат, отколкото помагат. Първоначалното стартиране на Zend Tool беше успешно, създаде необходимите директории, заедно с Index и Error контролерите. </p>
<p><strong>$ bin/zf.sh create project test</strong></p>
<p>Тази команда я изпълних от root директорията на проекта. След нея, реших да тествам създаването на един допълнителен контролер, но този път стартирах zf.sh от bin/ директорията.</p>
<p><strong>$ pwd<br />
/home/saiman/www/Test/bin<br />
$ ./zf.sh create controller Controller1<br />
An Error Has Occurred<br />
A project profile was not found.</strong></p>
<p>Хубава работа. Оказва се, че не намира нещо, което само създателят на този компонент знае какво е. Реших да изпълня командата &#8222;show profile&#8220;, с надеждата да ми &#8222;каже&#8220;, къде се намира този &#8222;profile&#8220;, който търси.</p>
<p><strong>$ ./zf.sh show profile<br />
An Error Has Occurred<br />
A project profile was not found.</strong></p>
<p>Грешката е същата. Реших да не налучквам и стартирах помощната команда, която би трябвало да ми даде някакви информация за този &#8222;profile&#8220;, за това какво представлява и как се работи с него.</p>
<p><strong>$ ./zf.sh ? profile<br />
Zend Framework Command Line Console Tool v1.8.2<br />
Actions supported by provider &#8222;Profile&#8220;<br />
Profile<br />
zf show profile</strong></p>
<p>Не е много изчерпателно, както се вижда. Оказа се, че &#8222;profile&#8220;-а представлява един скрит xml файл, който се създава в директорията, в която за първи път е стартиран zf.sh, тоест в root директорията на проекта. Оказа се също, че от тази директория всичко си работи, но ако реша да стартирам zf.sh от друго място &#8211; резултата вече го видяхме. След като разбрах как &#8222;работи&#8220; това чудо, се върнах на задачата, която си бях поставил &#8211; да създам нов контролер.</p>
<p><strong>$ bin/zf.sh create controller Controller1<br />
Creating a controller at /media/sda2/home/saiman/www/Test/application/controllers/Controller1Controller.php<br />
Creating an index action method in controller Controller1<br />
Creating a view script for the index action method at /media/sda2/home/saiman/www/Test/application/views/scripts/Controller1/index.phtml<br />
Creating a controller test file at /media/sda2/home/saiman/www/Test/tests/application/controllers/Controller1ControllerTest.php<br />
Updating project profile &#8216;/media/sda2/home/saiman/www/Test/.zfproject.xml&#8217;</strong></p>
<p>Стартирах си браузъра, за да отворя контролера и получих следната грешка:</p>
<p><strong>Message: script &#8216;controller1/index.phtml&#8217; not found in path (/media/sda2/home/saiman/www/Test/application/views/scripts/)</strong></p>
<p>Проблема се оказа в името на директорията (/media/sda2/home/saiman/www/Test/application/views/scripts/Controller1), в която се съхраняват темплейтите за този контролер. Създадена е с главна буква. Това сигурно е бъг. Най-интересното е, че успях да стартирам същата команда, само че с малка буква този път и тя ми създаде необходимата директория. Предполагам, че презаписа контролера, защото на практика в двата случая той е един и същ. Какво ли щеше да се случи ако бях вкарал някакъв код в този контролер ? Най-вероятно щеше да ми се наложи да го пиша наново.</p>
<p><strong>bin/zf.sh create controller controller1<br />
Creating a controller at /media/sda2/home/saiman/www/Test/application/controllers/Controller1Controller.php<br />
Creating an index action method in controller controller1<br />
Creating a view script for the index action method at /media/sda2/home/saiman/www/Test/application/views/scripts/controller1/index.phtml<br />
Creating a controller test file at /media/sda2/home/saiman/www/Test/tests/application/controllers/Controller1ControllerTest.php<br />
Updating project profile &#8216;/media/sda2/home/saiman/www/Test/.zfproject.xml&#8217;</strong></p>
<p>Стига толкова тестване. Започвам да се чудя, с какъв акъл тези хора, пускат толкова големи &#8222;недоразумения&#8220;. Преди няколко дни си играх и със SOAP компонента, където пак попаднах на бъгове. Може би е добре да спрат с новите неща и да поизчистят малко написаното, поне малко, така че да става за използване.</p>
]]></content:encoded>
			<wfw:commentRss>http://saiman.thefreeart.com/kompyutri/php/zend-framework-applicationtool-components/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP open_basedir</title>
		<link>http://saiman.thefreeart.com/kompyutri/php/php-open_basedir</link>
		<comments>http://saiman.thefreeart.com/kompyutri/php/php-open_basedir#comments</comments>
		<pubDate>Wed, 22 Apr 2009 09:03:06 +0000</pubDate>
		<dc:creator>saiman</dc:creator>
				<category><![CDATA[*BSD]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://saiman.thefreeart.com/?p=60</guid>
		<description><![CDATA[Миналата седмица конфигурирах един уеб сървър и тогава стигнах до тази настройка на php, на която ми се иска да обърна малко внимание. Използва се, за да се ограничи достъпа през php до една или повече дефинирани директории. С други &#8230; <a href="http://saiman.thefreeart.com/kompyutri/php/php-open_basedir">Има още <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Миналата седмица конфигурирах един уеб сървър и тогава стигнах до тази настройка на php, на която ми се иска да обърна малко внимание. Използва се, за да се ограничи достъпа през php до една или повече дефинирани директории. С други думи, ако зададем open_basedir да бъде /var/www/myvhost/ то тогава през php ще имаме достъп единствено и само до файловете в директорията /var/www/myvhost/ и всички нейни поддиректории.<br />
Особено полезно е, да не кажа задължително да прилагаме тези директива, когато използваме mod_php и имаме няколко виртуални хоста, принадлежащи на различни потребители. Проблема произтича от там, че файловете във всички виртуални хостове трябва да могат да бъдат достъпни чрез www потребителя (или друг, с който е конфигуриран да работи apache). Това означава, че всеки един потребител, може да напише php скрипт, който да чете файловете във виртуалните хостове на другите потребители. Става лошо, когато някой от тези &#8222;злонамерени&#8220; потребители, прочете файла с настройките за достъп до базата от данни на някой друг потребител и съответно се сдобие с достъп до тази база от данни. За да предотвратим това да се случи, използваме open_basedir. За всеки един виртуален хост, задаваме open_basedir да бъде равно на съответната директория, в която е дефиниран този виртуален хост. По този начин всеки един потребител, ще може да достъпи само и единствено своите файлове посредством php.<br />
Възможно е да задаваме повече от една директория за open_basedir, стига да ги отделим с две точки (или с точка и запетая, ако използваме windows). Всеки път, когато потребител се опита да достъпи файл извън директориите дефиниране чрез open_basedir, ще се генерира съобщение, което се записва в apache error лога. Хубаво е, в директориите които описваме да включим и директорията в която се съхранява session файловете. Ето и пример, за използването на open_basedir за произволен виртуален хост:</p>
<blockquote><p>
&#60;VirtualHost *:80><br />
    ServerAdmin my@email.com<br />
    DocumentRoot /www/saiman.thefreeart.com/httpd/<br />
    ServerName www.saiman.thefreeart.com<br />
    ServerAlias saiman.thefreeart.com</p>
<p>    &#60;Directory /www/saiman.thefreeart.com/httpd/ ><br />
	php_admin_value open_basedir &#8222;/www/saiman.thefreeart.com/httpd/:/var/tmp/&#8220;</p>
<p>        Options Indexes MultiViews<br />
        AllowOverride None<br />
        Order allow,deny<br />
        allow from all<br />
    &#60;/Directory><br />
&#60;/VirtualHost>
</p></blockquote>
<p>В заключение искам да кажа, че посредством open_basedir не се решават всички проблеми свързани със сигурността, safe_mode също не е достатъчно надежден, а и в php 6 ще бъде премахнат, остава Suhosin Patch, който според мен е задължителен за инсталиране.</p>
]]></content:encoded>
			<wfw:commentRss>http://saiman.thefreeart.com/kompyutri/php/php-open_basedir/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Data source adapter за Zend_Paginator</title>
		<link>http://saiman.thefreeart.com/kompyutri/php/data-source-adapter-za-zend_paginator</link>
		<comments>http://saiman.thefreeart.com/kompyutri/php/data-source-adapter-za-zend_paginator#comments</comments>
		<pubDate>Wed, 25 Mar 2009 09:17:32 +0000</pubDate>
		<dc:creator>saiman</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://saiman.thefreeart.com/?p=56</guid>
		<description><![CDATA[Следя Zend Frameowrk и въпреки че реално за момента не съм писал проект с него, се опитвам да съм в час с това, което се случва. Преди време разгледах Zend_Paginator компонента и написах няколко парчета код, за да видя реално &#8230; <a href="http://saiman.thefreeart.com/kompyutri/php/data-source-adapter-za-zend_paginator">Има още <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Следя Zend Frameowrk и въпреки че реално за момента не съм писал проект с него, се опитвам да съм в час с това, което се случва. Преди време разгледах Zend_Paginator компонента и написах няколко парчета код, за да видя реално как работи. Останах впечатлен, използва се лесно и се грижи за всичко необходимо: набавя необходимата информация в зависимост от избраната в момента страница и генерира линкове към съществуващите страници. За да свърши всичко това, Zend_Paginator компонента използва така наречените data source adapters, представляват връзката между Zend_Paginator и информацията, която искаме да покажем на страницата. В момента, заедно със Zend_Paginator имаме достъп и до <a href="http://framework.zend.com/manual/en/zend.paginator.usage.html">няколко</a> data source adapters: Array, DbSelect, DbTableSelect, Iterator и Null. В случай, че тези се окажат недостатъчни в даден момент, винаги можем да напишем наш собствен.<br />
Adapterа по-долу има за цел да работи директно с базата от данни. Той приема две различни sql заявки &#8211; една с която да &#8222;пребори&#8220; количеството информация и друга, която реално се използва за извличане на информацията. Ето и пример, как реално работи Zend_Paginator със създаденият adapter:</p>
<p>[geshi lang=php]<br />
$query_count = &#8216;SELECT COUNT(*) FROM service_periodic&#8217;;<br />
$query_fetch = &#8216;SELECT * FROM service_periodic&#8217;;<br />
$adapter = new myLibs_Paginator_AdapterMySql($query_fetch, array(), $query_count, array(), $this->db);<br />
$paginator = new Zend_Paginator($adapter);<br />
[/geshi]</p>
<p>На ред 1 и 2 пишем двете заявки съответно за преброяване и за извличане на информацията. На ред 3 правим инстанция на myLibs_Paginator_AdapterMySql, което всъщност е създаденият от нас adapter и на ред 4 подаваме този обект на Zend_Paginator, след което го оставяме да се погрижи за останлото. myLibs_Paginator_AdapterMySql имплементира Zend_Paginator_Adapter_Interface интерфейса и съответно трябва да дефинираме два метода в него: public function getItems($offset, $itemCountPerPage) и public function count(). Ето и кода на myLibs_Paginator_AdapterMySql:</p>
<p>[geshi lang=php]<br />
class myLibs_Paginator_AdapterMySql implements Zend_Paginator_Adapter_Interface {</p>
<p>    protected $_db;<br />
    protected $_count = null;</p>
<p>    protected $_sql_fetch;<br />
    protected $_exec_fetch;<br />
    protected $_sql_count;<br />
    protected $_exec_count;</p>
<p>    public function __construct($sql_fetch, $exec_fetch, $sql_count, $exec_count, $db) {<br />
        $this->_db = $db;<br />
        $this->_sql_fetch = $sql_fetch;<br />
        $this->_exec_fetch = $exec_fetch;<br />
        $this->_sql_count = $sql_count;<br />
        $this->_exec_count = $exec_count;<br />
    }</p>
<p>    public function count() {<br />
        if (is_numeric($this->_count)) {<br />
            return $this->_count;<br />
        }</p>
<p>        $stmt = $this->_db->prepare($this->_sql_count);<br />
        $stmt->execute($this->_exec_count);<br />
        $this->_count = $stmt->fetchColumn();<br />
        unset($stmt);</p>
<p>        return $this->_count;<br />
    }</p>
<p>    public function getItems($offset, $itemCountPerPage) {<br />
        $offset = (int) $offset;<br />
        $itemCountPerPage = (int) $itemCountPerPage;</p>
<p>        $stmt = $this->_db->prepare($this->_sql_fetch . &#8220; LIMIT $offset, $itemCountPerPage&#8220;);<br />
        $stmt->execute($this->_exec_fetch);<br />
        $result = $stmt->fetchAll();<br />
        unset($stmt);</p>
<p>        return $result;<br />
    }<br />
}<br />
[/geshi]</p>
]]></content:encoded>
			<wfw:commentRss>http://saiman.thefreeart.com/kompyutri/php/data-source-adapter-za-zend_paginator/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Проверяване за прокси сървъри с php</title>
		<link>http://saiman.thefreeart.com/kompyutri/php/proveryavane-za-proksi-sarvari-s-php</link>
		<comments>http://saiman.thefreeart.com/kompyutri/php/proveryavane-za-proksi-sarvari-s-php#comments</comments>
		<pubDate>Thu, 19 Feb 2009 16:17:38 +0000</pubDate>
		<dc:creator>saiman</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://saiman.thefreeart.com/?p=52</guid>
		<description><![CDATA[Понякога ми се налага да използвам прокси, докато браузвам &#8211; предполагам и на вас. Дали защото някой умен системен администратор е забранил достъпа до vbox, youtube или други &#8211; без значение. В този случай отварям google и намирам някой сайт &#8230; <a href="http://saiman.thefreeart.com/kompyutri/php/proveryavane-za-proksi-sarvari-s-php">Има още <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Понякога ми се налага да използвам прокси, докато браузвам &#8211; предполагам и на вас. Дали защото някой умен системен администратор е забранил достъпа до vbox, youtube или други &#8211; без значение. В този случай отварям google и намирам някой сайт с прокси списъци, а такива има много и започвам да пробвам, докато не открия някое което наистина работи, защото повече от половината не стават. Така един ден, реших да си поиграя и да напиша скрипт, който да проверя за валидни proxy сървъри.<br />
Скрипта се състои от две части &#8211; клиент и сървър. Стартираме сървъра на някоя машина, която е достъпна от интернет. Клиента ще се опита да използва проксито и да се свърже през него към сървъра. Ако успее, значи проксито работи. Същевременно се проверя, дали въпросното прокси е анонимно или не, т.е. дали показва ip адреса ни на сървъра. Добре е да се застраховам тук и да кажа, че кода по-долу е пускан един два пъти и като, че ли на пръв поглед работи. Не мога да гарантирам обаче, че няма бъгове, нито пък че това е оптималното решение на този проблем. Използвайте го, в случай че го намерите за полезен и не ме търсете ако благодарение на него ви се скапе компютъра.</p>
<p><strong>proxy_server.php</strong><br />
[geshi lang=php]<br />
<?php<br />
$address = 'server.com';<br />
$port = '3777';<br />
set_time_limit(0);</p>
<p>$clients = array();<br />
$sock = socket_create(AF_INET, SOCK_STREAM, 0);<br />
socket_bind($sock, $address, $port) or die('Couldn\'t bind to address');<br />
socket_listen($sock);</p>
<p>while (true) {<br />
    $client = socket_accept($sock);<br />
    $input = socket_read($client, 1024);</p>
<p>    if (stristr($input, 'x-forwarded-for') === false) {<br />
        $output = 'anon';<br />
    } else {<br />
        $output = 'notanon';<br />
    }</p>
<p>    socket_write($client, $output);<br />
    socket_close($client);<br />
}<br />
socket_close($sock);<br />
[/geshi]</p>
<p><strong>proxy_client.php</strong><br />
[geshi lang=php]<br />
<?php<br />
$file_write = false;<br />
if (in_array('--write', $argv)) {<br />
    $file_write = true;<br />
    $file = $argv[array_search('--write', $argv) + 1];</p>
<p>    $fh = fopen($file, 'a+');<br />
    if ($fh == false) {<br />
        echo "Error: Invalid output file \n";<br />
        usage();<br />
    }<br />
}</p>
<p>if (in_array('--url', $argv)) {<br />
    $server_url = $argv[array_search('--url', $argv) + 1];<br />
} else {<br />
    echo "Error: Invalid server URL \n";<br />
    usage();<br />
}</p>
<p>if (in_array('--from', $argv) &#038;&#038; in_array('--to', $argv) &#038;&#038; in_array('--ports', $argv)) {</p>
<p>    $from = ip2long($argv[array_search('--from', $argv) + 1]);<br />
    $to = ip2long($argv[array_search('--to', $argv) + 1]);</p>
<p>    if ($from >= $to) {<br />
        echo &#8222;Error: Invalid scan range \n&#8220;;<br />
        usage();<br />
    }</p>
<p>    for ($i = array_search(&#8216;&#8211;ports&#8217;, $argv) + 1; $i < count($argv); $i++) {<br />
        if (is_numeric($argv[$i])) {<br />
            $ports[] = $argv[$i];<br />
        } else {<br />
            break;<br />
        }<br />
    }</p>
<p>    for($from; $from <= $to; $from++ ) {</p>
<p>        $address = long2ip($from);<br />
        foreach ($ports as $port) {</p>
<p>            $result = scan($address, $port, $server_url);<br />
            if ($result !== false &#038;&#038; $file_write) {<br />
                fputs($fh, &#8222;$address:$port $result\n&#8220;);<br />
            }elseif ($result !== false) {<br />
                echo &#8222;$address:$port $result\n&#8220;;<br />
            }<br />
        }<br />
    }<br />
} elseif (in_array(&#8216;&#8211;list&#8217;, $argv)) {<br />
    $list = $argv[array_search('--list', $argv) + 1];</p>
<p>    if (!file_exists($list) || !is_readable($list)) {<br />
        echo &#8222;Error: Invalid input file \n&#8220;;<br />
        usage();<br />
    }</p>
<p>    $separator = &#8216; &#8216;;<br />
    if (in_array(&#8216;&#8211;separate&#8217;, $argv)) {<br />
        $separator = $argv[array_search('--separate', $argv) + 1];<br />
    }</p>
<p>    $fh_list = fopen($list, &#8216;r&#8217;);<br />
    if ($fh_list) {<br />
        while (!feof($fh_list)) {<br />
            $line = fgets($fh_list);</p>
<p>            if (empty($line)) {<br />
                continue;<br />
            }            </p>
<p>            $data = explode($separator, $line);</p>
<p>            if (isset($data[0]) &#038;&#038; !empty($data[0]) &#038;&#038; isset($data[1]) &#038;&#038; !empty($data[1])) {<br />
                $address = trim($data[0]);<br />
                $port = trim($data[1]);</p>
<p>                $result = scan($address, $port, $server_url);<br />
                if ($result !== false &#038;&#038; $file_write) {<br />
                    fputs($fh, &#8222;$address:$port $result\n&#8220;);<br />
                }elseif ($result !== false) {<br />
                    echo &#8222;$address:$port $result\n&#8220;;<br />
                }<br />
            }<br />
        }<br />
    }<br />
} else {<br />
    usage();<br />
}</p>
<p>if ($file_write) {<br />
    fclose($fh);<br />
}</p>
<p>function usage() {<br />
    echo &#8222;proxy.php \n&#8220;;<br />
    echo &#8222;&#8211;url Proxy server URL\n&#8220;;<br />
    echo &#8222;&#8211;from IP address\n&#8220;;<br />
    echo &#8222;&#8211;to IP address\n&#8220;;<br />
    echo &#8222;&#8211;ports Scan only selected ports\n&#8220;;<br />
    echo &#8222;&#8211;write Save all proxies into the specified file\n&#8220;;<br />
    echo &#8222;&#8211;list Read the ip&#8217;s from a file\n&#8220;;<br />
    echo &#8222;&#8211;separate Default seperator is space. Use separate to specify another\n&#8220;;<br />
    exit();<br />
}</p>
<p>function scan($proxy, $port, $url) {<br />
    $socket = @fsockopen($proxy, $port, $errno, $errstr, 2);<br />
    if ($socket == false) {<br />
        return false;<br />
    }</p>
<p>    $out  = &#8222;GET $url HTTP/1.1\r\n&#8220;;<br />
    $out .= &#8222;Host: $proxy\r\n&#8220;;<br />
    $out .= &#8222;Connection: Close\r\n\r\n&#8220;;<br />
    fwrite($socket, $out);</p>
<p>    $result = &#8220;;<br />
    stream_set_timeout($socket, 5);<br />
    $info = stream_get_meta_data($socket);<br />
    while (!feof($socket) &#038;&#038; !$info['timed_out']) {<br />
        $result .= fgets($socket, 128);<br />
        $info = stream_get_meta_data($socket);<br />
    }<br />
    fclose($socket);</p>
<p>    if($result == &#8216;anon&#8217; || $result == &#8216;notanon&#8217;) {<br />
        return $result;<br />
    } else {<br />
        return false;<br />
    }<br />
}<br />
[/geshi]</p>
]]></content:encoded>
			<wfw:commentRss>http://saiman.thefreeart.com/kompyutri/php/proveryavane-za-proksi-sarvari-s-php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

