pdf to image converter using c# : Create pdf forms Library software class asp.net winforms azure ajax 201212-ug-php-oracle-188476012-part377

Commonly Seen Connection and Environment Errors
Commonly Seen Connection and Environment Errors
Establishing a database connection is the common place for installation and configuration 
errors to manifest themselves.
Common errors when running PHP with the OCI8 extension are due to an incorrectly set 
environment. Check the environment variables are set and exported, see Setting the Oracle 
Environment on Linux, in the chapter Installing and Configuring PHP. On Windows the 
common problem is having multiple versions of Oracle libraries installed.
The bottom line is that your environment should be set correctly and consistently. The 
Apache process must have access to Oracle libraries and configuration files. Environment 
variables must be set in the shell that starts Apache, not in PHP scripts.
Check the Apache Error Log File
Start troubleshooting by checking the Apache error_log file for errors so you try to resolve the 
underlying cause, not some consequential symptom.
Check Runtime Errors
If php.ini is not configured to display errors in normal output then your web pages may simply 
show as blank page in your browser. Enable output with display_errors in php.ini. 
Alternatively, check the web server or PHP logs for the error messages.
Check php.ini is Loaded
Check that the correct php.ini file is being loaded. To find the php.ini location run a script 
phpinfo.php:
Script 8: phpinfo.php
<?php
phpinfo();
?>
Near the top of its output are lines like:
...
Configuration File (php.ini) Path => /opt/php54/lib
Loaded Configuration File => /opt/php54/lib/php.ini
...
This immediately indicates the php.ini directory and, in this example, that it is being correctly 
read. If the directory did not contain a php.ini file, the loaded value would read “(none)”.
Older versions of PHP may only show one line:
Configuration File (php.ini) Path => /opt/php/lib/php.ini
If php.ini was not found, the old output would only show the directory name:
Configuration File (php.ini) Path => /opt/php/lib
Check the phpinfo.php output with both command line PHP and via a browser. 
107
Create pdf forms - C# PDF Field Edit Library: insert, delete, update pdf form field in C#.net, ASP.NET, MVC, Ajax, WPF
Online C# Tutorial to Insert, Delete and Update Fields in PDF Document
allow saving of pdf form; change font size pdf form
Create pdf forms - VB.NET PDF Field Edit library: insert, delete, update pdf form field in vb.net, ASP.NET, MVC, Ajax, WPF
How to Insert, Delete and Update Fields in PDF Document with VB.NET Demo Code
add text field pdf; create a fillable pdf form from a word document
Connecting to Oracle Using OCI8
You can override the default location of php.ini by adding the desired file location to your 
httpd.conf:
PHPIniDir "/your/path/to/php.ini"
The path should include the filename.
Check OCI8 is enabled in php.ini
Check that OCI8 is enabled in php.ini, if required. 
On Windows exactly one of the lines extension=php_oci8.dll or or 
extension=php_oci8_11g.dll must be in php.ini
On Linux, if OCI8 was statically compiled into the PHP binary then no directive is needed 
but if OCI8 was built as a shared library the line should be extension=oci8.so.
If all is well in your php.ini, the output of phpinfo() will contain a section showing OCI8 
parameters. See the section on Checking OCI8 and PDO_OCI Installation in the chapter 
Installing and Configuring PHP.
Set Oracle Environment Variables
Never use PutEnv() to set Oracle environment variable in PHP scripts. This is the number one 
cause of unexpected user problem. Variables should be set and exported in the environment 
that starts the web server.
If you think your environment variables are not set, refer to Setting the Oracle 
Environment on Linux in the chapter Installing and Configuring PHP.
If you are expecting shell environment variables to be passed to PHP when starting 
Apache, do not use the Linux service command to start Apache, since this clears the 
environment.
Check Apache Has Oracle File Access
The OCI8 extension always needs to find Oracle libraries, globalization data, error message 
data and optionally needs the Oracle Network tnsnames.ora and sqlnet.ora files. Not finding 
the libraries can lead to Apache startup errors about OCI8 not being initialized, such as 
“OCIEnvNlsCreate() failed”, or to script runtime errors like:
PHP Fatal error:  Call to undefined function oci_connect()
This particular error means that the OCI8 extension is not loaded in PHP. 
Check that ORACLE_HOME and/or LD_LIBRARY_PATH on Linux, or PATH on Windows are 
valid. If you built PHP with an ORACLE_HOME, then check the Oracle home directory is 
readable by the Apache process owner. If you are using an Oracle Database 10g Release 2 
database other than the Express Edition, refer to the $ORACLE_HOME/install/changePerm.sh 
script in later Oracle patch sets.
Check that the tnsnames.ora file (if you use one for connection) is readable. Restart 
Apache after making changes to Oracle Network configuration files so that PHP re-reads the 
updated files.
A tool such as strace or truss can be used on PHP to see which files PHP needs access to.
108
C# PDF: PDF Document Viewer & Reader SDK for Windows Forms
Advanced APIs for C#.NET WinForms PDF viewing application; Step-by-step guidance on how to create C#.NET Windows Forms PDF document viewer.
create a form in pdf; add image to pdf form
C# PDF: How to Create PDF Document Viewer in C#.NET with
C#.NET developers to create PDF Windows viewer for PDF document viewing, annotating, redacting, saving and printing in Visual C#.NET Windows Forms projects.
change font in pdf fillable form; adding a text field to a pdf
Commonly Seen Connection and Environment Errors
Avoid Multiple Oracle Library Clashes
A potential source of problems on Windows is having multiple installations of Oracle libraries. 
Using mismatched versions of Oracle libraries and files can lead to PHP returning errors such 
as:
ORA-12705: Cannot access NLS data files or invalid environment specified
or:
OCIEnvNlsCreate() failed. There is something wrong with your system 
Users of older versions of OCI8 may see the one of the equivalent errors:
OCIEnvCreate() failed. There is something wrong with your system
or
OCIEnvInit() failed. There is something wrong with your system
Instead of starting Apache as a service that inherits the mixed Oracle environment, write a 
script that sets PATH with the correct Oracle libraries and then starts Apache. With the IIS web 
server, use the IIS manager and set PATH in the php-cgi.exe entry in the FastCGI settings.
Some users move the Instant Client DLLs to the System, Apache, or PHP directory as a 
quick solution, but this is not recommended as a long term solution.
Using a dependency checker program can help determine which Oracle libraries are being 
loaded on Windows.
Use the Right PHP Binary
On Windows 64-bit if you use Oracle 64-bit libraries you might get an OCIEnvNLSCreate() 
error or you might see:
Unable to load dynamic library 'C:\Program Files (x86)\PHP\ext\php_oci8_11g.dll' 
- %1 is not a valid Win32 application.
There is only a 32-bit version of PHP on Windows so you need to make sure to use Oracle 32-
bit client libraries.
Use the Right Connection String
Your oci_connect() calls need to know which database to connect to. If an error like this 
occurs:
Error while trying to retrieve text for error ORA-12154
it means two problems happened. First, a connection error ORA-12154 occurred. The second 
problem is the “Error while trying to retrieve text” message, indicating Oracle’s message files 
were not found, most likely because ORACLE_HOME is not correctly set. 
The expected description for ORA-12154 is actually:
ORA-12154: TNS:could not resolve service name
109
C# PDF Converter Library SDK to convert PDF to other file formats
How to Use C#.NET XDoc.PDF Component to Convert PDF Document to Various Document and Image Forms in Visual C# .NET Able to create convert PDF to SVG
best program to create pdf forms; adding text fields to pdf acrobat
C# Create PDF Library SDK to convert PDF from other file formats
Batch create adobe PDF from multiple forms. Support .NET WinForms, ASP.NET MVC in IIS, ASP.NET Ajax, Azure cloud service, DNN (DotNetNuke), SharePoint.
create a pdf form in word; best pdf form creator
Connecting to Oracle Using OCI8
This error indicates that the connection string is not valid, or the tnsnames.ora file (if one is 
being used) wasn't readable. The result is that OCI8 does not know which machine to connect 
to. A similar error:
ORA-12514 TNS:listener does not currently know of service requested in connect 
descriptor 
means that OCI8 was able to contact a machine hosting Oracle, but the expected database is 
not running on that computer. For example, if Oracle Database 11g XE is currently running on 
your computer and you try to connect to localhost/abc then you will get this error.
Other Troubleshooting Tips
Here are some further things to check if you are having problems connecting or configuring 
OCI8:
Turn on error reporting in php.ini (remember to turn it off for production deployment) or 
do it in each script with:
error_reporting(E_ALL);             // In PHP 5.3 use E_ALL|E_STRICT
ini_set('display_errors', 'On');
You might get “OCIEnvNlsCreate() failed” if PHP links with an older Oracle version at 
runtime than the one it was compiled with. If you have multiple versions of Oracle 
installed on Linux then you might be able to use LD_PRELOAD or equivalent to force 
Apache to load the desired Oracle libclntsh.so file.
If scripts sometime fail with ORA-12516 TNS:listener could not find available handler with 
matching protocol stack then use DRCP connection pooling or increase the Oracle 
Database processes parameter. Pooling is discussed in the chapter PHP Connection 
Pooling and High Availability. Changing the database parameter is discussed in the 
chapter Testing PHP and the OCI8 Extension.
On Windows make sure to reboot after modifying the PATH environment variable.
If you copied tnsnames.ora from Windows to Linux you will get an error if it still contains:
SQLNET.AUTHENTICATION_SERVICES = (NTS)
If there is a client sqlnet.ora (which would be in the same directory as tnsnames.ora), 
check what the names.default_domain value is. This value will be automatically appended 
to the TNS string in PHP before being looked up in tnsnames.ora. For example, if 
sqlnet.ora had names.default_domain = oracle.com and the connection call was 
oci_connect($u, $p, 'XE'), then tnsnames.ora would need to have an entry 
'XE.oracle.com = (DESCRIPTION ...)'
Only one version of the PHP module can be loaded in Apache at a time. It is possible to 
get the error “OCIEnvNlsCreate() failed” if httpd.conf has two LoadModule lines like:
LoadModule php5_module modules/libphp5.so
LoadModule php6_module modules/libphp6.so
110
VB.NET PDF: VB Code to Create PDF Windows Viewer Using DocImage
detailed sample code on how to create and customize NET, VB.NET, ASP.NET and .NET Windows Forms. Besides PDF document Windows viewer, RasterEdge .NET Imaging
chrome save pdf form; android edit pdf forms
VB.NET Create PDF from images Library to convert Jpeg, png images
VB.NET PDF - Create PDF from Multiple Image Forms in VB.NET. VB.NET Guide for Converting Raster Images to PDF File Using VB.NET Sample Code.
create a form in pdf from word; change font in pdf form
Closing Oracle Connections
Closing Oracle Connections
At the end of each script, connections opened with oci_connect() or oci_new_connect() are 
automatically closed. You can also explicitly close these connections by calling:
oci_close($c);
Any uncommitted data is rolled back. The function has no effect on persistent connections. 
(See the section on connection pooling in the PHP Connection Pooling and High Availability 
chapter for caveats).
If a long running script only spends a small amount of time interacting with the database, 
close connections as soon as possible to free database resources for other users. When the 
Apache or PHP command line process terminates, all database connections are closed.
The oci_close() function was a “no-op” prior to the re-factoring of OCI8 in PHP 5.1. That 
is, it had no functional code, and never actually closed a connection. You could not explicitly 
close connections even if you wanted to! You can revert to this old behavior with a php.ini 
setting:
oci8.old_oci_close_semantics = On
Closing Connections and Variable Scope
PHP resources such as connection resources work by reference counting. Only when all PHP 
references to the database connection are finished will it actually be closed and database 
resources freed. This example shows the effect of reference counting:
Script 9: close.php
<?php
$c = oci_connect("hr", "welcome", "localhost/XE");
$s = oci_parse($c, "select * from locations");
oci_execute($s);
oci_fetch_all($s, $res);
// oci_free_statement($s);  // Uncomment this for the oci_close() to work
oci_close($c);
echo "Sleeping . . .";
sleep(10);
echo "Done";
?>
While close.php is sleeping, if you query the database as a privileged user:
SQL> select username from v$session where username is not null;
you will see that HR is still shown as connected until the sleep() finishes and the script 
terminates. This is because the oci_parse() call creating the statement resource $s internally 
increases the reference count on $c. The database connection is not closed until PHP's end-of-
script processing destroys $s.
111
C# PDF Convert to Images SDK: Convert PDF to png, gif images in C#
Converter control easy to create thumbnails from PDF pages. C# developers to perform high performance conversions from PDF document to multiple image forms.
adding text fields to pdf; add picture to pdf form
VB.NET PDF Converter Library SDK to convert PDF to other file
Various image forms can be converted from PDF document, including Png, Bmp, Gif images and .NET Graphics. Conversion of Image Forms to PDF.
change font size pdf form reader; adding image to pdf form
Connecting to Oracle Using OCI8
An oci_free_statement($s) call will explicitly decrease 
the
reference count on $c allowing 
the oci_close() to have an immediate effect. If this freeing call is uncommented in the 
example, the SQL*Plus query will show the database connection was explicitly closed before 
the sleep() starts. 
Another commonly seen idiom to close resources is to assign null to them:
$s = null;
Variables and other kinds of resources may also increase the reference count on a connection, 
and in turn have their own reference count which must be zero before they can destroyed. 
The reference count will decrease if the variables goes out of scope or are assigned new 
values.
In the next example script, close2.php, the variables $c1 and $c2 are the same database 
connection because oci_connect() returns the same connection resource when called more 
than once in a script with the same credentials. If you query v$session while the script is 
running you will only see one open connection. The physical database connection is released 
only when $c1 and c2 are both closed. Also the statement resource must be freed, which 
happens automatically when do_query() completes and $s goes out of scope. 
Script 10: close2.php
<?php
function do_query($c, $query)
{
$s = oci_parse($c, $query);
oci_execute($s);
oci_fetch_all($s, $res);
echo "<pre>";
var_dump($res);
echo "</pre>";
}
$c1 = oci_connect('hr', 'welcome', 'localhost/XE');
$c2 = oci_connect('hr', 'welcome', 'localhost/XE'); // Reuses $c1 DB connection
do_query($c1, 'select user from dual');  // Query 1 works
oci_close($c1);                          // DB connection doesn't get closed
do_query($c1, 'select user from dual');  // Query 2 fails
do_query($c2, 'select user from dual');  // Query 3 works
oci_close($c2);                          // DB connection is now closed
?>
Variable $c1 is not usable after oci_close($c1) is executed: PHP has dissociated it from the 
connection. But the database connection remains open because $c2 still references it. The 
script outcome is that the first and third queries succeed but the second one fails.
Transactions and Connections
Uncommitted data is rolled back when a connection is closed or at the end of a script. For 
oci_pconnect() this means subsequent scripts reusing a cached database connection will not 
see any data that should not be shared.
112
C# PDF Page Insert Library: insert pages into PDF file in C#.net
Support to create new page to PDF document in both web server-side application and Windows Forms. Ability to add PDF page number in preview.
cannot save pdf form; change tab order in pdf form
C# PDF File Compress Library: Compress reduce PDF size in C#.net
Comments, forms and multimedia. RootPath + "\\" 3.pdf"; String outputFilePath = Program.RootPath + "\\" 3_optimized.pdf"; // create optimizing options
add photo to pdf form; changing font size in a pdf form
Closing Oracle Connections
Avoid letting database transactions remain open if a second oci_connect() or 
oci_pconnect() call with the same user credentials is executed within a script, or if 
oci_close() is used. Making sure data is committed or rolled back first can prevent hard to 
debug edge cases where data is not being stored as expected.
The next chapter covers database transactions in more detail.
Session State With Persistent Connections
It is possible for a script to change session attributes for oci_pconnect() that are not reset at 
the end of the script. (The Oracle term session is effectively the same as the PHP term 
connection). One example is the globalization setting for the date format:
$c = oci_pconnect("hr", "welcome", "localhost/XE");
do_query($c, "select sysdate from dual");
$s = oci_parse($c, "alter session set nls_date_format=’YYYY-MM-DD HH24:MI:SS’");
$r = oci_execute($s);
do_query($c, "select sysdate from dual");
The first time this is called in a browser, the two dates returned by the queries are:
18-APR-07
2007-04-18 14:21:09
The first date has the Oracle default format. The second is different because the ALTER 
SESSION command changed the format.
Calling the script a second time gives:
2007-04-18 14:21:10
2007-04-18 14:21:10
The persistent connection has retained the session setting and the first query no longer uses 
the system default format. This only happens if the same Apache process serves both HTTP 
requests. If a new Apache process serves the second request then it will open a new 
connection to the database, which will have the original default date format. (Also the system 
will have two persistent connections left open instead of one.)
Session changes like this may not be a concern. Your applications may never need to do 
anything like it, or all connections may need the same values anyway. If there is a possibility 
incorrect settings will be inherited, make sure your application resets values after connecting.
Optional Connection Parameters
The oci_connect()oci_new_connect() and oci_pconnect() functions take an optional extra 
two parameters:
Connection character set
Connection session mode
Connection Character Set
The character set is a string containing an Oracle character set name, for example, JA16UEC or 
AL32UTF8:
113
Connecting to Oracle Using OCI8
$c = oci_connect("hr", "welcome", "localhost/XE", "AL32UTF8");
When not specified or NULL is passed, the NLS_LANG environment variable setting is used.
The character set determines how Oracle translates data when it is transferred from the 
database to PHP. If the database character set is not equivalent to the OCI8 character set, 
some data may get converted abnormally. It is recommended to set this parameter to 
improve performance and guarantee a known value is used.
It is up to your application to handle returned data correctly, perhaps by using PHP’s 
mb_string, iconv or intl extensions. Globalization is discussed in more detail in the 
Globalization chapter.
Connection Session Mode
The session mode parameter allows privileged or externally authenticated connections to be 
made. For example:
$c = oci_connect("hr", "welcome", "localhost/XE", "AL32UTF8", OCI_SYSDBA);
Connection Privilege Level
The OCI8 extension allows privileged SYSDBA and SYSOPER connections. Privileged 
connections are disabled by default. They can be enabled in php.ini using:
oci8.privileged_connect = 1
The SYSDBA and SYSOPER privileges give you the ability to change the state of the database, 
perform data recovery, and even access the database when it has not fully started. Be very 
careful about exposing this on customer facing web sites, that is, do not do it! It might be 
useful for command line PHP scripts in very special circumstances.
When you installed Oracle, the SYS administrative user account was automatically created 
with the password that you supplied. All base tables and views for the database data 
dictionary are stored in the SYS schema – they are critical for the operation of Oracle. By 
default, the SYSDBA privilege is assigned only to user SYS, but it and SYSOPER can manually 
be granted to other users.
Operating System Authenticated Privileged Connections
You can have the operating system perform the authentication for privileged connections 
based around the operating system user that is running the web server system process. An 
operating system authenticated privileged connection in PHP is equivalent to the SQL*Plus 
connection:
$ sqlplus / as sydba
For / as sysdba access (where no username and password is used) in PHP, all these must be 
true:
The operating system process user is a member of the OS dba group
PHP is linked with the same ORACLE_HOME software that the database is using (not 
Oracle Instant Client)
114
Optional Connection Parameters
The database is your default local database, for example, specified by the ORACLE_SID 
environment variable
oci8.privileged_connect = 1 in php.ini.
Scripts that contain operating system authenticated privileged connection calls will connect 
successfully:
$c = oci_connect("/", "", null, null, OCI_SYSDBA);
If PHP is invoked by Apache, the library path needs to contain the same Oracle libraries as 
used by the database. Also the nobody user must be in the privileged Oracle group, for 
example, in the operating system dba group. This is not recommended.
Similarly, AS SYSOPER access is available for members of the oper group. In PHP use 
OCI_SYSOPER in oci_connect().
On Windows, the operating system groups are called ORA_DBA and ORA_OPER.
Remote Privileged Access
When OCI8 uses Oracle Instant Client, a username and password must be given when 
connecting to a database. These connections are considered “remote” from the database 
because the libraries used by PHP are not those used by the running database.
Remote users can make privileged connections only when they have been given the 
appropriate Oracle access. In SQL*Plus a privileged session would be started like:
$ sqlplus username/password@sid as sysdba
The database will not permit the (possibly physically) “remote” operating system to authorize 
access. An extra Oracle password file needs to be created and a password needs to be used in 
the database connection.
To set up a password file, check the database initialization parameter 
remote_login_passwordfile is EXCLUSIVE. This is the default value. To do this, log in to the 
operating system shell as the Oracle database software owner, and start SQL*Plus:
$ sqlplus / as sysdba
SQL> show parameter remote_login_passwordfile
NAME                          TYPE        VALUE
----------------------------- ----------- ------------
remote_login_passwordfile     string      EXCLUSIVE
A setting of EXCLUSIVE means the password file is only used with one database and not 
shared among several databases on the host. It enables you to have multiple users connect to 
the database as themselves, and not just as SYS. If this parameter is not set to EXCLUSIVE, 
you can change the value in SQL*Plus by entering a command similar to:
SQL> alter system set remote_login_passwordfile='exclusive'   
2    scope=spfile sid='*';
From the operating system shell, create an Oracle password file:
$ $ORACLE_HOME/bin/orapwd file=$ORACLE_HOME/dbs/acct.pwd \
> password=secret entries=10
115
Connecting to Oracle Using OCI8
This creates a password file named acct.pwd that allows up to 10 privileged users with 
different passwords (this number can be changed later). The file is initially created with the 
password secret for users connecting with the username SYS.
To add a new user to the password file use SQL*Plus:
SQL> create user c1 identified by c1pw;
SQL> grant connect to c1;
SQL> grant sysdba to c1;
SQL> select * from v$pwfile_users;
USERNAME                       SYSDBA SYSOPER
------------------------------ ------ -------
SYS                            TRUE   TRUE
C1                             TRUE   FALSE
Now in PHP you can use the following connection command:
$c = oci_connect("c1", "c1pw", 'localhost/XE', null, OCI_SYSDBA);
One feature of a privileged connection is that if you issue a SELECT USER FROM DUAL 
statement, any OCI_SYSDBA connection will show the user as SYS not C1. A connection made 
with OCI_SYSOPER will show a user of PUBLIC.
Password Handling in PHP Applications
The examples in this book hard code the database password in each PHP script. Real 
applications need to be more careful with password management. 
PHP operates in a stateless way but a typical application needs database access over a 
number of sequential HTTP requests. Once the user has logged into the web application you 
don't want to store their plaintext password in a cookie and reuse it for database connection 
on their next web request because storing it this way is a security risk. So web applications 
typically connect to the database using one pre-determined database schema and do their 
own application-specific authorization.
The first problem is how to protect that schema. A typical PHP approach to avoid hard 
coding the database password in scripts is to set it in an environment variable. The variable is 
passed through to PHP with Apache's PassEnv. Whenever Apache is started or the machine 
rebooted, the variable must be manually set. The value is then available to PHP scripts in the 
$_ENV global:
$c = oci_connect('hr', $_ENV['HRPASSWORD'], 'localhost/XE');
Note that on Linux the service httpd start command only passes the LANG and TERM 
variables, so Apache must be started with /usr/sbin/apachectl for this to work on Oracle Linux.
External Authentication With PHP OCI8
Instead of storing the database username and password in PHP scripts or environment 
variables, database access can be authenticated by an outside system. Once this 
authentication system is configured, PHP scripts connect like:
$c = oci_connect("/", "", "mynetalias", null, OCI_CRED_EXT);
where mynetalias is a connect name configured in a tnsnames.ora file. No username or 
password is stored in the PHP code.
116
Documents you may be interested
Documents you may be interested