﻿<!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 Manual Integration</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 Manual Integration");
addAvenueInfo("Concepts","show_type_hierarchy.htm","real_time_error_detection.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 Manual Integration<\/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 Manual Integration 
 </h1>
<p>PDT can 
 integrate with PHP Manual sites in order to get the most up-to-date PHP 
 information.</p>
<p>The PHP Functions view lists all PHP functions contained within the 
 PHP manuals, and can be used in order to easily add these functions into 
 your scripts. To add a function to your code, simply place the cursor 
 in the required position in the Editor and double-click the required element 
 from the list.</p>
<p>&#160;</p>
<p class="picture"><img src="php_function_add.png" alt="Adding code from the PHP Functions View" title="Adding code from the PHP Functions View" style="border: none;" width="521" height="116" border="0"></p>
<p>You can open a PHP manual site with an explanation about most of the 
 functions on the list by right-clicking a function in PHP Functions view 
 and selecting <span style="font-weight: bold;"><b>Open Manual</b></span>.</p>
<p>A new browser window will open with an explanation of the function from 
 the PHP Manual site.</p>
<p class="picture"><img src="phpmanual_integration.png" alt="PHP Manual" title="PHP Manual" style="border: none;" width="488" height="228" border="0"></p>
<p class="Note">Note:</p>
<p class="NoteText">Some functions will not have a description assigned 
 to them in the PHP Manual site. In this case, a browser will open with 
 a 'Cannot find server' error message.</p>
<p>PHP Manual sites can be added and edited from the <a href="php_manual.htm">PHP 
 Manual Preferences</a> page.</p>
<p>&#160;</p>
<p>In addition, The PHP Functions view can be used in order to easily add 
 functions into your scripts. To add a function to your code, simply place 
 the cursor in the required position in the Editor and double-click the 
 required element from the list.</p>
<p>&#160;</p>
<p>To open a PHP Manual, right-click in the Editor and click <span style="font-weight: bold;"><b>Open 
 PHP Manual</b></span> -or- press <span style="font-weight: bold;"><b>Shift + 
 F2</b></span>.</p>
<table cellspacing="0" width="100%">
	<col style="width: 7.093%;">
	<col style="width: 92.907%;">
	<tr valign="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 valign="top">
		<td style="width: 7.093%; padding-right: 10px; padding-left: 10px;"><p 
			 style="font-size: 6pt;"><img src="link_icon.png" style="border: none;" alt="link_icon.png" 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_manual.htm">PHP Manual Preferences</a> 
		 </p></td>
	</tr>
	<tr valign="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>
