Freak include issue!


Hey guys,



I have been working on some code and have struck a problem, I tried to make the code as easy as possible to edit at a later date.



The issue comes when I include a config file from a directory for a certain page, this config file decides which document related to the current page to display, the issue is that when I try to include the documents from the config file I just get white space and the script seems to die but with NO errors.



Am I missing something?



index.php



```
<?php

	@include($_SERVER['DOCUMENT_ROOT']."/internal/config/global.php");

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>">
<html xmlns="<http://www.w3.org/1999/xhtml>" xml:lang="en" lang="en">
<head>
<title>EZee Web Solutions</title>
<link rel="stylesheet" type="text/css" href="images/style.css" />
</head>
<body>

	<div id="main_wrapper">
	
		<div id="banner">
			
			<h1 class="title">Wolfet Tools</h1>
			
			<a style="border: none;" href="#"><img src="images/right.png" style="border: none; float: right;" alt="EZee Web Solutions" /></a>
			
		</div>
		
		<div id="sidebar">
			
			<?php
			
				get_module( "Members Panel" );
			
			?>
			
			<h3>Menu</h3>
				
			<ul>
				
				<li><a href="?">Home</a></li>
				<li><a href="#">Design</a></li>
				<li><a href="#">Programming</a></li>
				<li><a href="#">Portfolio</a></li>
				<li class="end"><a href="#">Contact</a></li>
				
			</ul>
			
		</div>
			
		<div id="banner_extension">
		
			
		
		</div>
			
			
			
		<div id="content">
			
			<?php
			
				if( !isset( $_GET['base'] ) ) {
					get_page("Home");
				}
				
				if( $_GET['base'] == "register" ) {
					get_page("Register");
				}
			
			?>
			
		</div>
		
		<div id="footer">
			
			
			
		</div>
	
	</div>

</body>
</html>
```

global.php



```
<?php

	function get_module( $module_name ) {
		$path = $_SERVER['DOCUMENT_ROOT'] . "/internal/modules/" . $module_name . "/config.php";
		if( !@include( $path ) ) {
			echo "<br /><span style=\"font-family: Sans-Serif; color: #ff0000;\"><p><b><u>FATAL ERROR:</u></b> There is an internal issue with the following module: <b>" . $module_name . "</b>.</p><p>Unfortuantely the path doesn't contain the required file: <b>" . $path . "</b>.</p></span><br />";
		}
	}
	
	function get_page( $page_name ) {
		$path = $_SERVER['DOCUMENT_ROOT'] . "/internal/pages/" . $page_name . "/config.php";
		if( !@include( $path ) ) {
			echo "<br /><span style=\"font-family: Sans-Serif; color: #ff0000;\"><p><b><u>FATAL ERROR:</u></b> There is an internal issue with the following page: <b>" . $page_name . "</b>.</p><p>Unfortuantely the path doesn't contain the required file: <b>" . $path . "</b>.</p></span><br />";
		}
	}

?>
```

config.php



```
<?php

	if( !isset( $_GET['page'] ) {
		include("form.php");
	}
	
	if( $_GET['page'] == "checkform" ) {
		include("validate.php");
	}

?>

<h1>Register</h1>
<p>Thankyou for signing up to use our tools. Please complete the following form in full. All fields marked with <font style="color: Red;">*</font> are required and <b>must</b> be filled in.</p>

<h3>Take your time</h3>
<p>Please take your time and know that this form is confidential and we will in no way share your details or use them in an inappropriate way.</p>
```

form.php



```
<h1>Register</h1>
<p>Thankyou for signing up to use our tools. Please complete the following form in full. All fields marked with <font style="color: Red;">*</font> are required and <b>must</b> be filled in.</p>

<h3>Take your time</h3>
<p>Please take your time and know that this form is confidential and we will in no way share your details or use them in an inappropriate way.</p>
```

