Vim color text editor for C++, C  http://metalab.unc.edu/LDP/HOWTO/Vim−HOWTO.html
• 
SQL database server for PHP  PostgreSQL
at pgsql−howto
• 
Source code control system CVS HOWTO for C++ programs
http://metalab.unc.edu/LDP/HOWTO/CVS−HOWTO.html
• 
Linux goodies main site  http://www.aldev.8m.com
Mirror sites are at − http://aldev0.webjump.com,
angelfire
geocities
virtualave
50megs
theglobe
NBCi
Terrashare
Fortunecity
Freewebsites,
Tripod
Spree
Escalix
Httpcity
Freeservers
• 
17.
Other Formats of this Document
This document is published in 14 different formats namely − DVI, Postscript,  Latex, Adobe Acrobat PDF,
LyX, GNU−info, HTML, RTF(Rich Text Format), Plain−text, Unix man pages, single  HTML file, SGML
(Linuxdoc format), SGML (Docbook format), MS WinHelp format. 
This howto document is located at − 
http://www.linuxdoc.org and click on HOWTOs and search  for howto document name using
CTRL+f or ALT+f within the web−browser.
• 
You can also find this document at the following mirrors sites − 
http://www.caldera.com/LDP/HOWTO
• 
http://www.linux.ucla.edu/LDP
• 
http://www.cc.gatech.edu/linux/LDP
• 
http://www.redhat.com/mirrors/LDP
• 
Other mirror sites near you (network−address−wise) can be found at
http://www.linuxdoc.org/mirrors.html select a site and go to directory
/LDP/HOWTO/xxxxx−HOWTO.html
• 
You can get this HOWTO document as a single file tar ball in HTML, DVI,  Postscript or SGML
formats from − ftp://www.linuxdoc.org/pub/Linux/docs/HOWTO/other−formats/ and
http://www.linuxdoc.org/docs.html#howto
• 
Plain text format is in:  ftp://www.linuxdoc.org/pub/Linux/docs/HOWTO  and
http://www.linuxdoc.org/docs.html#howto
• 
Single HTML file format is in:  http://www.linuxdoc.org/docs.html#howto
• 
Single HTML file can be created with command (see man sgml2html) −  sgml2html −split 0
xxxxhowto.sgml 
Translations to other languages like French, German, Spanish,  Chinese, Japanese are in
ftp://www.linuxdoc.org/pub/Linux/docs/HOWTO and
http://www.linuxdoc.org/docs.html#howto Any help from you to translate to other languages is
welcome.
• 
The document is written using a tool called "SGML−Tools" which can be got from −
http://www.sgmltools.org Compiling the source you will get the following commands like 
sgml2html xxxxhowto.sgml  (to generate html file)
• 
sgml2html −split 0  xxxxhowto.sgml (to generate a single page html file)
• 
PHP HOW−TO 
17. Other Formats of this Document
28
Change pdf to html - SDK software service:C# PDF Convert to HTML SDK: Convert PDF to html files in C#.net, ASP.NET MVC, WinForms, WPF application
How to Convert PDF to HTML Webpage with C# PDF Conversion SDK
www.rasteredge.com
Change pdf to html - SDK software service:VB.NET PDF Convert to HTML SDK: Convert PDF to html files in vb.net, ASP.NET MVC, WinForms, WPF application
PDF to HTML Webpage Converter SDK for VB.NET PDF to HTML Conversion
www.rasteredge.com
sgml2rtf  xxxxhowto.sgml  (to generate RTF file)
• 
sgml2latex xxxxhowto.sgml  (to generate latex file)
• 
17.1 Acrobat PDF format 
PDF file can be generated from postscript file using  either acrobat distill or Ghostscript. And postscript file
is generated from DVI which in turn is generated from LaTex file. You can download distill software from
http://www.adobe.com. Given below  is a sample session: 
bash$ man sgml2latex
bash$ sgml2latex filename.sgml
bash$ man dvips
bash$ dvips −o filename.ps filename.dvi
bash$ distill filename.ps
bash$ man ghostscript
bash$ man ps2pdf
bash$ ps2pdf input.ps output.pdf
bash$ acroread output.pdf &
Or you can use Ghostscript command ps2pdf. ps2pdf is a work−alike for nearly all the functionality of
Adobe's Acrobat Distiller product: it converts PostScript files to Portable Document Format (PDF) files.
ps2pdf is implemented as a very small command script  (batch file) that invokes Ghostscript, selecting a
special "output device" called pdfwrite. In order to use ps2pdf, the pdfwrite  device must be included in the
makefile when Ghostscript was compiled; see the documentation on building Ghostscript for details. 
17.2 Convert Linuxdoc to Docbook format 
This document is written in linuxdoc SGML format. The Docbook SGML format supercedes the linuxdoc
format and has lot more features than linuxdoc. The linuxdoc is very simple and is easy to use. To convert
linuxdoc SGML  file to Docbook SGML use the program ld2db.sh  and some perl scripts. The ld2db output is
not 100% clean and you need to use the clean_ld2db.pl perl script. You may need to manually correct few
lines in the document. 
Download ld2db program from  http://www.dcs.gla.ac.uk/~rrt/docbook.html
or from 
Al Dev site
• 
Download the cleanup_ld2db.pl perl script from from 
Al Dev site
• 
The ld2db.sh is not 100% clean, you will get lots of errors when you run 
bash$ ld2db.sh file−linuxdoc.sgml db.sgml
bash$ cleanup.pl db.sgml > db_clean.sgml
bash$ gvim db_clean.sgml 
bash$ docbook2html db.sgml
And you may have to manually edit some of the minor errors after  running the perl script. For e.g. you may
need to put closing tag < /Para> for each < Listitem> 
PHP HOW−TO 
17.1 Acrobat PDF format 
29
SDK software service:Online Convert PDF to HTML5 files. Best free online PDF html
Download Free Trial. Convert a PDF file to HTML. Then just wait until the conversion from PDF to HTML is complete and download the file.
www.rasteredge.com
SDK software service:VB.NET PDF Password Library: add, remove, edit PDF file password
Add password to PDF. Change PDF original password. Remove password from PDF. Set PDF security level. VB: Change and Update PDF Document Password.
www.rasteredge.com
17.3 Convert to MS WinHelp format 
You can convert the SGML howto document to Microsoft Windows Help file,  first convert the sgml to html
using: 
bash$ sgml2html xxxxhowto.sgml     (to generate html file)
bash$ sgml2html −split 0   xxxxhowto.sgml (to generate a single page html file)
Then use the tool  HtmlToHlp. You can also use sgml2rtf and then use the RTF files for generating winhelp
files. 
17.4 Reading various formats 
In order to view the document in dvi format, use the xdvi program. The xdvi program is located in
tetex−xdvi*.rpm package in Redhat Linux which can be located through ControlPanel | Applications |
Publishing | TeX menu buttons. To read dvi document give the command − 
xdvi −geometry 80x90 howto.dvi
man xdvi
And resize the window with mouse. To navigate use Arrow keys, Page Up, Page Down keys, also you can
use 'f', 'd', 'u', 'c', 'l', 'r', 'p', 'n' letter keys to move up, down, center, next page, previous page etc. To turn off
expert menu press 'x'. 
You can read postscript file using the program 'gv' (ghostview) or  'ghostscript'. The ghostscript program is in
ghostscript*.rpm package and gv  program is in gv*.rpm package in Redhat Linux which can be located
through ControlPanel | Applications | Graphics menu  buttons. The gv program is much more user friendly
than ghostscript. Also ghostscript and gv are available on other platforms like OS/2, Windows 95 and NT,
you view this document even on those platforms. 
Get ghostscript for Windows 95, OS/2, and for  all OSes from  http://www.cs.wisc.edu/~ghost
• 
To read postscript document give the command − 
gv howto.ps
ghostscript howto.ps
You can read HTML format document using Netscape Navigator, Microsoft Internet explorer, Redhat Baron
Web browser or any of the 10 other web browsers. 
You can read the latex, LyX output using LyX a X−Windows front end to latex. 
18. Copyright
Copyright policy is GNU/GPL as per LDP (Linux Documentation project). LDP is a GNU/GPL project.
Additional requests are − Please retain the author's name, email address and this copyright notice on all the
copies. If you make any changes  or additions to this document then you please  intimate all the authors of this
PHP HOW−TO 
17.3 Convert to MS WinHelp format 
30
SDK software service:C# PDF Password Library: add, remove, edit PDF file password in C#
Able to change password on adobe PDF document in C#.NET. To C# Sample Code: Change and Update PDF Document Password in C#.NET. In
www.rasteredge.com
SDK software service:VB.NET PDF File Compress Library: Compress reduce PDF size in vb.
3.pdf"; String outputFilePath = Program.RootPath + "\\" 3_optimized.pdf"; 'create optimizing options TargetResolution = 150.0F 'to change image compression
www.rasteredge.com
document. 
19.
Appendix A PHP examples 
19.1 PostgreSQL large object Example
Submitted by:  PHP code exchange  px@sklar.com  To get this file, in the web−browser, save this file as 'Text'
type as pgsql_largeobj.lib 
PX: PHP Code Exchange − 
<url name="PostgreSQL" url="http://www.geocities.com/alavoor/HOWTO/pgsql/PostgreSQL−HOWTO.html">
large object access
<?
$database = pg_Connect ( "",  "",  "",  "",  "jacarta");
pg_exec ($database,  "BEGIN");
$oid = pg_locreate ($database);
echo ( "$oid\n");
$handle = pg_loopen ($database, $oid,  "w");
echo ( "$handle\n");
pg_lowrite ($handle,  "foo");
pg_loclose ($handle);
pg_exec ($database,  "COMMIT");
pg_close ($database);
?>
19.2 User authentication Example
To get this file, in the web−browser, save this file as 'Text' type as user_pw.lib 
From the PHP 3 Manual: Works only if PHP is an Apache module. Instead of simply printing out the
$PHP_AUTH_USER and $PHP_AUTH_PW,  you would probably want to check the username and password
for  validity. Perhaps by sending a query to a database, or by looking up the user in a dbm file. 
<?php
if (!$PHP_AUTH_USER)
{
Header("WWW−authenticate: basic realm=\"My Realm\"");
Header("HTTP/1.0 401 Unauthorized");
echo "Text to send if user hits Cancel button\n";
exit;
}
else
{
echo "Hello $PHP_AUTH_USER.<P>";
echo "You entered $PHP_AUTH_PW as your password.<P>";
}
?>
PHP HOW−TO 
19. Appendix A PHP examples 
31
SDK software service:C# PDF Annotate Library: Draw, edit PDF annotation, markups in C#.
Able to edit and change PDF annotation properties such as font size or color. Abilities to draw markups on PDF document or stamp on PDF file.
www.rasteredge.com
SDK software service:C# HTML5 Viewer: Deployment on DotNetNuke Site
RasterEdge.XDoc.Office.Inner.Office03.dll. RasterEdge.XDoc.PDF.dll. RasterEdge.XDoc. PDF.HTML5Editor.dll. RasterEdge.XDoc.PowerPoint.dll. RasterEdge.XDoc.TIFF.dll
www.rasteredge.com
19.3 Network admin Example
To get this file, in the web−browser, save this file as 'Text' type as network.lib 
PHP: network adminstrator's best friend from  http://www.phpWizard.net
As a web−developer, you're probably used to such lovely tools as ping, whois, nslookup etc. But what when
you need one of those utilities at a client's office and have no access to telnet? Good guess. Time to look up
the functions in the "Network" section of the PHP manual. 
Socket operations: 
The most important function there is fsockopen(). Using this function, you can connect to any open port on a
server and establish a socket connection with it. The function's syntax is as following: 
int fsockopen(string hostname, int port, int [errno], string [errstr]);
The first two arguments are obvious, the next two are optional and used for error handling. The "errno" and
"errstr" should be passed by reference. "Passing by reference" means that the original variable will get
modified. Normally, the content of a variable passed to a function wouldn't be modified. 
So, you could use this function to open a connection to a webserver and print out the headers: 
function get_headers($host, $path = "/")
{
$fp = fsockopen ("$host", 80, &$errnr, &$errstr) or die("$errno: $errstr");
fputs($fp,"GET $path HTTP/1.0\n\n");
while (!$end)
{
$line = fgets($fp, 2048);
if (trim($line) == "")
$end = true;
else
echo $line;
}
fclose($fp);
}
In this example you see that you can apply any file operations (fread, fwrite etc) to the the pointer you got
using the fsockopen() call. Note that the example realizes a HTTP/1.0 client − it won't work with
name−based virtual hosts. 
Finger:  Naturally, you can also open connections to other ports. Writing a small finger client with PHP is
trivial therefore. Let's change the example from above to query a finger daemon: 
function finger ($host, $user)
{
$fp = fsockopen($host, 79, &$errno, &$errstr) or die("$errno: $errstr");
PHP HOW−TO 
19.3 Network admin Example
32
SDK software service:C# PDF File Compress Library: Compress reduce PDF size in C#.net
3.pdf"; String outputFilePath = Program.RootPath + "\\" 3_optimized.pdf"; // create optimizing TargetResolution = 150F; // to change image compression mode
www.rasteredge.com
SDK software service:VB.NET Create PDF from Excel Library to convert xlsx, xls to PDF
PDF to Word; Convert PDF to Tiff; Convert PDF to HTML; Convert PDF Merge PDF Files; Split PDF Document; Remove Password from PDF; Change PDF Permission Settings.
www.rasteredge.com
fputs($fp, "$user\n");
while (!feof($fp))
echo fgets($fp, 128);
fclose($fp);
}
Whois:  Querying a whois server uses the same concept: 
// domain is like "phpwizard.net"
function whois($domain, $server="whois.internic.net")
{
$fp = fsockopen ($server, 43, &$errnr, &$errstr) or die("$errno: $errstr");
fputs($fp, "$domain\n");
while (!feof($fp))
echo fgets($fp, 2048);
fclose($fp);
}
Blocking and non−blocking operations:  But there's a problem with all those functions. They work fine if 
You have a connection with low latency and 
1. 
If the server you're connecting to is up and  running. 
2. 
If not, your script will be busy until it times out. The reason for this is that default socket connections are
blocking and don't time out. You can avoid these "hanging scripts" by switching to non−blocking socket
operations. The function set_socket_blocking() does just that: it set all operations on a socket (first parameter:
socket pointer) to either blocking (second parameter: true) or false (second parameter: false). Using
non−blocking operations, the finger function would like like this: 
$fp = fsockopen($host, 79, &$errno, &$errstr) or die("$errno: [ ] $errstr");
set_socket_blocking($fp, 0);
fputs($fp, "$user\n");
$stop = time() + $timeout;
while (!feof($fp) && time() < $stop )
echo fgets($fp, 128);
fclose($fp);
Modifying these 3 functions to use non−blocking socket calls is left as an exercise for you. 
20.
Appendix B Midgard Installation
RPMs for Midgard from  http://www.midgard−project.org/download/binaries currently do not include
PostgreSQL , and hence you need to install from the source tar  ball file . 
Download the Midgard source tarball and read the INSTALL.REDHAT file − 
PHP HOW−TO 
20. Appendix B Midgard Installation
33
bash# cd midgard−lib−1.4beta6
bash# ./configure −−prefix=/usr/local −−with−mysql=/usr/local −−includedir=/usr/include/mysql −−with−midgard=/usr/local −−with−pgsql=/var/lib/pgsql −−includedir=/usr/include/pgsql
bash# make
bash# make install
bash# ldconfig −v | grep −i midga
Copy the header files, just in case make install did not do that..
bash# cp *.h /usr/local/include
bash# cd ../mod_midgard−1.4beta5c
bash# ./configure −−prefix=/usr/local −−with−mysql=/usr/local −−includedir=/usr/include/mysql −−with−midgard=/usr −−with−pgsql=/var/lib/pgsql −−includedir=/usr/include/pgsql
bash# make
bash# make install
#modify apache line to correct /usr/.....
bash# vi /etc/httpd/conf/httpd.conf   (or it is /etc/apache/httpd.conf)
bash# /etc/init.d/apache restart
#apache should restart!!!
bash# cd ../midgard−php−1.4beta6
bash# ./configure '−−with−apxs' '−−with−mysql' '−−with−pgsql' '−−with−midgard' −−prefix=/usr/local −−with−midgard=/usr/local
bash# gvim Makefile
And add −I/usr/include/pgsql to INCLUDE variable.
Also add $(INCLUDE) to $(APXS) command as below − 
libphp3.so: mod_php3.c libmodphp3−so.a  pcrelib/libpcre.a midgard/libphpmidgard.a
−@test −f ./mod_php3.c || test −L ./mod_php3.c || $(LN_S) $(srcdir)/mod_php3.c ./mod_php3.c
−@test −f ./mod_php3.c || test −h ./mod_php3.c || $(LN_S) $(srcdir)/mod_php3.c ./mod_php3.c
$(APXS) −c −o libphp3.so  −I$(srcdir) $(INCLUDE) −I. −I/usr/local/include −I/usr/lib/glib/include  −Wl,'−rpath /usr/local/lib' ./mod_php3.c libmodphp3−so.a $(APXS_LDFLAGS) 
bash# make
bash# make install
#modify apache line to correct /usr/.....
# and add lines like these −
LoadModule php4_module        modules/libphp4.so
AddModule mod_php4.c
LoadModule php4_module        lib/apache/libphp4.so
<IfModule mod_php4.c>
AddType application/x−httpd−php4 .php4
AddType application/x−httpd−php4 .php
AddType application/x−httpd−php4−source .phps
AddType application/x−httpd−php .php
</IfModule>
bash# vi /etc/httpd/conf/httpd.conf   (or it is /etc/apache/httpd.conf)
bash# /etc/init.d/apache restart
#apache should restart!!!
20.1 Testing Midgard PHP Server
To test the installation do this − Create a file in your document root directory.  I usually call  it info.php and in
it put this single line: 
<?phpinfo()?>
PHP HOW−TO 
20.1 Testing Midgard PHP Server
34
Then load it up in your browser: http://localhost/info.php 
You should see a nice summary page showing all sorts of information about your setup.  You probably
shouldn't leave this file around on a production server, but for debugging and general info during
development, it is very handy. 
20.2 Security OpenSSL 
You may also need to get the RSA package for to enable SSL encryption from
ftp://ftp.deva.net/pub/sources/crypto/rsaref20.1996.tar.Z See also OpenSSL RPM package on Linux cdrom (
http://www.openssl.org
If you do not want the SSL to be enabled (or if you face any problem), then download the source RPM of
Apache−Midgard and edit the *.spec file and comment out SSL and rebuild the RPM. 
21.
Appendix C − Debug tool phpcodesite 
<
?php
/*  phpCodeSite (Idea from CodeSite − Raize Software)
 @version 0.1b − 20001125
 @author Sébastien Hordeaux − <
marms@marms.com>
 @licence GNU Public Licence
 Main site : http://phpcodesite.phpedit.com
*/
/*
** How does it work ?
Place a CS_EnterMethod() at the beginning of each method/function 
Place a CS_ExitMethod() at the beginning of each method/function 
Use CS_SendError() to log an error message 
Use CS_SendNote() to log a simple note message 
Use CS_SendMessage() to log a message 
To log variables: CS_SendVar & CS_SendArray() 
To see input data (global PHP variables) use CS_SendInputData()
*/
if(defined("FLAG_PHPCODESITE_PHP")) return FALSE;
define("FLAG_PHPCODESITE_PHP", 1);
//  Start without increment
$CS_Step = 0;
CS_SetEnabled(TRUE);
// CS_SetEnabled(FALSE);
//  Switch between Enable/Disable mode
function CS_SetEnabled($state){
global $CS_Enabled;
$CS_Enabled = $state;
PHP HOW−TO 
20.2 Security OpenSSL 
35
CS_Write($CS_Enabled?"<
pre>":"<
/pre>");
}
//  Add a level to the reported items
function CS_IncStep(){
global $CS_Step;
$CS_Step++;
}
// Remove a level to the reported items
function CS_DecStep(){
global $CS_Step;
$CS_Step−−;
if($CS_Step <
0)
$CS_Step = 0;
}
// Log an item
function CS_Log($msg){
global $CS_Step;
for($i = 0; $i <
$CS_Step; $i++)
CS_WriteIndent();
CS_Write($msg);
}
// Write data to the target output
function CS_Write($str){
global $CS_Enabled;
if($CS_Enabled)
echo "$str";
}
// Write an indent block
function CS_WriteIndent(){
CS_Write("|   ");
}
// Beginning a new method 
function CS_EnterMethod($methodName){
CS_Log("−−> $methodName\n");
CS_IncStep(); 
}
// Exit a method
function CS_ExitMethod($methodName){
CS_DecStep(); 
CS_Log("<
−− $methodName\n");
}
// Log a note
function CS_SendNote($note){
CS_Log("[O] $note\n");
}
// Send a simple message
function CS_SendMessage($msg){
CS_Log("[M] $msg\n");
PHP HOW−TO 
20.2 Security OpenSSL 
36
}
// Log an error
function CS_SendError($msg){
CS_Log("<
b>[E] $msg<
/b>\n");
}
// Log a variable
function CS_SendVar($varName, $value){
if(is_array($value)){
CS_SendArray($value, $varName);
}else{
CS_Log("[L] $varName = \"$value\"\n");
}
}
// Write all global variables to the report
function CS_SendInputData(){
global $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_COOKIE_VARS,
$HTTP_SERVER_VARS, $HTTP_ENV_VARS, $HTTP_SESSION_VARS;
CS_Write("−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−\n");
CS_SendArray($HTTP_GET_VARS, "HTTP_GET_VARS");
CS_SendArray($HTTP_POST_VARS, "HTTP_POST_VARS");
CS_SendArray($HTTP_COOKIE_VARS, "HTTP_COOKIE_VARS");
CS_SendArray($HTTP_SERVER_VARS, "HTTP_SERVER_VARS");
CS_SendArray($HTTP_ENV_VARS, "HTTP_ENV_VARS");
CS_SendArray($HTTP_SESSION_VARS, "HTTP_SESSION_VARS");
CS_Write("−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−\n");
}
// Log an array
function CS_SendArray($array, $arrayStr = ""){
if(!empty($arrayStr))
CS_Log("\$$arrayStr");
if(count($array) == 0){
CS_Log(" = Array()\n");
}else{
CS_Write(" = Array(\n");
while(list($key2, $value2) = each($array)){
CS_WriteIndent();
if(empty($arrayStr))
CS_WriteIndent();
CS_Log("$key2");
if(!is_array($value2))
CS_Write(" => ".htmlentities($value2)."\n");
else 
CS_SendArray($value2);
}
CS_WriteIndent();
if(empty($arrayStr))
CS_WriteIndent();
CS_Log(")\n");
}
}
?>
PHP HOW−TO 
20.2 Security OpenSSL 
37
Documents you may be interested
Documents you may be interested