<?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>AjaxBlog &#187; PHP</title>
	<atom:link href="http://ajaxblog.ru/category/php/feed" rel="self" type="application/rss+xml" />
	<link>http://ajaxblog.ru</link>
	<description>ajax, javascript, css, php</description>
	<lastBuildDate>Tue, 14 Jun 2011 19:37:47 +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>Загрузка файлов на сервер с помощью CURL</title>
		<link>http://ajaxblog.ru/356</link>
		<comments>http://ajaxblog.ru/356#comments</comments>
		<pubDate>Tue, 14 Jun 2011 19:36:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Находки]]></category>

		<guid isPermaLink="false">http://ajaxblog.ru/?p=356</guid>
		<description><![CDATA[Для одного из проектов нужно было загрузить файлы на сервер, с использованием CURL. Делается это так: $ch = curl_init(); $data = array('image' =&#62; '@{$full_path_file}'); //полный путь до файла curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_exec($ch); На локальном &#8230; <a href="http://ajaxblog.ru/356">Далее, еще интереснее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Для одного из проектов нужно было загрузить файлы на сервер, с использованием CURL.</p>
<p>Делается это так:</p>
<pre class="php" style="font-family: monospace;"><span style="color: #000088;">$ch</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_init</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>

<span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'image'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'@{$full_path_file}'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//полный путь до файла</span>

<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_URL<span style="color: #339933;">,</span> <span style="color: #0000ff;">'http://localhost/upload.php'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_POST<span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_POSTFIELDS<span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>

<span style="color: #990000;">curl_exec</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span></pre>
<p>На локальном сервере работало на ура, но когда я залил на сервер клиента, все перестала работать.</p>
<p><span id="more-356"></span>Проблемы была в том, что переменная $_FILES отдавала</p>
<pre class="php" style="font-family: monospace;"><span style="color: #990000;">Array</span>
<span style="color: #009900;">(</span>
    <span style="color: #009900;">[</span>image<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">Array</span>
        <span style="color: #009900;">(</span>
            <span style="color: #009900;">[</span>name<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> 1308074391<span style="color: #339933;">.</span>jpg
            <span style="color: #009900;">[</span>type<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> application<span style="color: #339933;">/</span>octet<span style="color: #339933;">-</span>stream
            <span style="color: #009900;">[</span>tmp_name<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> <span style="color: #339933;">/</span>tmp<span style="color: #339933;">/</span>phpslor8l
            <span style="color: #009900;">[</span>error<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span>
            <span style="color: #009900;">[</span>size<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">33173</span>
        <span style="color: #009900;">)</span>

<span style="color: #009900;">)</span></pre>
<p>вместо ожидаемого</p>
<pre class="php" style="font-family: monospace;"><span style="color: #990000;">Array</span>
<span style="color: #009900;">(</span>
    <span style="color: #009900;">[</span>image<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">Array</span>
        <span style="color: #009900;">(</span>
            <span style="color: #009900;">[</span>name<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> 1308074391<span style="color: #339933;">.</span>jpg
            <span style="color: #009900;">[</span>type<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> image<span style="color: #339933;">/</span>jpeg
            <span style="color: #009900;">[</span>tmp_name<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> <span style="color: #339933;">/</span>tmp<span style="color: #339933;">/</span>phpslor8l
            <span style="color: #009900;">[</span>error<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span>
            <span style="color: #009900;">[</span>size<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">33173</span>
        <span style="color: #009900;">)</span>

<span style="color: #009900;">)</span></pre>
<p>Причина такого странного поведения заключалось в том что у клиента на хостинге перед Apache стоял Nginx, вот он и портил все.</p>
<p>Долгое гугление привело меня к единственно верному решению</p>
<pre class="php" style="font-family: monospace;"><span style="color: #000088;">$ch</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_init</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>

<span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'image'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'@{$full_path_file};type=image/jpeg'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//полный путь до файла</span>

<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_URL<span style="color: #339933;">,</span> <span style="color: #0000ff;">'http://localhost/upload.php'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_POST<span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_POSTFIELDS<span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>

<span style="color: #990000;">curl_exec</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span></pre>
]]></content:encoded>
			<wfw:commentRss>http://ajaxblog.ru/356/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lorem Ipsum с помощью PHP</title>
		<link>http://ajaxblog.ru/340</link>
		<comments>http://ajaxblog.ru/340#comments</comments>
		<pubDate>Wed, 06 Apr 2011 17:12:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Находки]]></category>

		<guid isPermaLink="false">http://ajaxblog.ru/?p=340</guid>
		<description><![CDATA[Lorem Ipsum, а по русски &#171;рыба&#187;- это условный, зачастую бессмысленный текст, вставляемый в макет страницы. Для одного проекта нужно было что сервером передовал пвсевдотекст в качестве контекста. соответственно нужен php класс который смог бы его генерить. В результате поисков, я &#8230; <a href="http://ajaxblog.ru/340">Далее, еще интереснее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://ru.wikipedia.org/wiki/Lorem_ipsum">Lorem Ipsum</a>, а по русски &laquo;рыба&raquo;- это условный, зачастую бессмысленный текст, вставляемый в макет страницы.<br />
Для одного проекта нужно было что сервером передовал пвсевдотекст в качестве контекста. соответственно нужен php класс который смог бы его генерить. В результате поисков, я смог найти маленькую библиотечку которая генерить Lorem Ipsum.</p>
<p><span id="more-340"></span></p>
<h2>Использование</h2>
<p>только один публичный метод в классе <strong>getContent</strong>.</p>
<h2>Описание</h2>
<pre class="php" style="font-family: monospace;">string getContent<span style="color: #009900;">(</span>
    int <span style="color: #000088;">$wordCount</span>
    <span style="color: #009900;">[</span><span style="color: #339933;">,</span> string <span style="color: #000088;">$format</span> <span style="color: #339933;">=</span> html<span style="color: #009900;">]</span>
    <span style="color: #009900;">[</span><span style="color: #339933;">,</span> boolean <span style="color: #000088;">$loremipsum</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">]</span>
<span style="color: #009900;">)</span></pre>
<p>Возвращает необходимое количество слов в виде строки</p>
<h2>Параметры</h2>
<p><em>wordCount</em><br />
Количество слов которое должно быть возвращено.</p>
<p><em>format</em><br />
Режим получения результата, может быть ‘html’, ‘txt’, или ‘plain’. По умолчанию &#8216;html&#8217;.</p>
<ul>
<li>html: Текст разбиваетса на параграфы с использованием тега ( &lt;p&gt;&lt;/p&gt; ).</li>
<li>text: Текст разбиваетса на параграфы с использованием табуляции</li>
<li>plain: Текст возвращаетьса не отформатированным</li>
</ul>
<p><em>loremipsum</em><br />
Текст должен или нет, начинаться с &laquo;Lorem Ipsum&raquo;. По умолчанию &#8216;true&#8217;.</p>
<h2>Пример</h2>
<pre class="php" style="font-family: monospace;"><span style="color: #b1b100;">require</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'LoremIpsum.class.php'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$generator</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> LoremIpsumGenerator<span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//100 слов в формате html</span>
<span style="color: #000088;">$generator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getContent</span><span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//100 слов без форматирования</span>
<span style="color: #000088;">$generator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getContent</span><span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'plain'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//100 слов в формате 'text'</span>
<span style="color: #000088;">$generator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getContent</span><span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'txt'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//100 слов в формате html, текст не должен начинатса с lorem ipsum</span>
<span style="color: #000088;">$generator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getContent</span><span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'html'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span></pre>
<p><a href="http://tinsology.net/scripts/php-lorem-ipsum-generator/" target="_blank">Сайт автора</a> | <a href="http://tinsology.net/downloads/LoremIpsum.zip" target="_blank">Скачать код</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxblog.ru/340/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Кросс-доменный запрос для javascript</title>
		<link>http://ajaxblog.ru/318</link>
		<comments>http://ajaxblog.ru/318#comments</comments>
		<pubDate>Fri, 11 Mar 2011 21:28:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://ajaxblog.ru/?p=318</guid>
		<description><![CDATA[Как то для одного проекта потребовалось сделать кросс-доменный запрос с помощью javascript. Как известно политика безопасности не позволяет такое делать. Но есть разные &#171;грязные&#187; хаки которые все таки обходят эту политику. Из всех вариантов, я выбрал самый надежный и простой &#8230; <a href="http://ajaxblog.ru/318">Далее, еще интереснее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Как то  для одного проекта потребовалось сделать кросс-доменный запрос с помощью javascript. Как известно политика безопасности не позволяет такое делать. Но есть разные &laquo;грязные&raquo; хаки которые все таки обходят эту политику. Из <a href="http://javascript.ru/ajax/cross-domain-scripting">всех вариантов</a>, я выбрал самый надежный и простой в реализации.</p>
<p><span id="more-318"></span>Прокси скрипт php на серверной стороне. Суть простая мы ajax запросом посылаем параметры на наш прокси скрипт, а он в свою очередь делает запрос на указанный в параметре action адрес. После получения результата, отдает его скрипту.</p>
<h2>На клиентской стороне</h2>
<pre class="javascript" style="font-family: monospace;">param <span style="color: #339933;">=</span> <span style="color: #009900;">{</span>
    action<span style="color: #339933;">:</span> <span style="color: #3366cc;">'http://....'</span><span style="color: #339933;">,</span> <span style="color: #006600; font-style: italic;">// куда отсылаем запрос</span>
    param1<span style="color: #339933;">:</span> ...<span style="color: #339933;">,</span> <span style="color: #006600; font-style: italic;">// какой то параметр 1</span>
    param2<span style="color: #339933;">:</span> ...<span style="color: #339933;">,</span> <span style="color: #006600; font-style: italic;">// какой то параметр 2</span>
    param3<span style="color: #339933;">:</span> ...  <span style="color: #006600; font-style: italic;">// какой то параметр 3</span>
<span style="color: #009900;">}</span>

jQuery.<span style="color: #660066;">ajax</span><span style="color: #009900;">(</span><span style="color: #009900;">{</span>
    type<span style="color: #339933;">:</span> <span style="color: #3366cc;">"POST"</span><span style="color: #339933;">,</span>
    url<span style="color: #339933;">:</span> <span style="color: #3366cc;">"proxy.php"</span><span style="color: #339933;">,</span>
    dataType<span style="color: #339933;">:</span> <span style="color: #3366cc;">"json"</span><span style="color: #339933;">,</span>
    data<span style="color: #339933;">:</span> param<span style="color: #339933;">,</span>
    success<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span>res<span style="color: #009900;">)</span><span style="color: #009900;">{</span>
        ...
    <span style="color: #009900;">}</span>
<span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span></pre>
<h2>На серверной стороне</h2>
<pre class="php" style="font-family: monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>

    <span style="color: #000000; font-weight: bold;">function</span> msg<span style="color: #009900;">(</span><span style="color: #000088;">$status</span><span style="color: #339933;">,</span> <span style="color: #000088;">$msg</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
        <span style="color: #000088;">$res</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span>
            <span style="color: #0000ff;">'status'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$status</span><span style="color: #339933;">,</span>
            <span style="color: #0000ff;">'msg'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$msg</span>
        <span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #990000;">json_encode</span><span style="color: #009900;">(</span><span style="color: #000088;">$res</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">exit</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">}</span>

    <span style="color: #000000; font-weight: bold;">function</span> post<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
        <span style="color: #990000;">unset</span><span style="color: #009900;">(</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">[</span><span style="color: #0000ff;">'action'</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">(</span><span style="color: #000088;">$_POST</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$k</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$v</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
            <span style="color: #000088;">$data</span><span style="color: #009900;">[</span><span style="color: #009900;">]</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$k</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'='</span><span style="color: #339933;">.</span><span style="color: #000088;">$v</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">}</span>
        <span style="color: #b1b100;">return</span> <span style="color: #990000;">implode</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'&amp;'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">}</span>

    <span style="color: #b1b100;">if</span> <span style="color: #009900;">(</span><span style="color: #339933;">!</span> <span style="color: #990000;">isset</span><span style="color: #009900;">(</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
        msg<span style="color: #009900;">(</span><span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Не заполненые поля'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">}</span>

    <span style="color: #000088;">$url</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">[</span><span style="color: #0000ff;">'action'</span><span style="color: #009900;">]</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$ch</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_init</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_URL<span style="color: #339933;">,</span> <span style="color: #000088;">$url</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_FAILONERROR<span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_FOLLOWLOCATION<span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_RETURNTRANSFER<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_TIMEOUT<span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_POST<span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_POSTFIELDS<span style="color: #339933;">,</span> post<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_exec</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_close</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>

    msg<span style="color: #009900;">(</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #000088;">$result</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>

<span style="color: #000000; font-weight: bold;">?&gt;</span></pre>
]]></content:encoded>
			<wfw:commentRss>http://ajaxblog.ru/318/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Krumo &#8211; средство для отладки php кода</title>
		<link>http://ajaxblog.ru/184</link>
		<comments>http://ajaxblog.ru/184#comments</comments>
		<pubDate>Wed, 29 Oct 2008 07:52:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Инструмент разработчика]]></category>

		<guid isPermaLink="false">http://ajaxblog.ru/?p=184</guid>
		<description><![CDATA[Чем хорошо этот Kumo, он позволяет отказаться от ставших привычных операций echo, print_r(), var_dump(). В замен использовать krumo(). Библиотека достаточно интеллектуальна, чтобы понять какой тип переменой вы передали (String, Array, Object, Clasи т.д.) и сама проводит соответствующие преобразование в нужный &#8230; <a href="http://ajaxblog.ru/184">Далее, еще интереснее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img style="float: left; margin: 0px 10px 10px 0px" title="krumo" src="http://ajaxblog.ru/wp-content/uploads/2008/10/krumo.gif" alt="" width="288" height="97" /></p>
<p>Чем хорошо этот <a href="http://kaloyan.info/krumo/#top">Kumo</a>, он позволяет отказаться от ставших привычных операций echo, print_r(), var_dump(). В замен использовать krumo(). Библиотека достаточно интеллектуальна, чтобы понять какой тип переменой вы передали (String, Array, Object, Clasи т.д.) и сама проводит соответствующие преобразование в нужный html код для выдачи в отформатированном виде в ваш браузер.<br />
<span id="more-184"></span><br />
Как работает:</p>
<ul>
<li>Скачиваем: на <a href="http://sourceforge.net/project/showfiles.php?group_id=194198">официальном сайте</a> или <a href="http://ajaxblog.ru/article/2008/10/krumo.rar">у меня</a>. В последнем случае вы получите немного модифицированную библиотеку.
<ul>
<li>Добавил подержу оператора <strong>__()</strong>. Теперь можно вывести переменные как с помощью оператора krumo(), так и __().</li>
<li>Убрал в отладочном выводе  следующию строчку, <strong>Krumo version 0.2.1a | http://krumo.sourceforge.net/</strong>. Да простят меня разработчики, но я думаю где взять и какая версия вас мало будет интересовать во время отладки кода.</li>
</ul>
</li>
<li>Подключаем
<pre class="prettyprint">include "class.krumo.php";</pre>
</li>
<li>Используем
<pre class="prettyprint">krumo($var);
или так
__($var);</pre>
</li>
<li>Дополнительные настройки
<pre class="prettyprint">// показ debug backgrace
 krumo::backtrace();
 // показ всех подключенных классов
 krumo::includes();
 // показ всех функций
 krumo::functions();
 // показ всех декларированных классов
 krumo::classes();
 // показ всех объявленных констант
 krumo::defines();
 // запретить вывод отладочных сообщений всего что ниже
 krumo::disable();
 // Этот вывод показан не будет
 krumo::includes();
 // Разрешить отладочный вывод
 krumo::enable();
 // Этот вывод будет показан
 krumo::classes();</pre>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ajaxblog.ru/184/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[Denwer, Xdebug , Notepad++] &#8211; полноценная среда разработки</title>
		<link>http://ajaxblog.ru/92</link>
		<comments>http://ajaxblog.ru/92#comments</comments>
		<pubDate>Thu, 31 Jul 2008 12:38:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Xdebug]]></category>
		<category><![CDATA[Инструмент разработчика]]></category>

		<guid isPermaLink="false">http://ajaxblog.ru/?p=92</guid>
		<description><![CDATA[Существует много хороших редакторов кода для PHP, я выбрал для себя Notepad++. Что-бы не разводить &#171;религиозные войны&#187; я перечислю те свойство редактора которые важны для меня: Скорость работы редактора Малый размер и возможность работы с флешки Подсветка текста и возможность &#8230; <a href="http://ajaxblog.ru/92">Далее, еще интереснее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img style="float: right;" title="Найдите ошибки в PHP-приложениях при помощи Xdebug" src="http://ajaxblog.ru/wp-content/uploads/2008/07/xdebug-logo.png" alt="Найдите ошибки в PHP-приложениях при помощи Xdebug" width="200" height="116" /><br />
Существует много хороших редакторов кода для PHP, я выбрал для себя <a href="http://notepad-plus.sourceforge.net/ru/site.htm">Notepad++</a>.<br />
Что-бы не разводить &laquo;религиозные войны&raquo; я перечислю те свойство редактора которые важны для меня:</p>
<ol>
<li>Скорость работы редактора</li>
<li>Малый размер и возможность работы с флешки</li>
<li> Подсветка текста и возможность сворачивания блоков, согласно синтаксису языка программирования</li>
<li>Авто-завершение набираемого слова</li>
<li>Одновременная работа с множеством документов</li>
<li>Одновременный просмотр нескольких документов</li>
<li>Динамическое изменение окон просмотра</li>
<li>Автоматическое определение состояния файла</li>
<li>Поддержка большого количества языков</li>
<li>Выделение скобок при редактировании текста</li>
</ol>
<p>Всем хорош редактор, вот только нету в нем полноценной отладки кода &#8211; думал я, и был не прав.</p>
<p>Оказываетесь для него есть плагин <a href="http://sourceforge.net/project/showfiles.php?group_id=189927&amp;package_id=236520" target="_blank"><strong>DBGP plugin</strong></a>, который превращает Notepad++ в полноценную php IDE.</p>
<p>Дальше расскажу как &laquo;подружить&raquo; между собой Denver + Xdebug + Notepad++</p>
<p><span id="more-92"></span></p>
<ol>
<li>Скачиваем <a href="http://www.denwer.ru/dis/Base/latest?from=index">Денвер</a> и устанавливаем у себя на компьютере, все просто. Для тех кто это делает первый раз, <a href="http://www.denwer.ru/base.html">инструкция</a>.</li>
<li>Скачиваем <a href="http://notepad-plus.sourceforge.net/ru/site.htm">Notepad++</a> и инсталлируем его.</li>
<li>Запускаем Денвер в браузере набираем <em>http://localhost/Tests/PHP5/index.php5</em> и смотрим версию php, у меня 5.2.4</li>
<li>Скачиваем <a href="http://pecl4win.php.net/ext.php/php_xdebug.dll">Xdebug</a>, обратите внимание нужно скачать dll нужной версии под конкретную версию php</li>
<li>Скаченую dll помещаем в папку <strong>путь</strong>\usr\local\php5\ext\, где <strong>путь</strong> (у меня <em>C:\WebServers</em>) -диск и папка куда вы установили свой Денвер</li>
<li>В файле <strong>путь</strong>\usr\local\php5\php.ini дописываем следующие строчки
<pre>
extension=php_xdebug.dll

zend_extension_ts = C:\WebServers\usr\local\php5\ext\php_xdebug.dll 

xdebug.remote_enable = On
xdebug.remote_autostart = On
xdebug.auto_trace = On
xdebug.remote_host = 127.0.0.1
xdebug.remote_enable = 1
xdebug.remote_handler = dbgp
xdebug.remote_mode=req
xdebug.idekey=default

xdebug.profiler_enable  = 1
xdebug.profiler_output_dir = C:\T\xdebug_prof\</pre>
<p>Обратите внимание, что  <em>C:\WebServers</em> &#8211; нужно заменить на вашпуть, а<br />
<em>C:\tmp\xdebug_prof\</em> &#8211; на папку где будет хранитьса ваши профайлы.<br />
<strong><br />
Замечание:</strong> в название путе лучше отказаться от использование не латинских букв и спецсимволов.</li>
<li>Перезагружаем Денвер, в браузере набираем http://localhost/Tests/PHP5/index.php5 и смотрим<br />
<img class="alignnone size-full wp-image-94" title="zend-with-xdebug" src="http://ajaxblog.ru/wp-content/uploads/2008/07/zend-with-xdebug.gif" alt="" width="490" height="80" /><br />
<img class="alignnone size-full wp-image-95" title="apache-xdebug" src="http://ajaxblog.ru/wp-content/uploads/2008/07/apache-xdebug.gif" alt="" width="315" height="370" /><br />
если вы это увидели. то вы все сделали правильно, если нет, еще раз перечитайте пункты выше.</li>
<li>Практически вы уже получили сильный инструмент в своей работе программиста.<br />
<img class="alignnone size-full wp-image-96" title="deep" src="http://ajaxblog.ru/wp-content/uploads/2008/07/deep.jpg" alt="" width="485" height="220" /><br />
Вот очень хорошая статья <a href="http://www.ibm.com/developerworks/ru/library/os-php-xdebug/index.html">&laquo;Найдите ошибки в PHP-приложениях при помощи Xdebug&raquo;</a>, о том как это расширение увеличивает ваш возможности поиска ошибок.<br />
Но наша цель IDE &#8211; продолжаем идти к ней&#8230;</li>
<li>Скачиваем <a href="http://sourceforge.net/project/showfiles.php?group_id=189927&amp;package_id=236520" target="_blank"><strong>DBGP plugin</strong></a> и устанавливаем его в папочку <em>C:\Program Files\Notepad++\plugins\</em> (ну или куда вы установили Notepad++)<br />
<img class="alignnone size-full wp-image-97" title="dbgpplugin-notepad" src="http://ajaxblog.ru/wp-content/uploads/2008/07/dbgpplugin-notepad.gif" alt="" width="362" height="426" /></li>
<li>Залускаем Notepadd++, заходим Дополнение&gt;&gt;DBGp&gt;&gt;Config<br />
<img class="alignnone size-full wp-image-98" title="dbgp-configuration" src="http://ajaxblog.ru/wp-content/uploads/2008/07/dbgp-configuration.gif" alt="" width="500" height="436" /><br />
<strong>Замечание</strong>: после home должна идти имя папки, где лежат скрипты которые вы собираетесь дебажить</li>
<li>После этого вроде вроде все должно работать, но у меня так и неполучилось стартовать debug сессию. Но не беда нас выручить плагин для ФФ -<a href="https://addons.mozilla.org/ru/firefox/addon/3960">Xdebug Helper</a>. Заходим по сылочки и устанавливаем в своем браузере.<br />
<img class="alignnone size-full wp-image-99" title="xdebug-helper" src="http://ajaxblog.ru/wp-content/uploads/2008/07/xdebug-helper.png" alt="" width="165" height="138" /></li>
<li>Ну вроде и все. Как все это работаем:
<ul>
<li>открываем файл со скриптом в Notepad++</li>
<li>ставим точку остановки</li>
<li>запускаем браузер с url &#8211; нашего проекта</li>
<li>активизируем Xdebug session &#8211; кликом по иконки (если она не активизирована)<br />
<strong>Замечание:</strong> после активизации сессии, нужно перегрузить страничку (F5)</li>
<li>Вываливаемся в Notepad++ и начинаем пошагово дебажить код <img src='http://ajaxblog.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p><img class="alignnone size-full wp-image-100" title="xdebug-dbgp-notepad" src="http://ajaxblog.ru/wp-content/uploads/2008/07/xdebug-dbgp-notepad.gif" alt="" width="449" height="348" /></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://ajaxblog.ru/92/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Отладка PHP средствами FirePHP</title>
		<link>http://ajaxblog.ru/71</link>
		<comments>http://ajaxblog.ru/71#comments</comments>
		<pubDate>Tue, 08 Jul 2008 06:24:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Инструмент разработчика]]></category>

		<guid isPermaLink="false">http://ajaxblog.ru/?p=71</guid>
		<description><![CDATA[Все хорошо знают плагин для Firefox &#8211; Firebug. Но мало кто знает про другой не менее интересный плагин &#8211; FirePHP. Я постараюсь исправить этот недостаток. Что для успешной работы нужно: PHP: 5 Firefox: 2, 3 Firebug: 1.05, 1.1, 1.2 FirePHP &#8230; <a href="http://ajaxblog.ru/71">Далее, еще интереснее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img style="margin: 5px; float: left;" title="firephp" src="http://ajaxblog.ru/wp-content/uploads/2008/07/firephp.gif" alt="firephp" width="200" height="150" />Все хорошо знают плагин для Firefox &#8211; Firebug. Но мало кто знает про другой не менее интересный плагин &#8211; <a href="http://www.firephp.org/">FirePHP</a>. Я постараюсь исправить этот недостаток.</p>
<p>Что для успешной работы нужно:</p>
<ul style="margin-left: 220px;">
<li><a href="http://www.php.net/" target="_blank">PHP</a>:     5</li>
<li><a href="http://www.mozilla.com/en-US/firefox/?from=getfirefox" target="_blank">Firefox</a>:     2, 3</li>
<li><a href="http://www.getfirebug.com/" target="_blank">Firebug</a>:     1.05, 1.1, 1.2</li>
</ul>
<p><span id="more-71"></span></p>
<p>FirePHP позволяет выводить информацию в консоль Firebug непосредственно из PHP. Делается это довольно просто:</p>
<pre class="prettyprint">require('FirePHP.class.php');
$firephp -&gt; fb('Log message'  ,FirePHP::LOG);
$firephp -&gt; fb('Info message' ,FirePHP::INFO);
$firephp -&gt; fb('Warn message' ,FirePHP::WARN);
$firephp -&gt; fb('Error message',FirePHP::ERROR);
$firephp -&gt; fb(apache_request_headers(),'RequestHeaders',FirePHP::DUMP);</pre>
<p>Кроме того в Firebug можно передавать произвольные структуры данных и исключения. В последнем случае получим не только сам объект исключения, но и содержимое стека. Возможностей плагина достаточно много, почитайте <a href="http://www.firephp.org/Wiki/Reference/Fb">документацию</a>.</p>
<p>Преимущество такой отладки в том, что данные передаются не в теле страницы, а в заголовках. Это значит, что во-первых, страница не замусориваетса всяческими echo`ми и var_dump`ами, а во вторых, можно без проблем отлаживать AJAX-вызовы.</p>
<p><img src="http://ajaxblog.ru/wp-content/uploads/2008/07/firephp-sample.png" alt="" width="422" height="457" /></p>
<p>И &laquo;на сладкое&raquo;, для поклонников фреймворка CodeIgnitr, для него создано специальное дополнение <a href="http://codeigniter.com/wiki/Fire_Ignition/">Fire Ignition</a>. Которое позволяет объединить вместе: CodeIgnitr, Firebug, FirePHP и PHP 5.</p>
<p>Удачного кодинга.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxblog.ru/71/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

