<!doctype HTML public "-//W3C//DTD HTML 4.0 Frameset//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="Adobe RoboHelp - www.adobe.com">
<title>Configuration</title>
<link rel="stylesheet" href="default_ns.css"><script type="text/javascript" language="JavaScript" title="WebHelpSplitCss">
<!--
if (navigator.appName !="Netscape")
{   document.write("<link rel='stylesheet' href='default.css'>");}
//-->
</script>
<style>
<!--
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">
<!--
p.whs1 { text-align:center; }
img_whs2 { border:none; width:399px; height:301px; float:none; border-style:none; }
div.whs3 { width:100%; }
p.whs4 { text-align:right; x-condition:Product, Online; }
p.whs5 { text-align:right; x-condition:Online; }
p.whs6 { text-align:center; x-condition:PDT; text-decoration:underline; }
-->
</style><script type="text/javascript" language="JavaScript" title="WebHelpInlineScript">
<!--
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">
<!--
if (window.gbWhTopic)
{
	if (window.setRelStartPage)
	{
	
	}


	if(1)
	{
	
	}

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

		autoSync(1);
		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">
<!--
if (window.writeIntopicBar)
	writeIntopicBar(4);
//-->
</script>
<h1>Configuration</h1>
<p>&nbsp;</p>
<p align="center" class="whs1"><img src="iStock_000002463055XSmall.jpg" x-maintain-ratio="TRUE" width="399px" height="301px" border="0" class="img_whs2"></p>
<div placeholder id="footer" class="whs3">
 <p align="right" class="whs4"><span 
 style="background-color: #ffffff; x-condition: Online, Product;">V</span>iew 
 the Zend Product <a href="http://www.zend.com/en/resources/zend-documentation/zend-studio/zend-studio.htm" 
 style="color: #000000; x-condition: Product, Online;">Online Documentation</a> 
 for the most up-to-date information.</p>
 <p align="right" class="whs5"><span style="background-color: #ffffff;"><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 &quot; + escape(t) + &quot;&amp;Body=&quot; + escape(e).replace(/ /g, &quot;+&quot;) + crlf + &quot; &quot;; void 0" 
 style="x-condition: Online;">Submit Documentation Feedback</a></span></p>
 <p align="center" class="whs6">PHP Development 
 Tools</p>
 </div>
<script type="text/javascript" language="javascript1.2">
<!--
highlightSearch();
if (window.writeIntopicBar)
	writeIntopicBar(0);
if(0)
{

}
//-->
</script>
</body>
</html>
