<?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>&#60;?blog &#187; phpversion()</title>
	<atom:link href="http://blog.visionsoftware.pl/tag/phpversion/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.visionsoftware.pl</link>
	<description>...nie tylko o programowaniu</description>
	<lastBuildDate>Sun, 23 Mar 2014 19:23:43 +0000</lastBuildDate>
	<language>pl-PL</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>Jak sprawdzić i porównać wersje PHP?</title>
		<link>http://blog.visionsoftware.pl/programowanie-php/jak-sprawdzic-i-porownac-wersje-php.html</link>
		<comments>http://blog.visionsoftware.pl/programowanie-php/jak-sprawdzic-i-porownac-wersje-php.html#comments</comments>
		<pubDate>Tue, 10 Jan 2012 22:00:21 +0000</pubDate>
		<dc:creator><![CDATA[Marcin Fliszta]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[phpversion()]]></category>
		<category><![CDATA[PHP_VERSION]]></category>
		<category><![CDATA[version_compare()]]></category>
		<category><![CDATA[wersje PHP]]></category>

		<guid isPermaLink="false">http://blog.visionsoftware.pl/?p=474</guid>
		<description><![CDATA[Podczas pisania kodu PHP możemy zastosować elementy języka, które zostały wprowadzone w konkretnej wersji. Przez to, nasza aplikacja może nie działać w pełni poprawnie lub nawet w ogóle na serwerze ze starszą wersją PHP. W jaki sposób sprawdzić, czy środowisko jest odpowiednie dla naszego skryptu? Opisane poniżej metody są często stosowane podczas instalacji popularnych systemów CMS, forum itd. Podczas tego procesu sprawdzana jest wersja PHP i w przypadku wykrycia zbyt starej, proces  jest przerywany. Warto [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Podczas pisania kodu PHP możemy zastosować elementy języka, które zostały wprowadzone w konkretnej wersji. Przez to, nasza aplikacja może nie działać w pełni poprawnie lub nawet w ogóle na serwerze ze starszą wersją PHP. W jaki sposób sprawdzić, czy środowisko jest odpowiednie dla naszego skryptu?<span id="more-474"></span></p>
<p>Opisane poniżej metody są często stosowane podczas instalacji popularnych systemów CMS, forum itd. Podczas tego procesu sprawdzana jest wersja PHP i w przypadku wykrycia zbyt starej, proces  jest przerywany. Warto w ten sposób zabezpieczyć własne skrypty zwłaszcza, gdy nie oferują one pełnej zgodności wstecz i są rozpowszechniane publicznie.</p>
<h3>Metody standardowe</h3>
<p>Najprostszym sposobem na sprawdzenie wersji PHP jest wywołanie funkcji <code>phpinfo()</code>. Jej wynikiem jest jednak ogromna liczba danych dotyczących konfiguracji całego serwera. Jeśli natomiast mamy dostęp do wywołania poleceń shell, to możemy skorzystać z jednej z dwóch poniższych możliwości:</p>
<pre class="brush: php; light: true; title: ; notranslate">
php -v
php -–version
</pre>
<p>Oczywiście nie jest to dobre rozwianie, gdyż nie zawsze jest taka możliwość. Po pierwsze musimy mieć dostęp do funkcji <code>shell_exec()</code> lub <code>exec()</code> a z tym może być kłopot. Po drugie do sprawdzania wersji PHP przyda się bardziej wyrafinowana metoda. Możemy to zrealizować na dwa sposoby: za pośrednictwem odpowiedniej funkcji oraz predefiniowanych stałych.</p>
<h3>Funkcja <code>phpversion()</code></h3>
<p>Zwraca ona po prostu dostępną na serwerze wersję PHP. W przypadku podania jako parametr wywołania nazwy konkretnego rozszerzenia, efektem wywołania będzie jego &#8222;aktualny numerek&#8221;. Może to wyglądać następująco:</p>
<pre class="brush: php; title: ; notranslate">
echo &quot;Wersja PHP: &quot;.phpversion();
echo &quot;Wersja PDO MySQL: &quot;.phpversion('pdo_mysql');
</pre>
<p>Efektem działania skryptu może być:</p>
<pre class="brush: php; light: true; title: ; notranslate">
Wersja PHP: 5.3.4
Wersja PDO MySQL: 1.0.2
</pre>
<h3>Stałe PHP_VERSION_*</h3>
<p>Innym sposobem na określenie wersji PHP jest skorzystanie ze zmiennych predefiniowanych. Jest ich kilka, wszystkie poza pierwszą dostępne są od PHP 5.2.7 wzwyż:</p>
<ul>
<li><code>PHP_VERSION</code> &#8211; (string) bieżąca wersja PHP przedstawiona w formacie GłównaWersja.MniejszaWersja.Wydanie[extra], np. 5.2.0[RC2]</li>
<li><code>PHP_MAJOR_VERSION</code> &#8211; (integer) określa &#8222;główną wersję&#8221; (pierwsza liczba)</li>
<li><code>PHP_MINOR_VERSION</code> &#8211; (integer) określa &#8222;mniejszą wersję&#8221; (druga liczba)</li>
<li><code>PHP_RELEASE_VERSION</code> &#8211; (integer) określa wydanie (trzecia liczba)</li>
<li><code>PHP_VERSION_ID</code> &#8211; (integer) pełna wersja przedstawiana jako liczba, przydatna do porównywania, np. 50304 (czyli 5.3.4)</li>
<li><code>PHP_EXTRA_VERSION</code> &#8211; (string) dodatkowe określenie wydania np. dev lub RC1</li>
</ul>
<p>Wywołanie poszczególnych zmiennych może wyglądać następująco:</p>
<pre class="brush: php; title: ; notranslate">
echo &quot;Wersja PHP: &quot; . PHP_VERSION . &quot;&lt;br /&gt;&quot;;
echo &quot;- głowna wersja: &quot; . PHP_MAJOR_VERSION . &quot;&lt;br /&gt;&quot;;
echo &quot;- mniejsza wersja: &quot; . PHP_MINOR_VERSION . &quot;&lt;br /&gt;&quot;;
echo &quot;- wydanie: &quot; . PHP_RELEASE_VERSION . &quot;&lt;br /&gt;&quot;;
echo &quot;Wersja PHP jako liczba: &quot; . PHP_VERSION_ID . &quot;&lt;br /&gt;&quot;;
echo &quot;Określenie wersji: &quot; . PHP_EXTRA_VERSION . &quot;&lt;br /&gt;&quot;;
</pre>
<pre class="brush: php; light: true; title: ; notranslate">
Wersja PHP: 5.3.4
- główna wersja: 5
- mniejsza wersja: 3
- wydanie: 4
Wersja PHP jako liczba: 50304
Określenie wersji:
</pre>
<p>Jeśli korzystamy z wersji PHP starszej niż 5.2.7, a chcemy mieć dostępne wszystkie powyższe zmienne, możemy je sami zdefiniować (cytując dokumentację):</p>
<pre class="brush: php; title: ; notranslate">
if (!defined('PHP_VERSION_ID')) {
    $version = explode('.', PHP_VERSION);

    define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
}

if (PHP_VERSION_ID &lt; 50207) {
    define('PHP_MAJOR_VERSION',   $version[0]);
    define('PHP_MINOR_VERSION',   $version[1]);
    define('PHP_RELEASE_VERSION', $version[2]);

    // itd.
}

</pre>
<h3>Porównywanie wersji PHP przy pomocy <code>version_compare()</code></h3>
<p>Oczywiście stosując przedstawione metody, możemy porównać wersję PHP tak, jak to zostało już pokazane w powyższym przykładzie przy pomocy instrukcji <code>if</code> oraz zmiennej  <code>PHP_VERSION_ID</code>. Możemy to także zrobić, korzystając ze specjalnie stworzonej w tym celu funkcji <code>version_compare()</code>.</p>
<p>Może ona działać na dwa sposoby. W obu przyjmuje jako dwa pierwsze parametry wersje PHP do porównania w formacie <code>X.X.X</code>. Gdy podamy tylko tyle, zwróci ona -1 w przypadku, gdy pierwsza podana wersja jest niższa od drugiej, 0 jeśli są takie same lub 1 gdy druga jest mniejsza.</p>
<p>Funkcja może także przyjąć trzeci, opcjonalny parametr, określający rodzaj porównania: <code><=</code></code>, <code>le</code>, <code>></code>, <code>gt</code>, <code>>=</code>, <code>ge</code>, <code>==</code>, <code>=</code>, <code>eq</code>, <code>!=</code>, <code><></code>, <code>ne</code>. W takim przypadku zwróci ona <code>true</code> gdy warunek jest spełniony lub, w przeciwnym wypadku, <code>false</code>.<br />
Sposób użycia został przedstawiony na poniższym przykładzie:</p>
<pre class="brush: php; title: ; notranslate">
if (version_compare(PHP_VERSION, '5.0.0') &gt;= 0) {
    echo 'Używasz PHP5. Twoja wersja to' . PHP_VERSION;
}

if (version_compare(PHP_VERSION, '5.3.8', '&lt;=')) {
    echo 'Twoja wersja PHP nie jest najnowsza! Używasz :' . PHP_VERSION;
}
</pre>
<p><em>Jeśli ostatni przykład jest nieaktualny, proszę zwrócić uwagę na datę powstania artykułu</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.visionsoftware.pl/programowanie-php/jak-sprawdzic-i-porownac-wersje-php.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
