﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 <meta name="generator" content="Adobe RoboHelp 8">
<title>PHP Version Support</title>
<link rel="StyleSheet" href="default.css" type="text/css">
<style type="text/css">
<!--
body { border-left-style:None;
border-right-style:None;
border-bottom-style:None;
background-color:Transparent;
border-top-style:None; }
-->
</style>
<style type="text/css">
<!--
body { border-left-style:None;
border-right-style:None;
border-bottom-style:None;
background-color:Transparent;
border-top-style:None; }
-->
</style>
<script type="text/javascript" language="JavaScript">
//<![CDATA[
function reDo() {
  if (innerWidth != origWidth || innerHeight != origHeight)
     location.reload();
}
if ((parseInt(navigator.appVersion) == 4) && (navigator.appName == "Netscape")) {
	origWidth = innerWidth;
	origHeight = innerHeight;
	onresize = reDo;
}
onerror = null; 
//]]>
</script>
<style type="text/css">
<!--
div.WebHelpPopupMenu { position:absolute;
left:0px;
top:0px;
z-index:4;
visibility:hidden; }
p.WebHelpNavBar { text-align:right; }
-->
</style>
<script type="text/javascript" language="javascript1.2" src="whmsg.js"></script>
<script type="text/javascript" language="javascript" src="whver.js"></script>
<script type="text/javascript" language="javascript1.2" src="whproxy.js"></script>
<script type="text/javascript" language="javascript1.2" src="whutils.js"></script>
<script type="text/javascript" language="javascript1.2" src="whlang.js"></script>
<script type="text/javascript" language="javascript1.2" src="whtopic.js"></script>
<script type="text/javascript" language="javascript1.2">//<![CDATA[
<!--
if (window.gbWhTopic)
{
	var strUrl = document.location.href;
	var bc = 0;
	var n = strUrl.toLowerCase().indexOf("bc-");
	if(n != -1)
	{
		document.location.href = strUrl.substring(0, n);
		bc = strUrl.substring(n+3);
	}

	if (window.setRelStartPage)
	{
	addTocInfo("Concepts\nPHP Version Support");
addAvenueInfo("Concepts","","code_assist_concept.htm");

	}

	document.write("<p style=\"text-align:left\"> ");
AddMasterBreadcrumbs("ide_help.htm", "", "&gt;", "Home", "pdt_table_of_contents.htm");
document.write("<a href=\"concepts.htm\">Concepts<\/a> &gt; PHP Version Support<\/p>");


	if (window.setRelStartPage)
	{
	setRelStartPage("ide_help.htm");

		autoSync(0);
		sendSyncInfo();
		sendAveInfoOut();
	}

}
else
	if (window.gbIE4)
		document.location.reload();
//-->
//]]></script>
</head>

<body leftmargin="5" topmargin="5" rightmargin="5" bottommargin="5"><script type="text/javascript" language="javascript1.2">//<![CDATA[
<!--
if (window.writeIntopicBar)
	writeIntopicBar(4);
//-->
//]]></script>
<div style="width: 100%; position: relative;" id="header">
	
	
 <p align="right"><a 
	 title="Documentation Survey" href="http://spreadsheets.google.com/viewform?formkey=dC1scEswTjFia2tDQ3Y5TVJBbkNQcWc6MQ">Documentation 
	 Survey</a> 
	 | <a href="javascript:crlf=&quot;&quot;;h=location.href;t=document.title;e = &quot;&quot; + (window.getSelection ? window.getSelection() : document.getSelection ? document.getSelection() : document.selection.createRange().text); if (e!=null) location=&quot;mailto:documentation@zend.com&quot; + &quot;?Subject= Feedback on PDT for page &quot; + escape(t) + &quot;&amp;Body=&quot; + escape(e).replace(/ /g, &quot;+&quot;) + crlf + &quot; &quot;; void 0"><span 
	 style="background-color: #ffffff;">Submit Documentation</span><span 
	 style="background-color: #ffffff;"> Feedback</span></a><span 
	 style="background-color: #ffffff;"></span><span style="background-color: #ffffff;"> 
	 </span><span style="background-color: #ffffff;">| 
	 </span><span 
	 style="background-color: #ffffff;"><a title="View Latest Version and Get PDF Online" 
											 href="http://www.zend.com/en/resources/zend-documentation/" 
											 target="_blank">View Latest 
	 Version and Get PDF Online</a></span></p>
</div>


<h1>PHP Version Support 
 </h1>
<p>PDT supports 
 PHP versions 4, 5.1/5.2 and 5.3.</p>
<p>&#160;</p>
<p>PHP version settings affect:</p>
<ul type="square">
	<li><p>The elements displayed in the <a href="php_functions_view.htm">PHP 
	 Functions view</a>.</p></li>
	<li><p>The options available in <a href="code_assist_concept.htm">Content 
	 Assist</a>.</p></li>
	<li><p>Debugging 
	 functionality.</p></li>
</ul>
<p>&#160;</p>
<p>PHP version settings can be configured from the following places:</p>
<ul type="square">
	<li><p>PHP Executables can be added and edited from the <a href="php_executables.htm">PHP 
	 Executables Preferences</a> page.</p></li>
	<li><p>The default PHP executable used for new projects can be set 
	 in the <a href="php_interpreter.htm">PHP Interpreter Preferences</a> 
	 page. Through this page you can also set the PHP version for specific 
	 projects.<br>
	In addition, you can select which PHP Version should be used when creating 
	 a new PHP project by marking the Enable Project Settings checkbox 
	 in the New PHP Project dialog.</p></li>
</ul>

<p class="picture"><img src="new_php_project_pdt.png" alt="New Project Settings" title="New Project Settings" style="border: none;" width="400" height="480" border="0"></p>
<ul type="square">
	<li><p>The default PHP executable used with the debugger can be set 
	 in the <a href="debug.htm">Debugging Preferences</a> page, accessed 
	 from <span style="font-weight: bold;"><b>Window | Preferences | PHP | 
	 Debug</b></span>. Through this page you can also set the PHP executable 
	 used to debug specific projects.<br>
	In addition, you can also configure the PHP executable used for each 
	 Debug &#160;session 
	 in the Debug configuration 
	 screen.</p></li>
</ul>



<p class="picture"><img src="debug_session_pdt.png" alt="New Debug Configuration" title="New Debug Configuration" style="border: none;" width="589" height="490" border="0"></p>
<p class="Note">Note:</p>
<p class="NoteText">In order to minimize errors, the PHP Executable used 
 for debugging 
 should match the PHP version used for the project.</p>
<table cellspacing="0" width="100%">
	<col style="width: 7.093%;">
	<col style="width: 92.907%;">
	<tr style="vertical-align: top;">
		<td style="width: 7.093%; padding-right: 10px; padding-left: 10px;"><p 
			 style="font-size: 6pt;">&#160;</p></td>
		<td style="width: 92.907%; padding-right: 10px; padding-left: 10px;"><p>&#160;</p></td>
	</tr>
	<tr style="vertical-align: top;">
		<td style="width: 7.093%; padding-right: 10px; padding-left: 10px;"><p 
			 style="font-size: 6pt;"><img src="link_icon.png" alt="link_icon.png" style="border: none;" width="32" height="40" border="0"></p></td>
		<td style="width: 92.907%; padding-right: 10px; padding-left: 10px;"><p 
			 style="font-weight: bold;">Related Links:</p>
		<p><a href="php_interpreter.htm">PHP Interpreter Preferences</a> 
		 </p>
		<p><a href="php_executables.htm">PHP Executables Preferences</a> 
		 </p>
		<p><a href="debugging.htm">Debugging</a> </p></td>
	</tr>
	<tr style="vertical-align: top;">
		<td style="width: 7.093%; padding-right: 10px; padding-left: 10px;"><p 
			 style="font-size: 6pt;">&#160;</p></td>
		<td style="width: 92.907%; padding-right: 10px; padding-left: 10px;"><p>&#160;</p></td>
	</tr>
</table>
<div style="width: 100%; position: relative;" id="footer">
	
 <p style="text-decoration: underline; " 
										 align="center">PHP Development 
	 Tools</p>
	
	
</div>
<script type="text/javascript" language="javascript1.2">//<![CDATA[
<!--
if (window.writeIntopicBar)
	writeIntopicBar(0);

highlightSearch();
//-->
//]]></script>
</body>
</html>
