<!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>File Network</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">
<!--
h1.whs1 { color:#00709e; }
div.whs2 { float:none; }
img_whs3 { border:none; width:436px; height:281px; float:none; border-style:none; }
table.whs4 { x-cell-content-align:top; width:100%; border-spacing:0px; }
col.whs5 { width:7.093%; }
col.whs6 { width:92.907%; }
tr.whs7 { x-cell-content-align:top; }
td.whs8 { width:7.093%; padding-right:10px; padding-left:10px; border-bottom-style:none; border-right-style:none; border-left-style:none; border-top-style:none; }
p.whs9 { font-size:6pt; }
td.whs10 { width:92.907%; padding-right:10px; padding-left:10px; border-bottom-style:none; border-top-style:none; border-right-style:none; }
p.whs11 { font-weight:bold; }
td.whs12 { width:7.093%; padding-right:10px; padding-left:10px; border-left-style:none; border-right-style:none; border-bottom-style:none; }
img_whs13 { border:none; width:28px; height:33px; float:none; border-style:none; }
td.whs14 { width:92.907%; padding-right:10px; padding-left:10px; border-right-style:none; border-bottom-style:none; }
ol.whs15 { list-style:decimal; }
p.whs16 { font-weight:normal; }
td.whs17 { width:100%; padding-right:10px; padding-left:10px; border-bottom-style:none; border-right-style:none; border-left-style:none; }
table.whs18 { x-cell-content-align:top; width:100%; x-condition:Online; border-spacing:0px; }
tr.whs19 { x-cell-content-align:top; x-condition:Online; }
td.whs20 { width:7.093%; padding-right:10px; padding-left:10px; border-right-style:none; border-left-style:none; border-bottom-style:none; border-top-style:none; x-condition:Online; }
td.whs21 { width:92.907%; padding-right:10px; padding-left:10px; border-bottom-style:none; border-right-style:none; border-top-style:none; x-condition:Online; }
td.whs22 { width:7.093%; padding-right:10px; padding-left:10px; border-left-style:none; border-right-style:none; border-bottom-style:none; x-condition:Online; }
img_whs23 { border:none; width:28px; height:18px; float:none; x-condition:Online; border-style:none; }
td.whs24 { width:92.907%; padding-right:10px; padding-left:10px; border-right-style:none; border-bottom-style:none; x-condition:Online; }
p.whs25 { x-condition:Online; }
div.whs26 { width:100%; }
p.whs27 { text-align:right; x-condition:Product, Online; }
p.whs28 { text-align:right; x-condition:Online; }
p.whs29 { 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)
	{
	addAvenueInfo("Zend Studio for Eclipse Help","Editor.htm","Formatter.htm");

	}


	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 class="whs1">File Network 
 Preferences</h1>
<div class="whs2">
</div>
<p>The File Network Preferences 
 page allows you to enable/disable the File Network option.</p>
<p>The File Network stores a node for each file. Each node has 2 arrays: 
 the first array stores references to all files that are included by the 
 file (using include/require statements), and the second array stores references 
 to all files in which the file is included. These arrays are used for 
 Refactoring and Organize Include operations. Disabling this option reduces 
 the amount of memory used by PDT.</p>
<p>&nbsp;</p>
<p>The File Network 
 Preferences page is accessed from Window | Preferences | PHP | File Network.</p>
<p class=picture><img src="file_network_preference.png" x-maintain-ratio="TRUE" width="436px" height="281px" border="0" class="img_whs3"></p>
<table x-use-null-cells cellspacing="0" width="100%" class="whs4">
<col class="whs5">
<col class="whs6">

<tr valign="top" class="whs7">
<td colspan="1" rowspan="1" width="7.093%" class="whs8">
<p class="whs9">&nbsp;</td>
<td colspan="1" rowspan="1" width="92.907%" class="whs10">
<p class="whs11">&nbsp;</td></tr>
<tr valign="top" class="whs7">
<td width="7.093%" class="whs12">
<p class="whs9"><img src="ref_icon.png" x-maintain-ratio="TRUE" alt="Instructions on how to complete a procedure" width="28px" height="33px" border="0" class="img_whs13"></td>
<td width="92.907%" class="whs14">
<p class="whs11">To enable/disable the File Network for all 
 projects:</p>
<ol type="1" class="whs15">
	<li style="margin-left: -20px;  font-weight: normal; " class=p><p class="whs16">Mark/unmark 
 the Enable File Network checkbox.</p></li>
	<li style="margin-left: -20px;  font-weight: normal; " class=p><p class="whs16">Click 
 Apply.</p></li>
	<li style="margin-left: -20px;  font-weight: normal; " class=p><p class="whs16">A 
 prompt will appear stating that projects will be rebuilt.<br>
	Click Yes to rebuild all projects.<br>
	-Or- Click No for a rebuild to be performed only when PDT 
 is restarted.<br>
	-Or- Click Cancel to cancel the operation.</p></li>
</ol></td></tr>
<tr valign="top" class="whs7">
<td rowspan="1" colspan="2" width="100%" class="whs17">
<p>&nbsp;</td>
</tr>
</table>
<p class=Note>Note:</p>
<p class=NoteText>If you disable the File Network, you will not be able 
 to perform Refactor/Organize Includes operations. To re-enable these options, 
 re-enable the File Network.</p>
<table x-use-null-cells cellspacing="0" width="100%" class="whs4">
<col class="whs5">
<col class="whs6">

<tr valign="top" class="whs7">
<td colspan="1" rowspan="1" width="7.093%" class="whs8">
<p class="whs9">&nbsp;</td>
<td colspan="1" rowspan="1" width="92.907%" class="whs10">
<p class="whs11">&nbsp;</td></tr>
<tr valign="top" class="whs7">
<td width="7.093%" class="whs12">
<p class="whs9"><img src="ref_icon.png" x-maintain-ratio="TRUE" alt="Instructions on how to complete a procedure" width="28px" height="33px" border="0" class="img_whs13"></td>
<td width="92.907%" class="whs14">
<p class="whs11">To enable/disable the File Network for a 
 specific project only:</p>
<ol type="1" class="whs15">
	<li style="margin-left: -20px;" class=p><p>Select the link labelled 
 &quot;Configure Project Specific Settings&quot;.</p></li>
	<li style="margin-left: -20px;" class=p><p>Select the required project 
 from the list.<br>
	A File Network 
 Properties dialog will appear.</p></li>
	<li style="margin-left: -20px;" class=p><p>Mark/unmark the Enable file 
 network checkbox.<br>
	A prompt dialog will appear stating that a rebuild of the project must 
 occur for the settings to take effect.</p></li>
	<li style="margin-left: -20px;" class=p><p>Click Yes to rebuild the 
 project.<br>
	-Or- Click No for a rebuild to be performed only when PDT 
 is restarted.<br>
	-Or- Click Cancel to cancel the operation.</p></li>
</ol></td></tr>
<tr valign="top" class="whs7">
<td rowspan="1" colspan="2" width="100%" class="whs17">
<p>&nbsp;</td>
</tr>
</table>
<table x-use-null-cells cellspacing="0" width="100%" class="whs18">
<col class="whs5">
<col class="whs6">

<tr valign="top" class="whs19">
<td colspan="1" rowspan="1" width="7.093%" class="whs20">
<p class="whs9">&nbsp;</td>
<td colspan="1" rowspan="1" width="92.907%" class="whs21">
<p>&nbsp;</td></tr>
<tr valign="top" class="whs19">
<td width="7.093%" class="whs22">
<p class="whs9"><img src="link_icon.png" x-maintain-ratio="TRUE" alt="Related Links" width="28px" height="18px" border="0" class="img_whs23"></td>
<td width="92.907%" class="whs24">
<p class="whs11">Related Links:</p>
<p class="whs25"><a href="Preferences.htm">PHP Preferences</a></p>
<p class="whs25">Refactoring</p>
<p class="whs25">Organizing 
 Includes</td></tr>
<tr valign="top" class="whs19">
<td colspan="1" rowspan="1" width="7.093%" class="whs22">
<p class="whs9">&nbsp;</td>
<td colspan="1" rowspan="1" width="92.907%" class="whs24">
<p>&nbsp;</td></tr>
</table>
<div placeholder id="footer" class="whs26">
 <p align="right" class="whs27"><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="whs28"><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="whs29">PHP Development 
 Tools</p>
 </div>
<script type="text/javascript" language="javascript1.2">
<!--
highlightSearch();
if (window.writeIntopicBar)
	writeIntopicBar(0);
if(0)
{

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