Any help would be great, thanks.
> if( !@include( $path ) ) {
> 
> 


That part of the syntax is totally wrong. I don't think that an include is not meant to be in an if statement. Also replace the include with the require function which does the same thing but with error reporting. Also I would advice removing those @ symbols. So the above quote should be the following:



```
if(file_exists($path)) {
require( $path );
} else {
```
Hi Jan,


years ago John Hawkinson did a script that would invoke the place options on an already placed PDF, InDesign page or AI file, I think. Hope, I can find the old thread or the ExtendScript code. You could build on this. But be warned: Not all PDFs would show how many pages are inside. At least you cannot see this by scripting.


 


Ah. Found the extended script I did, based on John's original one:


 


 



```
// PlaceAgain-PlaceOptionsShowing-SELECTION.jsx
// Uwe Laubender

//DESCRIPTION:Select a placed image, PDF or InDesign document to replace it with itself getting options

/**
* @@@BUILDINFO@@@ PlaceAgain-PlaceOptionsShowing-SELECTION.jsx !Version! Fri Sep 09 2016 14:09:53 GMT+0200
*/

/*
	Posted in this thread at Adobe InDesign Forum:
	"Toggle pages of a linked Indesign document inside Indesign?"
	mmackinven | Sep 9, 2016
	https://forums.adobe.com/message/8993859#8993859
	
	You can either select the placed file directly or its container frame.
	Or, if its part of a group, the group itself.
	Or, if the container frame is pasted inside another object, that object.
	
*/

placeAgainSelection();

function placeAgainSelection()
{
	if(app.documents.length == 0){alert("ERROR"+"\r"+"No document is open."); return};
	if(app.selection.length != 1){alert("ERROR"+"\r"+"Select one single item containing a placed file."); return};

	// The placed object is selected:
	if
	(
		app.selection[0].constructor.name == "ImportedPage" || 
		app.selection[0].constructor.name == "PDF" ||
		app.selection[0].constructor.name == "EPS" ||
		app.selection[0].constructor.name == "Image" ||
		app.selection[0].constructor.name == "PICT" ||
		app.selection[0].constructor.name == "WMF"
	)
	{	
		var graphic = app.selection[0];
	};
	
	else if(app.selection[0].allGraphics.length == 0){return};
	
	// The container of the placed object is selected:
	else{var graphic = app.selection[0].allGraphics[0]};

	// Two important checks:
	// Case 1: Graphic was pasted on the page from e.g. PhotoShop:
	if(graphic.itemLink == null){alert("ERROR"+"\r"+"The graphic was pasted on the page. The original file cannot be found.");return};
	// Case 2: Link is not available, because placed graphic was renamed, removed or otherwise is not available:
	var file = File(graphic.itemLink.filePath);
	if(!file.exists){alert("ERROR"+"\r"+"\""+file.name+"\""+"\r"+"File cannot be found."); return};
	
	// If you cancel the place options dialog, no error will be thrown:
	try{
	graphic.place(file,true);
	}catch(e){};
};
```

 


 


**Important Note:**


The original thread from 2016 where I posted the script code did not make it to the new InDesign forum.


 


Because of that this thread where I mentioned my script is rendered useless:


[https://community.adobe.com/t5/indesign/swapping-pages-of-a-linked-file-indesign-file-without-replac...](https://community.adobe.com/t5/indesign/swapping-pages-of-a-linked-file-indesign-file-without-replacing-the-file-and-choosing-the-page/m-p/10403771?page=1)


 


This one as well, but there is also a link to a script by Roland Dreger that could be useful:


<https://community.adobe.com/t5/indesign/linked-ai-file-change-artboard/m-p/10444575?page=1>


 


Regards,  
Uwe Laubender


( ACP ) am rezolvat , multumesc , am "furat" sursa html si css din pluginul " enhanced user info panel "   o sa las mai jos si sursele pentru cei ce vor sa faca ceva de genul 
 


 forums  /  font  /  topics  /  postcontainer
 


{{$idfield = $comment::$databasecolumnid;}}
{{$itemclasssafe = str\_replace( '\\', '\_', mb\_substr( $comment::$itemclass, 4 ) );}}
{{if $comment->isignored()}}
 <div class='ipscomment ipscomment\_ignored ipstype\_light' id='elignorecomment\_{$comment->$idfield}' data-ignorecommentid='elcomment\_{$comment->$idfield}' data-ignoreuserid='{$comment->author()->member\_id}'>
 {lang="ignoring\_content" sprintf="$comment->author()->name"} <a href='#elignorecomment\_{$comment->$idfield}\_menu' data-ipsmenu data-ipsmenu-menuid='elignorecomment\_{$comment->$idfield}\_menu' data-ipsmenu-appendto='#elignorecomment\_{$comment->$idfield}' data-action="ignoreoptions" title='{lang="see\_post\_ignore\_options"}' class='ipstype\_blendlinks'>{lang="options"} <i class='fa fa-caret-down'></i></a>
 <ul class='ipsmenu ipshide' id='elignorecomment\_{$comment->$idfield}\_menu'>
 <li class='ipsmenu\_item ipsjs\_show' data-ipsmenuvalue='showpost'><a href='#'>{lang="show\_this\_post"}</a></li>
 <li class='ipsmenu\_sep ipsjs\_show'><hr></li>
 <li class='ipsmenu\_item' data-ipsmenuvalue='stopignoring'><a href='{url="app=core&module=system&controller=ignore&do=remove&id={$comment->author()->member\_id}" seotemplate="ignore"}'>{lang="stop\_ignoring\_posts\_by" sprintf="$comment->author()->name"}</a></li>
 <li class='ipsmenu\_item'><a href='{url="app=core&module=members&controller=ignore" seotemplate="ignore"}'>{lang="change\_ignore\_preferences"}</a></li>
 </ul>
 </div>
{{endif}}

<a id='comment-{$comment->$idfield}'></a>
<article itemscope {{if $item->isquestion() && !$comment->new\_topic}}itemprop="suggestedanswer {{if $comment->post\_bwoptions['best\_answer']}}acceptedanswer{{endif}}" itemtype="http://schema.org/answer"{{else}}itemtype="http://schema.org/comment"{{endif}} id='elcomment\_{$comment->$idfield}' class='cpost ipsbox {{if $otherclasses}}{$otherclasses}{{endif}} ipscomment {{if settings.reputation\_highlight and $comment->reputation() >= settings.reputation\_highlight}}ipscomment\_popular{{endif}} ipscomment\_parent ipsclearfix ipsclear ipscolumns ipscolumns\_nospacing ipscolumns\_collapsephone {{if $comment->isignored()}}ipshide{{endif}} {{if $comment->hidden()}}ipsmoderated{{endif}}'>
 {{if $item->isquestion() and !$comment->new\_topic}}
 {template="postrating" group="topics" app="forums" params="$item, $comment, $votes"}
 {{endif}}
 <aside class='ipscomment\_author cauthorpane ipscolumn ipscolumn\_medium'>
 <h3 class='ipstype\_sectionhead cauthorpane\_author ipstype\_blendlinks ipstype\_break' itemprop="creator" itemscope itemtype="http://schema.org/person"><strong itemprop="name">{$comment->author()->link( $comment->warningref() )|raw}</strong> <span class='ipsresponsive\_showphone ipsresponsive\_inline'>&nbsp;&nbsp;{template="reputationbadge" group="global" app="core" params="$comment->author()"}</span></h3>
 <ul class='cauthorpane\_info ipslist\_reset'>
 
 {{if $comment->author()->member\_title && $comment->author()->member\_id}}
 
 {{elseif $comment->author()->rank['title'] && $comment->author()->member\_id}}
 <li class='ipsresponsive\_hidephone'>{$comment->author()->rank['title']}</li>
 {{endif}} 
 <!-- {{if $comment->author()->rank['image'] && $comment->author()->member\_id}}
 <li class='ipsresponsive\_hidephone'>{$comment->author()->rank['image']|raw}</li>
 {{endif}} -->
 
 <li class='cauthorpane\_photo'>
 {{if $comment->author()->pp\_main\_photo}}<a href='{url="app=core&module=members&controller=profile&id={$comment->author()->member\_id}-{$comment->author()->name}" seotemplate="profile" seotitle="$comment->author()->name"}' data-ipshover data-ipshover-target='{url="app=core&module=members&controller=profile&id={$comment->author()->member\_id}-{$comment->author()->name}&do=hovercard" seotemplate="profile" seotitle="$comment->author()->name"}' title="{lang="view\_user\_profile" sprintf="$comment->author()->name"}"><span class='ipsuserphoto ipsuserphoto\_variable'><img src="{setting="base\_url"}uploads/{$comment->author()->pp\_main\_photo}" /></span></a>{{else}}<a href='{url="app=core&module=members&controller=profile&id={$comment->author()->member\_id}-{$comment->author()->name}" seotemplate="profile" seotitle="$comment->author()->name"}' data-ipshover data-ipshover-target='{url="app=core&module=members&controller=profile&id={$comment->author()->member\_id}-{$comment->author()->name}&do=hovercard" seotemplate="profile" seotitle="$comment->author()->name"}' title="{lang="view\_user\_profile" sprintf="$comment->author()->name"}"><span class='ipsuserphoto ipsuserphoto\_variable'><img src="{resource="default\_photo.png" app="core" location="global"}" /></a>{{endif}}
 </li>

 <li class='group\_badge'>
 <div class='group\_name'>{expression="\ips\member\group::load( $comment->author()->member\_group\_id )->formattedname" raw="true"}</div>
 <!-- <div class='member\_title'>
 {{if $comment->author()->member\_title && $comment->author()->member\_id}}
 {$comment->author()->member\_title}
 {{elseif $comment->author()->rank['title'] && $comment->author()->member\_id}}
 {$comment->author()->rank['title']}
 {{endif}}
 </div> -->
 </li>
 </ul>
 {{if $comment->author()->rank['image'] && $comment->author()->member\_id}}
 
 {{endif}}
 
 {{if $comment->author()->member\_id}}
 <ul class='dpxutprofile'>
 <li class="ipsresponsive\_hidephone ipstype\_break">
 <div class='stat\_name'><i class="fa {setting="euip\_fafauserrank"}" aria-hidden="true"></i> {lang="euip\_membertitle"}:</div>
 <div class='stat\_value'>{$comment->author()->member\_title}</div>
 </li>
 
 <li class='euip\_border'>
 <div class='stat\_name'><i class="fa {setting="euip\_fafausername"}" aria-hidden="true"></i> {lang="euip\_username"}:</div>
 <div class='stat\_value'> <strong itemprop="name">{$comment->author()->link( $comment->warningref() )|raw}</strong></div>
 </li>
 <li class='euip\_border {{if \ips\settings::i()->euip\_usergrouphidephone == 1}}ipsresponsive\_hidephone{{endif}}'>
 <div class='stat\_name'><i class="fa {setting="euip\_fafausergroup"}" aria-hidden="true"></i> {lang="euip\_usergroup"}:</div>
 <div class='stat\_value'>{expression="\ips\member\group::load( $comment->author()->member\_group\_id )->formattedname" raw="true"}</div>
 </li>
 <li> 
 <div class='stat\_name'>
 <i class="fa fa-comments-o" aria-hidden="true"></i> posts 
 </div>
 <div class='stat\_value'> 
 {$comment->author()->member\_posts}
 </div>
 </li>
 
 <li class='euip\_border {{if \ips\settings::i()->euip\_userrephidephone == 1}}ipsresponsive\_hidephone{{endif}}'>
 <div class='stat\_name'><i class="fa {setting="euip\_fafauserrep"}" aria-hidden="true"></i> {lang="euip\_totalrep"}:</div>
 <div class='stat\_value'>{template="reputationbadge" group="global" app="core" params="$comment->author()"}</div>
 </li>
 <li> 
 <div class='stat\_name'>
 <i class="fa fa-exclamation-triangle" aria-hidden="true"></i> warn level
 </div>
 <div class='stat\_value'> 
 {$comment->author()->warn\_level}
 </div>
 </li>
 
 <li class='euip\_border {{if \ips\settings::i()->euip\_birthdayhidephone == 1}}ipsresponsive\_hidephone{{endif}}'>
 <div class='stat\_name'><i class="fa {setting="euip\_fafabirthday"}" aria-hidden="true"></i> {lang="euip\_age"}:</div>
 <div class='stat\_value'>{$comment->author()->age()}</div>
 </li>
 
 <li class='euip\_border {{if \ips\settings::i()->euip\_useridhidephone == 1}}ipsresponsive\_hidephone{{endif}}'>
 <div class='stat\_name'><i class="fa {setting="euip\_fafauserid"}" aria-hidden="true"></i> {lang="euip\_memberid"}:</div>
 <div class='stat\_value'>{$comment->author()->member\_id}</div>
 </li>
 
 <li class='euip\_border {{if \ips\settings::i()->euip\_lastactivityhidephone == 1}}ipsresponsive\_hidephone{{endif}}'>
 <div class='stat\_name'><i class="fa {setting="euip\_fafalastactivity"}" aria-hidden="true"></i> {lang="euip\_lastactivity"}:</div>
 <div class='stat\_value'>{{if $comment->author()->last\_activity}}{datetime="$comment->author()->last\_activity"}{{else}}{lang="never"}{{endif}}</div>
 </li>
 
 <li class='euip\_border {{if \ips\settings::i()->euip\_onlinestatushidephone == 1}}ipsresponsive\_hidephone{{endif}}'>
 <div class='stat\_name'><i class="fa {setting="euip\_fafaonlinestatus"}" aria-hidden="true"></i> {lang="euip\_onlinestatus"}:</div>
 <div class='stat\_value'>{{if $comment->author()->isonline()}}<span style='color:green' class='metric'>{lang="euip\_online"}</span>{{else}}<span style='color:red'>{lang="euip\_offline"}</span>{{endif}}</div>
 </li> 
 
 
 <li class='euip\_border {{if \ips\settings::i()->euip\_joindatehidephone == 1}}ipsresponsive\_hidephone{{endif}}'>
 <div class='stat\_name'><i class="fa {setting="euip\_fafauserjoindate"}" aria-hidden="true"></i> {lang="euip\_joined"}:</div>
 <div class='stat\_value'>{datetime="$comment->author()->joined" dateonly="true"}</div>
 </li>
 <li class='euip\_border {{if \ips\settings::i()->euip\_birthdayhidephone == 1}}ipsresponsive\_hidephone{{endif}}'>
 <div class='stat\_name'> <i class="fa {setting="euip\_fafabirthday"}" aria-hidden="true"></i> {lang="euip\_bday"}:</div>
 <div class='stat\_value'> {$comment->author()->birthday}</div>
 </li>
 <li class='ipsresponsive\_hidephone'>{$comment->author()->rank['image']|raw}</li>
 </ul>
 {{endif}}
 </aside>
 <div class='ipscolumn ipscolumn\_fluid'>
 {template="post" group="topics" app="forums" params="$item, $comment, $item::$formlangprefix . 'comment', $item::$application, $item::$module, $itemclasssafe"}
 </div>
</article>


 in custom.css se adauga urmatorul cod :
 


ul.dpxutprofile > li {
 display: flex;
 width: 90%;
 justify-content: space-between;
 margin: 5px auto;
 font-size: 10px;
 border-bottom: 1px dashed #444;
}
ul.dpxutprofile {
 margin: 0;
 padding: 0;
 list-style: none;
 margin-top: 15px;
}

ul.dpxutprofile > li > .stat\_name {
 display: inline-block;
 text-align: left;
 color: #525252;
 cursor: default;
 float: left;
 letter-spacing: 1px;
}

ul.dpxutprofile > li > .stat\_name > i {
 font-size: 14px;
 position: relative;
 top: 1px;
 margin-right: 5px;
}
ul.dpxutprofile > li > .stat\_value {
 display: inline-block;
 text-align: left;
 color: #828282;
 float: right;
}

.group\_badge {
 background: #2a2a2a;
 background: -webkit-linear-gradient(90deg,#23f88a transparent);
 background: -o-linear-gradient(90deg,#23f88a transparent);
 background: -moz-linear-gradient(90deg,#2a2a2a, transparent);
 background: linear-gradient(90deg,#2a2a2a, transparent);
 margin: 0 auto;
 margin-bottom: 15px;
 margin-top: 15px;
 width: 80%;
 height: 35px;
 line-height: 35px;
 border-radius: 30px;
}

.group\_name {
 position: relative;
 top: 0;
 transition: all .2s;
 cursor: default;
}


 rezultatul besides what [@trevorhodges](/u/trevorhodges) said with [codepen.io](http://codepen.io), you can use a about:blank. next inspect, then add your code. my browser is generally chrome, and it works for me. Hello, [@Trulines87](/c/user/viewprofilepage/user-id/733134).


Welcome to Shopify Community. My name is Olivia and I work here.


Thanks for posting your question, I can definitely help you out with this today. There are a couple of different ways we can tackle this, so let's dive right in to your options.


**A. Use your design time.**


Each store on a paid plan, using a Shopify developed theme, is allotted a full 60 minutes of design time for minor changes. While it's best to check with our [Support Team](https://bit.ly/2XDcBxK) on what changes we can, and can't accommodate, your request is definitely one we could look after. If you have a specific idea of what you would like your footer to look like let me know and I can connect you with our Theme team. Just be as detailed as possible with your request, maybe even including examples, to help us make the right changes. Make sure to check out our [design policy](https://bit.ly/31wVsHb) to read more about support for Shopify themes.


***OR***


**B. Add text to your footer code.**


If you're comfortable with making code changes you can save your design time for something else. It will be helpful to have basic knowledge of HTML and CSS to help you customize the style and layout of added text, but I can point you towards making these changes on your own. Head to **Shopify Admin > Online Store > Themes > Narrative > Actions > Edit Code** and scroll down to */sections* to find the file **footer.liquid**.


Narrow down this piece of code on line 32:


 



```
{% when 'menu' %}

```

 


Now, insert your text after that line. Make sure to add <p> before your text, and </p> at the end of your text to close the code. Here's an example:


 



```
            {% when 'menu' %}
            <p> Add your contact info </p>
              {%- assign link_list = block.settings.link_list -%}
```

 


This is how it would appear on your website:


![08-26-ndww6-2kmgo](/c/image/serverpage/image-id/57763i1C21A51AE550DEAA/image-size/large?v=1.0&px=999 "08-26-ndww6-2kmgo")


That's it! You can take it a step further and make it even easier for your customers to contact you by adding a direct email link. Simple code like this would work: 


 



```
<a href="mailto:yourmail@domain.com">Insert your business email address</a>
```

 


Same thing for a "click-able" phone number to help customers easily phone you:


 



```
<a href="tel:18001112233">1-800-111-2233</a>
```

 


And we're done! Don't forget to replace the email address and phone number in those codes with your own information.


That should work, but let me know if any other questions come up that I can help with.


Warm regards,



**Olivia | Social Care @ Shopify**  
 - Was my reply helpful? Click **Like** to let me know!   
 - Was your question answered? Mark it as an **Accepted Solution** - To learn more visit the [Shopify Help Center](https://help.shopify.com/) or the [Shopify Blog](https://www.shopify.ca/blog) [image]

[how to enable error reporting in php](https://www.000webhost.com/forum/t/how-to-enable-error-reporting-in-php/43038) [tutorials](/forum/c/tutorials)

this tutorial is for those who get internal server error. so your website is not working and you are struggling to find out why. you see error 500 and do not know what to do next. if you try googling error 500 this wil… Magda, have you found what you need, yet?


I did this many years ago. It is simple… the 2nd time you do it!  

Exit points are simply “interrupts” that IBM supplies. You can attach programs to them, and the programs will automatically run at that point. For setting your AS/400 up to accept FTP logons, for example, the exit point is:  

QIBM\_QTMF\_SVR\_LOGON and the format you wil use is: TCPL0100.


A program inserted there can control WHO can log on, and when.  

To control WHAT they can do, you use another exit point, QIBM\_QTMF\_SERVER\_REQ and use format VLRQ0100.


My notes (from 1999) say I used the IBM TCP manual to get this info, specifically: TCP/IP manual SC41-5420-01 page I-14.


I do not know if it will allow me to post code here, it is long and complex due to the number of variables and some of them being in hex.


Write me (drow@waxie.com) if you would like me to email you my program code.


David Row  

WAXIE Sanitary Supply  

San Diego, CA





This is a link for [Add-ons for Firefox](https://addons.mozilla.org/en-US/firefox/). These are programs written by users or developers that the browser knows how and when to call. The developers of Firefox designed it to allow external programs to be hooked in by users of the browser.


IBM did something similar for a lot of the TCP/IP and other server functions. (And a lot of other things.) When you connect to the FTP server for example, the server checks to see if a program has been registered to process FTP logon requests. The registered program is an ‘exit program’.


Browser add-ons get an entry added to a file someplace within the browser directory structure. In your iSeries, the entry would be added to the Registration Facility. (Not always, but that’s the commonly recognized object for exit points and programs.) Use WRKREGINF to review your registration facility.


To create an exit program, you need to know the parameter list that will be passed to your program and the exit protocol. To find the parameter list, you should start looking at the documentation for the server the exit program will be associated with. The protocol, the meanings of the parms and what to with them, is also there.


A FTP exit program would be structured after documentation within the [File Transfer Protocol exit programs](http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=/rzaiq/rzaiqreferenceexit.htm) topic of the Information Center for your release.


Once registered, a server logon exit program (for example) would be called just before the server decides whether or not to accept the logon. Your exit program directly influences that decision by returning an ‘accept or reject’ parameter. It chooses based on examination of the input parms.


The exit program may control who can and cannot logon, where they may logon from, what times of day logons are accepted, or it might accept all logons — its purpose can be simply to write all logons to a log file or to send a message when particular logons happen. Your exit program can do whatever it is programmed to do at that point in the logon process.


It doesn’t have to be a ‘security’ function. It’s whatever you want it to be.


For the FTP server, there are two general exit points. One is just before a logon is accepted. The other is just before each transaction in a session is processed. You can control individual transactions just as you can logons. (FTP client has its own exit points.)


Most other exit programs work on similar principles.


A few issues complicate things.


* An exit program needs enough authority to do whatever it needs to do; it can’t always rely on the authority of the session user.
* An exit program shouldn’t unduly delay transactions; there’s no way to know how often an exit program may be called, so you don’t want it slowing down every single transaction.
* Exit programs may be called by many instances of a server at the same time; it shouldn’t be locking things that are needed by a different instance.
* IBM changes the interfaces at times and the servers themselves can get PTFs; regular, on-going maintenance can be needed — keep the programs direct with little complication.
* There are other issues, but those are enough to consider.


Code a very simple exit program that accepts the parms and returns an ‘Accept’ indication. Don’t have it do anything except maybe send a message to a message queue. That lets you see how the registration facility works and how the parms work. It also gives you a program that you can register and deregister in the future to check whether or not the server is stilling calling your program correctly. (Problems can happen.)


Tom Errors and warnings usually appear in `....\logs\php_error.log` or `....\logs\apache_error.log` depending on your php.ini settings.


Also useful errors are often directed to the browser, but as they are not valid html they are not displayed.


So `"tail -f`" your log files and when you get a blank screen use IEs "view" -> "source" menu options to view the raw output. thanks for your comment!

i definitely should’ve used mkshell, not sure why i wasn’t. it does seem to produce a different error:

make: entering directory '/build/source/doc/manual'

xsltproc --nonet --param section.autolabel 1 --param section.label.includes.component.label 1 --param html.stylesheet … actually, ftl does not care about #. instead, everything ftl cannot parse as valid config setting is ignored. so using ; everywhere is fine as well. prepending with ä would equally work, too, etc.

additional hint: pi-hole v6.0 will change the config file format to [toml](https://toml.io). the existing pihole-ftl.conf … hey [@aravindhrs](/u/aravindhrs) 
after checking the project-structure x-times i found my mistake. 
the processes.xml was created but not in the “meta-inf”-folder. after the correction of this the forms works perfectly. 
lessions learned: the problem sit 80cm in front of monitor. :wink: