Category Archives: Tutorials

Debian Restore php.ini

Debian Restore php.ini

Debian default php.ini:

Upload this debian default

php.ini

file via ftp then restart the server using the following command:

/etc/init.d/apache2 reload
[PHP]

WARNING:

This is the default settings file for new PHP installations. By default, PHP installs itself with a configuration suitable for development purposes, and *NOT* for production purposes. For several security-oriented considerations that should be taken before going online with your site, please consult php.ini-recommended and http://php.net/manual/en/security.php.

About

php.ini

:

This file controls many aspects of PHP’s behavior. In order for PHP to read it, it must be named ‘php.ini’. PHP looks for it in the current working directory, in the path designated by the environment variable PHPRC, and in the path that was defined in compile time (in that order). Under Windows, the compile-time path is the Windows directory. The path in which the php.ini file is looked for can be overridden using the

-c argument

in command line mode.

The syntax of the file is extremely simple. Whitespace and Lines beginning with a semicolon are silently ignored (as you probably guessed). Section headers (e.g. [Foo]) are also silently ignored, even though they might mean something in the future.

Directives are specified using the following syntax:

directive = value
Directive names are *case sensitive* - foo=bar is different from FOO=bar.

The value can be a string, a number, a PHP constant (e.g. E_ALL or M_PI), one of the INI constants (On, Off, True, False, Yes, No and None) or an expression (e.g. E_ALL & ~E_NOTICE), or a quoted string (“foo”).

Expressions in the INI file are limited to bitwise operators and parentheses:

|        bitwise OR
&        bitwise AND
~        bitwise NOT
!        boolean NOT

Boolean flags can be turned on using the values 1, On, True or Yes. They can be turned off using the values 0, Off, False or No.

An empty string can be denoted by simply not writing anything after the equal sign, or by using the None keyword:

foo =         ; sets foo to an empty string
foo = none    ; sets foo to an empty string
foo = "none"  ; sets foo to the string 'none'

If you use constants in your value, and these constants belong to a dynamically loaded extension (either a PHP extension or a Zend extension), you may only use these constants *after* the line that loads the extension.

About this file:

All the values in the php.ini-dist file correspond to the built-in defaults (that is, if no php.ini is used, or if you delete these lines, the built-in defaults will be identical).

Language Options

Enable the PHP scripting language engine under Apache

engine = On

Enable compatibility mode with Zend Engine 1 (PHP 4.x)

zend.ze1_compatibility_mode = Off

Allow the

NOTE: Using short tags should be avoided when developing applications or libraries that are meant for redistribution, or deployment on PHP servers which are not under your control, because short tags may not
be supported on the target server. For portable, redistributable code, be sure not to use short tags.

short_open_tag = On

Allow ASP-style tags

asp_tags = Off

The number of significant digits displayed in floating point numbers

precision    =  12

Enforce year 2000 compliance (will cause problems with non-compliant browsers)

y2k_compliance = On

Output buffering allows you to send header lines (including cookies) even after you send body content, at the price of slowing PHP’s output layer a bit. You can enable output buffering during runtime by calling the output
buffering functions. You can also enable output buffering for all files by setting this directive to On. If you wish to limit the size of the buffer to a certain size – you can use a maximum number of bytes instead of ‘On’, as
a value for this directive (e.g., output_buffering=4096).

output_buffering = Off

You can redirect all of the output of your scripts to a function. For example, if you set output_handler to “mb_output_handler”, character encoding will be transparently converted to the specified encoding. Setting any output handler automatically turns on output buffering.

Note:
> People who wrote portable scripts should not depend on this ini directive. Instead, explicitly set the output handler using ob_start(). Using this ini directive may cause problems unless you know what script
is doing.

> You cannot use both “mb_output_handler” with “ob_iconv_handler” and you cannot use both “ob_gzhandler” and “zlib.output_compression”.

> output_handler must be empty if this is set ‘On’ !!!! Instead you must use zlib.output_handler.

output_handler =

Transparent output compression using the zlib library. Valid values for this option are ‘off’, ‘on’, or a specific buffer size to be used for compression (default is 4KB)

Note: Resulting chunk size may vary due to nature of compression. PHP outputs chunks that are few hundreds bytes each as a result of compression. If you prefer a larger chunk size for better performance, enable output_buffering in addition.

Note: You need to use zlib.output_handler instead of the standard output_handler, or otherwise the output will be corrupted.

zlib.output_compression = Off
zlib.output_compression_level = -1

You cannot specify additional output handlers if zlib.output_compression is activated here. This setting does the same as output_handler but in a different order.

zlib.output_handler =

Implicit flush tells PHP to tell the output layer to flush itself automatically after every output block. This is equivalent to calling the PHP function flush() after each and every call to print() or echo() and each and every HTML block. Turning this option on has serious performance implications and is generally recommended for debugging purposes only.

implicit_flush = Off

The unserialize callback function will be called (with the undefined class’ name as parameter), if the unserializer finds an undefined class which should be instantiated. A warning appears if the specified function is not defined, or if the function doesn’t include/implement the missing class. So only set this entry, if you really want to implement such a callback-function.

unserialize_callback_func=

When floats & doubles are serialized store serialize_precision significant digits after the floating point. The default value ensures that when floats are decoded with unserialize, the data will remain the same.

serialize_precision = 100

Whether to enable the ability to force arguments to be passed by reference at function call time. This method is deprecated and is likely to be unsupported in future versions of PHP/Zend. The encouraged method of specifying which arguments should be passed by reference is in the function declaration. You’re encouraged to try and turn this option Off and make sure your scripts work properly with it in order to ensure they will work with future versions of the language (you will receive a warning each time you use this feature, and the argument will be passed by value instead of by reference).

allow_call_time_pass_reference = On

Safe Mode

NOTE: This is considered a “broken” security measure. Applications relying on this feature will not recieve full support by the security team. For more information please see /usr/share/doc/php5-common/README.Debian.security

safe_mode = Off

By default, Safe Mode does a UID compare check when opening files. If you want to relax this to a GID compare,
then turn on safe_mode_gid.

safe_mode_gid = Off

When safe_mode is on, UID/GID checks are bypassed when including files from this directory and its subdirectories.
(directory must also be in include_path or full path must be used when including)

safe_mode_include_dir =

When safe_mode is on, only executables located in the safe_mode_exec_dir will be allowed to be executed via the exec family of functions.

safe_mode_exec_dir =

Setting certain environment variables may be a potential security breach. This directive contains a comma-delimited list of prefixes. In Safe Mode, the user may only alter environment variables whose names begin with the
prefixes supplied here. By default, users will only be able to set environment variables that begin with PHP_ (e.g. PHP_FOO=BAR).

Note: If this directive is empty, PHP will let the user modify ANY environment variable!

safe_mode_allowed_env_vars = PHP_

This directive contains a comma-delimited list of environment variables that the end user won’t be able to change using putenv(). These variables will be protected even if safe_mode_allowed_env_vars is set to allow to change them.

safe_mode_protected_env_vars = LD_LIBRARY_PATH

open_basedir, if set, limits all file operations to the defined directory and below. This directive makes most sense if used in a per-directory or per-virtualhost web server configuration file. This directive is *NOT* affected by whether Safe Mode is turned On or Off.

NOTE: This is considered a “broken” security measure. Applications relying on this feature will not recieve full support by the security team. For more information please see /usr/share/doc/php5-common/README.Debian.security

open_basedir =

This directive allows you to disable certain functions for security reasons. It receives a comma-delimited list of function names. This directive is *NOT* affected by whether Safe Mode is turned On or Off.

disable_functions =

This directive allows you to disable certain classes for security reasons. It receives a comma-delimited list of class names. This directive is *NOT* affected by whether Safe Mode is turned On or Off.

disable_classes =

Colors for Syntax Highlighting mode. Anything that’s acceptable in would work.

highlight.string  = #DD0000
highlight.comment = #FF9900
highlight.keyword = #007700
highlight.bg      = #FFFFFF
highlight.default = #0000BB
highlight.html    = #000000

If enabled, the request will be allowed to complete even if the user aborts the request. Consider enabling it if executing long request, which may end up being interrupted by the user or a browser timing out.

ignore_user_abort = On

Determines the size of the realpath cache to be used by PHP. This value should be increased on systems where PHP opens many files to reflect the quantity of the file operations performed.

realpath_cache_size=16k

Duration of time, in seconds for which to cache realpath information for a given file or directory. For systems with rarely changing files, consider increasing this value.

realpath_cache_ttl=120

Misc:

Decides whether PHP may expose the fact that it is installed on the server (e.g. by adding its signature to the Web server header). It is no security threat in any way, but it makes it possible to determine whether you use PHP
on your server or not.

expose_php = On
Resource Limits:

max_execution_time = 60 ; Maximum execution time of each script, in seconds
max_input_time = 120 ; Maximum amount of time each script may spend parsing request data
;max_input_nesting_level = 64 ; Maximum input variable nesting level
memory_limit = 256M ; Maximum amount of memory a script may consume (128MB)

Error handling and logging:

error_reporting is a bit-field. Or each number up to get desired error
reporting level
E_ALL – All errors and warnings (doesn’t include E_STRICT)
E_ERROR – fatal run-time errors
E_RECOVERABLE_ERROR – almost fatal run-time errors
E_WARNING – run-time warnings (non-fatal errors)
E_PARSE – compile-time parse errors
E_NOTICE – run-time notices (these are warnings which often result from a bug in your code, but it’s possible that it was intentional (e.g., using an uninitialized variable and relying on the fact it’s automatically initialized to an empty string)
E_STRICT – run-time notices, enable to have PHP suggest changes to your code which will ensure the best interoperability and forward compatibility of your code
E_CORE_ERROR – fatal errors that occur during PHP’s initial startup
E_CORE_WARNING – warnings (non-fatal errors) that occur during PHP’s initial startup
E_COMPILE_ERROR – fatal compile-time errors
E_COMPILE_WARNING – compile-time warnings (non-fatal errors)
E_USER_ERROR – user-generated error message
E_USER_WARNING – user-generated warning message
E_USER_NOTICE – user-generated notice message

Examples:

Show all errors, except for notices and coding standards warnings

error_reporting = E_ALL & ~E_NOTICE

Show all errors, except for notices

error_reporting = E_ALL & ~E_NOTICE | E_STRICT

Show only errors

error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR

Show all errors except for notices and coding standards warnings

error_reporting  =  E_ALL & ~E_NOTICE

Print out errors (as a part of the output). For production web sites, you’re strongly encouraged to turn this feature off, and use error logging instead (see below). Keeping display_errors enabled on a production web site
may reveal security information to end users, such as file paths on your Web server, your database schema or other information.

possible values for display_errors:
Off – Do not display any errors
stderr – Display errors to STDERR (affects only CGI/CLI binaries!)

display_errors = "stderr"

stdout (On) – Display errors to STDOUT

display_errors = On

Even when display_errors is on, errors that occur during PHP’s start-up sequence are not displayed. It’s strongly recommended to keep display_startup_errors off, except for when debugging.

display_startup_errors = Off

Log errors into a log file (server-specific log, stderr, or error_log (below)) As stated above, you’re strongly advised to use error logging in place of error displaying on production web sites.

log_errors = Off

Set maximum length of log_errors. In error_log information about the source is added. The default is 1024 and 0 allows to not apply any maximum length at all.

log_errors_max_len = 1024

Do not log repeated messages. Repeated errors must occur in same file on same line until ignore_repeated_source is set true.

ignore_repeated_errors = Off

Ignore source of message when ignoring repeated messages. When this setting is On you will not log errors with repeated messages from different files or source lines.

ignore_repeated_source = Off

If this parameter is set to Off, then memory leaks will not be shown (on stdout or in the log). This has only effect in a debug compile, and if error reporting includes E_WARNING in the allowed list

report_memleaks = On

report_zend_debug = 0

Store the last error/warning message in $php_errormsg (boolean).

track_errors = Off

Disable the inclusion of HTML tags in error messages.
Note: Never use this feature for production boxes.

html_errors = Off

If html_errors is set On PHP produces clickable error messages that direct to a page describing the error or function causing the error in detail. You can download a copy of the PHP manual from http://www.php.net/docs.php and change docref_root to the base URL of your local copy including the leading ‘/’. You must also specify the file extension being used including the dot.

Note: Never use this feature for production boxes.

docref_root = "/phpmanual/"
docref_ext = .html

String to output before an error message.

error_prepend_string = "<font color=#ff0000>"

String to output after an error message.

error_append_string = "</font>"

Log errors to specified file.

error_log = filename

Log errors to syslog (Event Log on NT, not valid in Windows 95).

error_log = syslog
Data Handling:

Note – track_vars is ALWAYS enabled as of PHP 4.0.3

The separator used in PHP generated URLs to separate arguments. Default is “&”.

arg_separator.output = "&amp;amp;"

List of separator(s) used by PHP to parse input URLs into variables. Default is “&”.

NOTE: Every character in this directive is considered as separator!

arg_separator.input = ";&amp;amp;"

This directive describes the order in which PHP registers GET, POST, Cookie, Environment and Built-in variables (G, P, C, E & S respectively, often referred to as EGPCS or GPC). Registration is done from left to right, newer
values override older values.

variables_order = "EGPCS"

Whether or not to register the EGPCS variables as global variables. You may want to turn this off if you don’t want to clutter your scripts’ global scope with user data. This makes most sense when coupled with track_vars – in which
case you can access all of the GPC variables through the $HTTP_*_VARS[], variables.

You should do your best to write your scripts so that they do not require register_globals to be on; Using form variables as globals can easily lead to possible security problems, if the code is not very well thought of.

NOTE: applications relying on this feature will not recieve full support by the security team. For more information please see /usr/share/doc/php5-common/README.Debian.security

register_globals = Off

Whether or not to register the old-style input arrays, HTTP_GET_VARS and friends. If you’re not using them, it’s recommended to turn them off, for performance reasons.

register_long_arrays = On

This directive tells PHP whether to declare the argv&argc variables (that would contain the GET information). If you don’t use these variables, you should turn it off for increased performance.

register_argc_argv = On

When enabled, the SERVER and ENV variables are created when they’re first used (Just In Time) instead of when the script starts. If these variables are not used within a script, having this directive on will result in a
performance gain. The PHP directives register_globals, register_long_arrays, and register_argc_argv must be disabled for this directive to have any affect.

auto_globals_jit = On

Maximum size of POST data that PHP will accept.

post_max_size = 32M

Magic quotes

Magic quotes for incoming GET/POST/Cookie data.

magic_quotes_gpc = On

Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.

magic_quotes_runtime = Off

Use Sybase-style magic quotes (escape ‘ with ” instead of \’).

magic_quotes_sybase = Off

Automatically add files before or after any PHP document.

auto_prepend_file =
auto_append_file =

As of 4.0b4, PHP always outputs a character encoding by default in the Content-type: header. To disable sending of the charset, simply set it to be empty.

PHP’s built-in default is text/html

default_mimetype = "text/html"
;default_charset = "iso-8859-1"

Always populate the $HTTP_RAW_POST_DATA variable.

always_populate_raw_post_data = On
Paths and Directories:

UNIX: “/path1:/path2″

include_path = ".:/usr/share/php"

Windows: “\path1;\path2″

include_path = ".;c:\php\includes"

The root of the PHP pages, used only if nonempty. If PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root
if you are running php as a CGI under any web server (other than IIS) see documentation for security issues. The alternate is to use the cgi.force_redirect configuration below

doc_root =

The directory under which PHP opens the script using /~username used only if nonempty.

user_dir =

Directory in which the loadable extensions (modules) reside.

extension_dir = "./"

Whether or not to enable the dl() function. The dl() function does NOT work properly in multithreaded servers, such as IIS or Zeus, and is automatically disabled on them.

NOTE: this is a potential security hole and is disabled by default in debian

enable_dl = Off

cgi.force_redirect is necessary to provide security running PHP as a CGI under most web servers. Left undefined, PHP turns this on by default. You can turn it off here AT YOUR OWN RISK **You CAN safely turn this off for IIS, in fact, you MUST.**

cgi.force_redirect = 1

if cgi.nph is enabled it will force cgi to always sent Status: 200 with every request.

cgi.nph = 1

if cgi.force_redirect is turned on, and you are not running under Apache or Netscape (iPlanet) web servers, you MAY need to set an environment variable name that PHP will look for to know it is OK to continue execution. Setting this variable MAY cause security issues, KNOW WHAT YOU ARE DOING FIRST.

cgi.redirect_status_env = ;

cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP’s previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting this to 1 will cause PHP CGI to fix it’s paths to conform to the spec. A setting of zero causes PHP to behave as before. Default is 1. You should fix your scripts to use SCRIPT_FILENAME rather than PATH_TRANSLATED.

cgi.fix_pathinfo=0

FastCGI under IIS (on WINNT based OS) supports the ability to impersonate security tokens of the calling client. This allows IIS to define the security context that the request runs under. mod_fastcgi under Apache
does not currently support this feature (03/17/2002) Set to 1 if running under IIS. Default is zero.

fastcgi.impersonate = 1;

Disable logging through FastCGI connection

fastcgi.logging = 0

cgi.rfc2616_headers configuration option tells PHP what type of headers to use when sending HTTP response code. If it’s set 0 PHP sends Status: header that is supported by Apache. When this option is set to 1 PHP will send
RFC2616 compliant header. Default is zero.

cgi.rfc2616_headers = 0
File Uploads

Whether to allow HTTP file uploads.

file_uploads = On

Temporary directory for HTTP uploaded files (will use system default if not specified).

upload_tmp_dir =

Maximum allowed size for uploaded files.

upload_max_filesize = 32M

Maximum number of files that can be uploaded via a single request

max_file_uploads = 50
Fopen wrappers:

Whether to allow the treatment of URLs (like http:// or ftp://) as files.

allow_url_fopen = On

Whether to allow include/require to open URLs (like http:// or ftp://) as files.

allow_url_include = Off

Define the anonymous ftp password (your email address)

from="john@doe.com"

Define the User-Agent string

user_agent="PHP"

Default timeout for socket based streams (seconds)

default_socket_timeout = 60

If your scripts have to deal with files from Macintosh systems, or you are running on a Mac and need to deal with files from unix or win32 systems, setting this flag will cause PHP to automatically detect the EOL character in those files so that fgets() and file() will work regardless of the source of the file.

auto_detect_line_endings = Off
Dynamic Extensions:

If you wish to have an extension loaded automatically, use the following syntax:

extension=modulename.extension

For example, on Windows:

   extension=msql.dll

… or under UNIX:

   extension=msql.so

Note that it should be the name of the module only; no directory information needs to go here. Specify the location of the extension with the extension_dir directive above.

Module Settings:

[Date]
Defines the default timezone used by the date functions

date.timezone =
date.default_latitude = 31.7667
date.default_longitude = 35.2333
date.sunrise_zenith = 90.583333
date.sunset_zenith = 90.583333

[filter]

filter.default = unsafe_raw
filter.default_flags =

[iconv]

iconv.input_encoding = ISO-8859-1
iconv.internal_encoding = ISO-8859-1
iconv.output_encoding = ISO-8859-1

[sqlite]

sqlite.assoc_case = 0

[xmlrpc]

xmlrpc_error_number = 0
xmlrpc_errors = 0

[Pcre]
PCRE library backtracking limit.

pcre.backtrack_limit=100000

PCRE library recursion limit.

Please note that if you set this value to a high number you may consume all the available process stack and eventually crash PHP (due to reaching the tack size limit imposed by the Operating System).

pcre.recursion_limit=100000

[Syslog]
Whether or not to define the various syslog variables (e.g. $LOG_PID, $LOG_CRON, etc.). Turning it off is a good idea performance-wise. In runtime, you can define these variables by calling define_syslog_variables().

define_syslog_variables  = Off

[mail function]
For Win32 only.

SMTP = localhost
smtp_port = 25

For Win32 only.

sendmail_from = me@example.com

For Unix only. You may supply arguments as well (default: “sendmail -t -i”).

sendmail_path =

Force the addition of the specified parameters to be passed as extra parameters to the sendmail binary. These parameters will always replace the value of the 5th parameter to mail(), even in safe mode.

mail.force_extra_parameters =

[SQL]

sql.safe_mode = Off

[ODBC]

odbc.default_db    =  Not yet implemented
odbc.default_user  =  Not yet implemented
odbc.default_pw    =  Not yet implemented

Allow or prevent persistent links.

odbc.allow_persistent = On

Check that a connection is still valid before reuse.

odbc.check_persistent = On

Maximum number of persistent links. -1 means no limit.

odbc.max_persistent = -1

Maximum number of links (persistent + non-persistent). -1 means no limit.

odbc.max_links = -1

Handling of LONG fields. Returns number of bytes to variables. 0 means passthru.

odbc.defaultlrl = 4096

Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char. See the documentation on odbc_binmode and odbc_longreadlen for an explanation if uodbc.defaultlrl and uodbc.defaultbinmode

odbc.defaultbinmode = 1

[MySQL]
Allow or prevent persistent links.

mysql.allow_persistent = On

Maximum number of persistent links. -1 means no limit.

mysql.max_persistent = -1

Maximum number of links (persistent + non-persistent). -1 means no limit.

mysql.max_links = -1

Default port number for mysql_connect(). If unset, mysql_connect() will use the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the compile-time value defined MYSQL_PORT (in that order). Win32 will only look
at MYSQL_PORT.

mysql.default_port =

Default socket name for local MySQL connects. If empty, uses the built-in MySQL defaults.

mysql.default_socket =

Default host for mysql_connect() (doesn’t apply in safe mode).

mysql.default_host =

Default user for mysql_connect() (doesn’t apply in safe mode).

mysql.default_user =

Default password for mysql_connect() (doesn’t apply in safe mode). Note that this is generally a *bad* idea to store passwords in this file. *Any* user with PHP access can run ‘echo get_cfg_var(“mysql.default_password”) and reveal this password! And of course, any users with read access to this file will be able to reveal the password as well.

mysql.default_password =

Maximum time (in seconds) for connect timeout. -1 means no limit

mysql.connect_timeout = 60

Trace mode. When trace_mode is active (=On), warnings for table/index scans and SQL-Errors will be displayed.

mysql.trace_mode = Off

[MySQLi]
Maximum number of links. -1 means no limit.

mysqli.max_links = -1

Default port number for mysqli_connect(). If unset, mysqli_connect() will use the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the compile-time value defined MYSQL_PORT (in that order). Win32 will only look
at MYSQL_PORT.

mysqli.default_port = 3306

Default socket name for local MySQL connects. If empty, uses the built-in MySQL defaults.

mysqli.default_socket =

Default host for mysql_connect() (doesn’t apply in safe mode).

mysqli.default_host =

Default user for mysql_connect() (doesn’t apply in safe mode).

mysqli.default_user =

Default password for mysqli_connect() (doesn’t apply in safe mode). Note that this is generally a *bad* idea to store passwords in this file. *Any* user with PHP access can run ‘echo get_cfg_var(“mysqli.default_pw”) and reveal this password! And of course, any users with read access to this file will be able to reveal the password as well.

mysqli.default_pw =

Allow or prevent reconnect

mysqli.reconnect = Off

[mSQL]
Allow or prevent persistent links.

msql.allow_persistent = On

Maximum number of persistent links. -1 means no limit.

msql.max_persistent = -1

Maximum number of links (persistent+non persistent). -1 means no limit.

msql.max_links = -1

[OCI8]
enables privileged connections using external credentials (OCI_SYSOPER, OCI_SYSDBA)

oci8.privileged_connect = Off

Connection: The maximum number of persistent OCI8 connections per process. Using -1 means no limit.

oci8.max_persistent = -1

Connection: The maximum number of seconds a process is allowed to maintain an idle persistent connection. Using -1 means idle persistent connections will be maintained forever.

oci8.persistent_timeout = -1

Connection: The number of seconds that must pass before issuing a ping during oci_pconnect() to check the connection validity. When set to 0, each oci_pconnect() will cause a ping. Using -1 disables
pings completely.

oci8.ping_interval = 60

Tuning: This option enables statement caching, and specifies how many statements to cache. Using 0 disables statement caching.

oci8.statement_cache_size = 20

Tuning: Enables statement prefetching and sets the default number of rows that will be fetched automatically after statement execution.

oci8.default_prefetch = 10

Compatibility. Using On means oci_close() will not close oci_connect() and oci_new_connect() connections.

oci8.old_oci_close_semantics = Off

[PostgresSQL]
Allow or prevent persistent links.

pgsql.allow_persistent = On

Detect broken persistent links always with pg_pconnect(). Auto reset feature requires a little overheads.

pgsql.auto_reset_persistent = Off

Maximum number of persistent links. -1 means no limit.

pgsql.max_persistent = -1

Maximum number of links (persistent+non persistent).  -1 means no limit.
[code lang="php"]
pgsql.max_links = -1

Ignore PostgreSQL backends Notice message or not. Notice message logging require a little overheads.

pgsql.ignore_notice = 0

Log PostgreSQL backends Noitce message or not. Unless pgsql.ignore_notice=0, module cannot log notice message.

pgsql.log_notice = 0

[Sybase]
Allow or prevent persistent links.

sybase.allow_persistent = On

Maximum number of persistent links. -1 means no limit.

sybase.max_persistent = -1

Maximum number of links (persistent + non-persistent). -1 means no limit.

sybase.max_links = -1
sybase.interface_file = "/usr/sybase/interfaces"

Minimum error severity to display.

sybase.min_error_severity = 10

Minimum message severity to display.

sybase.min_message_severity = 10

Compatibility mode with old versions of PHP 3.0.

If on, this will cause PHP to automatically assign types to results according to their Sybase type, instead of treating them all as strings. This compatibility mode will probably not stay around forever, so try applying
whatever necessary changes to your code, and turn it off.

sybase.compatability_mode = Off

[Sybase-CT]
Allow or prevent persistent links.

sybct.allow_persistent = On

Maximum number of persistent links. -1 means no limit.

sybct.max_persistent = -1

Maximum number of links (persistent + non-persistent). -1 means no limit.

sybct.max_links = -1

Minimum server message severity to display.

sybct.min_server_severity = 10

Minimum client message severity to display.

sybct.min_client_severity = 10

[bcmath]
Number of decimal digits for all bcmath functions.

bcmath.scale = 0

[browscap]

browscap = extra/browscap.ini

[Informix]
Default host for ifx_connect() (doesn’t apply in safe mode).

ifx.default_host =

Default user for ifx_connect() (doesn’t apply in safe mode).

ifx.default_user =

Default password for ifx_connect() (doesn’t apply in safe mode).

ifx.default_password =

Allow or prevent persistent links.

ifx.allow_persistent = On

Maximum number of persistent links. -1 means no limit.

ifx.max_persistent = -1

Maximum number of links (persistent + non-persistent). -1 means no limit.

ifx.max_links = -1

If on, select statements return the contents of a text blob instead of its id.

ifx.textasvarchar = 0

If on, select statements return the contents of a byte blob instead of its id.

ifx.byteasvarchar = 0

Trailing blanks are stripped from fixed-length char columns. May help the life of Informix SE users.

ifx.charasvarchar = 0

If on, the contents of text and byte blobs are dumped to a file instead of keeping them in memory.

ifx.blobinfile = 0

NULL’s are returned as empty strings, unless this is set to 1. In that case, NULL’s are returned as string ‘NULL’.

ifx.nullformat = 0

[Session]
Handler used to store/retrieve data.

session.save_handler = files

Argument passed to save_handler. In the case of files, this is the path where data files are stored. Note: Windows users have to change this variable in order to use PHP’s session functions.

As of PHP 4.0.1, you can define the path as:

     session.save_path = "N;/path"

where N is an integer. Instead of storing all the session files in /path, what this will do is use subdirectories N-levels deep, and store the session data in those directories. This is useful if you or your OS have problems with lots of files in one directory, and is a more efficient layout for servers that handle lots of sessions.

NOTE 1: PHP will not create this directory structure automatically.
You can use the script in the ext/session dir for that purpose.
NOTE 2: See the section on garbage collection below if you choose to
use subdirectories for session storage

The file storage module creates files using mode 600 by default.
You can change that by using

     session.save_path = "N;MODE;/path"

where MODE is the octal representation of the mode. Note that this does not overwrite the process’s umask.

session.save_path = /var/lib/php5

Whether to use cookies.

session.use_cookies = 1
session.cookie_secure =

This option enables administrators to make their users invulnerable to attacks which involve passing session ids in URLs; defaults to 0.

session.use_only_cookies = 1

Name of the session (used as cookie name).

session.name = PHPSESSID

Initialize session on request startup.

session.auto_start = 0

Lifetime in seconds of cookie or, if 0, until browser is restarted.

session.cookie_lifetime = 0

The path for which the cookie is valid.

session.cookie_path = /

The domain for which the cookie is valid.

session.cookie_domain =

Whether or not to add the httpOnly flag to the cookie, which makes it inaccessible to browser scripting languages such as JavaScript.

session.cookie_httponly =

Handler used to serialize data. php is the standard serializer of PHP.

session.serialize_handler = php

Define the probability that the ‘garbage collection’ process is started on every session initialization.
The probability is calculated by using gc_probability/gc_divisor, e.g. 1/100 means there is a 1% chance that the GC process starts on each request.

This is disabled in the Debian packages, due to the strict permissions on /var/lib/php5. Instead of setting this here, see the cronjob at /etc/cron.d/php5, which uses the session.gc_maxlifetime setting below. php scripts using their own session.save_path should make sure garbage collection is enabled by setting session.gc_probability

session.gc_probability = 0
session.gc_divisor     = 100

After this number of seconds, stored data will be seen as ‘garbage’ and cleaned up by the garbage collection process.

session.gc_maxlifetime = 1440

NOTE: If you are using the subdirectory option for storing session files (see session.save_path above), then garbage collection does *not* happen automatically. You will need to do your own garbage collection through a shell script, cron entry, or some other method.

For example, the following script would is the equivalent of setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes): cd /path/to/sessions; find -cmin +24 | xargs rm

PHP 4.2 and less have an undocumented feature/bug that allows you to to initialize a session variable in the global scope, albeit register_globals is disabled. PHP 4.3 and later will warn you, if this feature is used. You can disable the feature and the warning separately. At this time, the warning is only displayed, if bug_compat_42 is enabled.

session.bug_compat_42 = 1
session.bug_compat_warn = 1

Check HTTP Referer to invalidate externally stored URLs containing ids. HTTP_REFERER has to contain this substring for the session to be considered as valid.

session.referer_check =

How many bytes to read from the file.

session.entropy_length = 0

Specified here to create the session id.

session.entropy_file =

session.entropy_length = 16

session.entropy_file = /dev/urandom

Set to {nocache,private,public,} to determine HTTP caching aspects or leave this empty to avoid sending anti-caching headers.

session.cache_limiter = nocache

Document expires after n minutes.

session.cache_expire = 180

trans sid support is disabled by default.
- Use of trans sid may risk your users security.
- Use this option with caution.
- User may send URL contains active session ID to other person via. email/irc/etc.
- URL that contains active session ID may be stored in publically accessible computer.
- User may access your site with the same session ID always using URL stored in browser’s history or bookmarks.

session.use_trans_sid = 0

Select a hash function:
0: MD5 (128 bits)
1: SHA-1 (160 bits)

session.hash_function = 0

Define how many bits are stored in each character when converting the binary hash data to something readable.

4 bits: 0-9, a-f
5 bits: 0-9, a-v
6 bits: 0-9, a-z, A-Z, "-", ","
session.hash_bits_per_character = 4

The URL rewriter will look for URLs in a defined set of HTML tags. form/fieldset are special; if you include them here, the rewriter will add a hidden field with the info which is otherwise appended to URLs. If you want XHTML conformity, remove the form entry.

Note that all valid entries require a “=”, even if no value follows.

url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset="

[MSSQL]
Allow or prevent persistent links.

mssql.allow_persistent = On

Maximum number of persistent links. -1 means no limit.

mssql.max_persistent = -1

Maximum number of links (persistent+non persistent). -1 means no limit.

mssql.max_links = -1

Minimum error severity to display.

mssql.min_error_severity = 10

Minimum message severity to display.

mssql.min_message_severity = 10

Compatibility mode with old versions of PHP 3.0.

mssql.compatability_mode = Off

Connect timeout

mssql.connect_timeout = 5

Query timeout

mssql.timeout = 60

Valid range 0 – 2147483647. Default = 4096.

;mssql.textlimit = 4096

Valid range 0 – 2147483647. Default = 4096.

mssql.textsize = 4096

Limits the number of records in each batch. 0 = all records in one batch.

;mssql.batchsize = 0

Specify how datetime and datetim4 columns are returned On => Returns data converted to SQL server settings Off => Returns values as YYYY-MM-DD hh:mm:ss

mssql.datetimeconvert = On

Use NT authentication when connecting to the server

mssql.secure_connection = Off

Specify max number of processes. -1 = library default

 msdlib defaults to 25
 FreeTDS defaults to 4096
 mssql.max_procs = -1

Specify client character set. If empty or not set the client charset from freetds.comf is used. This is only used when compiled with FreeTDS

mssql.charset = "ISO-8859-1"

[Assertion]
Assert(expr); active by default.

assert.active = On

Issue a PHP warning for each failed assertion.

assert.warning = On

Don’t bail out by default.

assert.bail = Off

User-function to be called if an assertion fails.

assert.callback = 0

Eval the expression with current error_reporting(). Set to true if you want error_reporting(0) around the eval().

assert.quiet_eval = 0

[COM]
path to a file containing GUIDs, IIDs or filenames of files with TypeLibs

com.typelib_file =

allow Distributed-COM calls

com.allow_dcom = true

autoregister constants of a components typlib on com_load()

;com.autoregister_typelib = true

register constants casesensitive

com.autoregister_casesensitive = false

show warnings on duplicate constant registrations

com.autoregister_verbose = true

[mbstring]
language for internal character representation.

mbstring.language = Japanese

internal/script encoding.
Some encoding cannot work as internal encoding. (e.g. SJIS, BIG5, ISO-2022-*)

mbstring.internal_encoding = EUC-JP

http input encoding.

mbstring.http_input = auto

http output encoding. mb_output_handler must be registered as output buffer to function

mbstring.http_output = SJIS

enable automatic encoding translation according to mbstring.internal_encoding setting. Input chars are converted to internal encoding by setting this to On.

Note: Do _not_ use automatic encoding translation for portable libs/applications.

mbstring.encoding_translation = Off

automatic encoding detection order. auto means

mbstring.detect_order = auto

substitute_character used when character cannot be converted one from another

mbstring.substitute_character = none;

overload(replace) single byte functions by mbstring functions. mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(), etc. Possible values are 0,1,2,4 or combination of them. For example, 7 for overload everything.

0: No overload
1: Overload mail() function
2: Overload str*() functions
4: Overload ereg*() functions
mbstring.func_overload = 0

[FrontBase]

fbsql.allow_persistent = On
fbsql.autocommit = On
fbsql.show_timestamp_decimals = Off
fbsql.default_database =
fbsql.default_database_password =
fbsql.default_host =
fbsql.default_password =
fbsql.default_user = "_SYSTEM"
fbsql.generate_warnings = Off
fbsql.max_connections = 128
fbsql.max_links = 128
fbsql.max_persistent = -1
fbsql.max_results = 128

[gd]
Tell the jpeg decode to libjpeg warnings and try to create a gd image. The warning will then be displayed as notices
disabled by default

gd.jpeg_ignore_warning = 0

[exif]
Exif UNICODE user comments are handled as UCS-2BE/UCS-2LE and JIS as JIS. With mbstring support this will automatically be converted into the encoding given by corresponding encode setting. When empty mbstring.internal_encoding is used. For the decode settings you can distinguish between motorola and intel byte order. A decode setting cannot be empty.

exif.encode_unicode = ISO-8859-15
exif.decode_unicode_motorola = UCS-2BE
exif.decode_unicode_intel    = UCS-2LE
exif.encode_jis =
exif.decode_jis_motorola = JIS
exif.decode_jis_intel    = JIS

[Tidy]
The path to a default tidy configuration file to use when using tidy

tidy.default_config = /usr/local/lib/php/default.tcfg

Should tidy clean and repair output automatically?

WARNING: Do not use this option if you are generating non-html content such as dynamic images

tidy.clean_output = Off

[soap]
Enables or disables WSDL caching feature.

soap.wsdl_cache_enabled=1

Sets the directory name where SOAP extension will put cache files.

soap.wsdl_cache_dir="/tmp"

(time to live) Sets the number of second while cached file will be used instead of original one.

soap.wsdl_cache_ttl=86400

Local Variables:
tab-width: 4
End:

PHP Blacklisting Multiple IP Address

Whether we like it or not, it is sometimes necessary to block people from using your site. The reasons: Some may leave endless spam comments, mindless trolls, or perhaps they continue to take flying stabs at the security of your website. And as predictably random as much of the malicious activity happens to be, it is virtually guaranteed that you will be hunted by at least a few persistent IP addresses that, for whatever reason, have latched on and just won’t let go.

Here is a simple way to blacklist multiple IP addresses with PHP:

To start with, we will have to add the IP using this code:

<?php
// The blacklisted IPs.
$denied_ips = array(
            '123.456.789.1',
            '127.0.0.1',
            '67.220.200.75'
        );

Open a PHP tag and then create a variable name

$denied_ips

contains an array of the 3 assign values which are the IPs we are dealing with.

Next step is to get the visitor’s IP address:

// The function to get the visitor's IP.
function getUserIP()
{
    //check ip from share internet
    if (!empty($_SERVER['HTTP_CLIENT_IP']))
    {
      $ip=$_SERVER['HTTP_CLIENT_IP'];
    }
    //to check ip is pass from proxy
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
    {
      $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    else
    {
      $ip=$_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}
 
//The user
$visitorIp = getUserIP();

This is the function we are going to use to get the IP of the visitor. Some people just like to use

$_SERVER['REMOTE_ADDR']

which is fine but i believe by this method we will get more accurate data.

The final step is to match the IPs:

This code uses the function array_search. Searches the array for a given value and returns the corresponding key if successful.

// Now let's search if this IP is blacklisted
$status = array_search($visitorIp, $denied_ips);
 
// Let's check if $status has a true OR false value.
if($status !== false)
    {
    echo "YOUR IP HAS BEEN BANNED.";
    // header("Location: http://zombo.com");
    exit;
    }
?>

All PHP Scripts on this website are provided by phpscripts4u.com where you can find all the latest PHP code snippets, plugins and libraries.

PHP Create Twitter Widget

Creating Twitter Widget using PHP, to use cURL to get your Twitter status and cache it into a file on your server.

Twitter has currently an API limit of 150 calls per hour, and to make sure that you will get a successful response it is recommended to use your username/password. Otherwise Twitter will use the API calls that are for everyone with your IP/Server’s IP and it will start to give an error saying that you have used up your API limit very quickly.


Making the Widget

Caching and HTML:

This will check if the cache file exists and then how old it is. This is then written to your server in the cache file.

<?php
function twitterCapture() {
        // Set your username and password here
        $user = 'twitter_username'; // Twitter Username
        $password = 'xxxxxxxx'; // Twitter Password
 
        $tw = curl_init("http://twitter.com/statuses/user_timeline/{$user}.json"); //grabs the JSON format of your timelines
        curl_setopt($tw,CURLOPT_TIMEOUT, 30); // Timeout (for when Twitter is down)
        curl_setopt($tw,CURLOPT_USERPWD,$user . ":" . $password); // Uses your username and password
        curl_setopt($tw,CURLOPT_RETURNTRANSFER,1); // returns
        $json = curl_exec ($tw); // Executes the cURL and puts it into the varible
        return $json; // returns what was grabbed
}
$cachefile = 'cache/twitterCache.json'; // the location to your cache file
$cachetime = 10 * 60; // set the cach time 10 * 60 (1 hour)
    // if the file exists       // if and the time it was created is less then cache time
if ( (file_exists($cachefile)) &amp;&amp; ( time() - $cachetime < filemtime($cachefile) ) ) {
// script will not use the cached version
}else{ // the file didn't exist or is old
    ob_start(); // turn on the output buffering
    $fp = fopen($cachefile, 'w'); // opens for writing only or will creat it's not there
    fwrite($fp, twitterCapture()); // writes to the file what was grabbed from the previouse function
    fclose($fp); // closes
    ob_end_flush(); // finishes and flushes the output buffer
}
?>
 
<!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">
 
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Little Twitter Widget</title>
 
        <!-- Start of CSS -->
    <link rel="stylesheet" type="text/css" href="css/reset.css" />
    <link rel="stylesheet" type="text/css" href="css/main.css" />
        <!-- Start of JS -->
    <script type="text/javascript" src="js/jquery-1.4.js"></script>
    <script type="text/javascript" src="js/main.js"></script>
</head>
<body>
<div id="twitter_widget_top" class="center" ></div><!-- The top of the widget -->
<div id="twitter_widget_body" class="center"> <!-- The body wrap -->
 
    <div id="twitter_widget_tweet"> <!-- The tweet area -->
        <div id="twitter_movement"> <!-- To position the icon reletive to -->
            <a id="twitter_icon" href="http://twitter.com/"></a> <!-- Twitter icon -->
            <div id="twitterWrap"> <!-- The blue area -->
                <div id="twitter">    <!-- The main twitter data -->
                    <noscript>JavaScript must be on to view tweets</noscript> <!-- Incase no js -->
                    <p class="tweet">Loading...</p> <!-- The Tweet -->
                    <p class="created_at"></p> <!-- Date created -->
                </div>
            </div>
            <p class="clear"></p> <!-- Clear the floats -->
        </div>
        <a href="" class="previous tweetNav"></a><!-- Next button -->
        <p class="follow_me">Follow me - <a href="http://twitter.com/alexanderbor" class="screen_name"></a></p> <!-- Follow me link -->
        <a href="" class="next tweetNav"></a> <!-- Pre button -->
        <p class="clear"></p>
    </div>
</div>
<div id="twitter_widget_bottom" class="center"></div><!-- Bottom of widet -->
<p class="info">Join my <span class="followedNumber"></span> followers - <span class="user_name"></span></p>
</body>
The CSS:

@charset "UTF-8";
/* CSS Document */
/* UTULITIES */
.clear{clear: both;}
.push{height: 30px;}
/* END */
/* ORDER PAGE CORRECTLY */
*{margin: 0; padding: 0;}
html{ position: relative;}
body{font-family: Helvetica, Verdana, Arial, sans-serif; width: 100%; height: 100%; background: #1E202A;color:#3494E5;}
.center{margin: 0 auto;}
a{text-decoration:none;color:#4AA1EF; overflow: hidden}
a:hover{color: #3D658E;}
/* END */
#twitter_widget_top{background: url(../images/top.jpg) top left no-repeat; width: 475px; height: 30px;margin-top:81px; } /*  Top of widget  */
#twitter_widget_body{background: url(../images/body.jpg) left repeat-y; width: 475px;} /*Â  BODYÂ  */
#twitter_widget_bottom{background: url(../images/bottom.jpg) bottom left no-repeat; width: 475px; height: 21px; } /*  foot  */
#twitter_icon{background:url("../images/twitter_icon.jpg") no-repeat scroll center bottom transparent;height:50px;margin-left:30px;position:absolute;top:33%;width:50px;}
#twitter_icon:hover{ background-position: top center;} /*  Move icon on hover  */
#twitterWrap{   Â /*  Don't show overflow and set a width  */
overflow: hidden;
 width: 350px;
 float: right;
 background: #1E202A;
margin: 20px 20px 0;
 border: 1px solid #062333;
-moz-border-radius: 5px;
 -webkit-border-radius: 5px;
}
#twitter_movement{position: relative;} /*  To align icon to  */
.tweet { /*  The Tweet  */
font-family:"Lucida Grande",Verdana,Arial,sans-serif;
font-size:15px;
line-height:18px;
padding:15px;
position:relative;
text-align:center;
}
 
.next{background:url("../images/arrows.jpg") no-repeat right top transparent;float:right;height:14px;margin-right:20px;margin-top:10px;width:21px;}
.next:hover{background-position: right center;} /* Next button  */
.previous{background:url("../images/arrows.jpg") no-repeat left bottom transparent;float:left;height:14px;margin-left: 103px;margin-top:10px;width:21px;}
.previous:hover{background-position: left center;}
 
.created_at {display:block;font-size:12px;font-style:italic;padding-right:20px;text-align:right;}
.follow_me{display:block;float:left;margin:10px;text-align:center;width:280px;}
Javascript:

We will use the

$.getJSON

to grab our cached file to get the twitter status as this makes it a lot easier.

$(function() {
$.getJSON('cache/twitterCache.json', function(data) { // get the file and put in var "data"
 
//      Add information about the user
    $('.followedNumber').html( data[0].user.followers_count); // follow count
    $('.screen_name').html( data[0].user.screen_name); // screen name
    $('.statuses_count').html(data[0].user.statuses_count); // amount of tweets
    $('.user_name').html(data[0].user.name); // username
 
    // defult variables
 
    var totalAmount = "",   // total amount of items
        moveOut = "",       // If we are moving in or out the animation
        moveIn = "",        // If we are moving in or out the animation
        current = 0,        // Set the current to 0
        $i = 0;             // Set i to 0
 
$.each(data, function(){ // for each of the "data"
    totalAmount = $i; // set the varible total amount to i
    $i++; // plus one to i
});
    clicked(current);  // run the function to grab the first item
 
    $(".next").click(function(){            // when next is clicked
        if ($(this).hasClass('active') ){   // if it's active
            current = current + 1;          // set current to + 1
            moveOut = "+";                  // make the move out animation correct
            moveIn = "-";                   // same with move in
            clicked(current);               // run the function and pass in current
        };                                  // no else, so nothing will happen if we click when not active
 
    });
    $(".previous").click(function(){        // almost the same as above
        if ($(this).hasClass('active') ){
            current = current - 1;          // minus one from the tcurrent
            moveOut = "-";
            moveIn  = "+";
            clicked(current);
        };
    });
 
//
//  Time function from the Twitter Blog JS file
//
function relative_time(time_value) {
  var values = time_value.split(" ");
  time_value = values[1] + " " + values[2] + ", " + values[5] + " " + values[3];
  var parsed_date = Date.parse(time_value);
  var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
  var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
  delta = delta + (relative_to.getTimezoneOffset() * 60);
 
  if (delta < 60) {
    return 'less than a minute ago';
  } else if(delta < 120) {
    return 'about a minute ago';
  } else if(delta < (60*60)) {
    return (parseInt(delta / 60)).toString() + ' minutes ago';
  } else if(delta < (120*60)) {
    return 'about an hour ago';
  } else if(delta < (24*60*60)) {
    return 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
  } else if(delta < (48*60*60)) {
    return '1 day ago';
  } else {
    return (parseInt(delta / 86400)).toString() + ' days ago';
  }
}
 
    function clicked(current){ // when clicked function runs
        // get the width to be able to slide the tweet area
        var tweetAreaWidth = $('#twitterWrap').width();
        // fade out the time it was created
        $('.created_at').animate({"opacity": "0"}, 400); // fade out the date
        $('.tweet').animate({"right": moveOut +  tweetAreaWidth + "px"}, function(){ // move the .tweet div left/right then
            $('.tweet') .html( data[ current ].text  ); // add the next tweet
            var time = relative_time( data[ current ].created_at ); // get the next date
            $('.created_at').html(time);    // put data into useable format
            var tweetAreaHeight = $('#twitter').height(); // get the height of the tweet area now its got the tweet inside
            $('#twitterWrap').animate({"height": tweetAreaHeight + "px"}, function(){ // change the tweet height to the new div
                $('.tweet').css({"right":  moveIn + tweetAreaWidth + "px"}).animate({"right": 0}); // move in the tweet
                $('.created_at').animate({"opacity": "1"}, 500); // fade in the date
            });
        });
// dealing with the click buttons
        $('.tweetNav').removeClass('inactive').addClass('active'); // remove inactive from all buttons and add active
        if(current == totalAmount){ // if current is equal to the total amount make the next button inactive
            $('.next').removeClass('active').addClass('inactive');
        }
        if(current == 0){
            $('.previous').removeClass('active').addClass('inactive');
        }
        $('.inactive').animate({"opacity": "0.3"}, 1000); // make inactive buttons fade out
        $('.active').animate({"opacity": "1"}, 500); // made active buttons fade in
        $('.tweetNav').click( function(){ return false; }); // return false
 
    }; // end of clicked function
});// end of json
});

This is to see how to access the elements that are returned is using FireBug as this lets us see the name of the json elements and what is nested in them.

All PHP Scripts on this website are provided by phpscripts4u.com where you can find all the latest PHP code snippets, plugins and libraries.

Twitter oAuth Stuck in Callback Loop

Twitter oAuth Stuck in Callback Loop

This problem can sometimes be caused by disabling or refusing to accept cookies. If not, the page cannot access the

$_GET parameters

in the URL then it will keep loooping if you have a check to look for them to see what stage your at in the oAuth process.

$dbc = mysqli_connect

must precede all the

mysqli_real_escape_string calls

to make it work. This is because you need an active mysqli connection to use that function.

Check your code for:

mysqli_real_escape_string

You need to change database connection to mysqli:

http://www.php.net/manual/en/mysqli.construct.php

This function was causing the loop:

    // Escape/handler any bad characters passed through request variables.
    private static function _escape($values)
    {
        debug('calling '.__FUNCTION__.'()...');
        if(!is_array($values))
        {
            /* Quote if not integer */
            if ( !is_numeric($values) || $values{0} == '0' )
            {
                $values = stripslashes($values);
                // $values = mysqli_real_escape_string(self::$db, $values);

            }
        }
        return $values;
    }

Options for escaping:

                $values = stripslashes($values);
                // $values = mysqli_real_escape_string(self::$db, $values);
                // $values = mysql_real_escape_string(self::$db, $values);

                //alternative to mysql_real_escape_string
                $search = array("\x00", "\n", "\r", "\\", "'", "\"", "\x1a");
                $replace = array("\\x00", "\\n", "\\r", "\\\\" ,"\'", "\\\"", "\\\x1a");
                $values = str_replace($search, $replace, $value);

I successfully fixed the problem by converting my db to the new mysqli way: Convert old mysql to new mysqli database connections in PHP code.

Full working escape function using mysqli:

    // Escape/handler any bad characters passed through request variables.
    private static function _escape($values)
    {
        debug('calling '.__FUNCTION__.'()...');
        if(!is_array($values))
        {
            /* Quote if not integer */
            if ( !is_numeric($values) || $values{0} == '0' )
            {
                if (!self::$db) self::_dbconnect();
                $values = stripslashes($values);
                self::$db->set_charset("utf8"); //set default character set
                $values = mysqli_real_escape_string(self::$db, $values);
                debug($values);
            }
        }
        return $values;
    }

This can be used with get vars to process

$_GET variables

safely to protect from mysql database injection attacks.

    // Processes request vars into local vars dynamically.
    private static function _getvars()
    {
        debug('calling '.__FUNCTION__.'()...');
        $vars = array();
        //load in GET variables
        foreach($_GET as $n => $v)
        {
            $vars['GET'][$n] = self::_escape($v);
        }

        //load in POST variables
        foreach($_POST as $n => $v)
        {
            $vars['POST'][$n] = self::_escape($v);
        }
        return $vars;
    }

All PHP Scripts on this website are provided by phpscripts4u.com where you can find all the latest PHP code snippets, plugins and libraries.

PHP Create Cron Job

PHP Create Cron Job

What is a Cron Job and what it does?

The cronTab, or “Cron Table”, is a Linux system process enables users to schedule jobs (commands or shell scripts) to run periodically at certain times or dates.

The cronTab command creates a cronTab file containing commands and how often cron should execute them. Each entry in a cronTab file consists of six fields, specified in the following order:

minute(s)
hour(s)
day(s)
month(s)
weekday(s)
command(s)

A cron job will always have five columns each of which represent a chronological ‘operator’ followed by the full path and command to execute:

    * * * * * home/path/to/command/the_command.sh
Example:
If one wanted to schedule a task for 12am on the first day of every month it would look something like this:

    0 0 1 * * home/path/to/command/the_command.sh

If we wanted to schedule a task to run every Saturday at 8:30am we’d write it as follows:

    30 8 * * 6 home/path/to/command/the_command.sh

To Create Cron Job with PHP:

php -q /home/username/public_html/scriptname.php

All PHP Scripts on this website are provided by phpscripts4u.com where you can find all the latest PHP code snippets, plugins and libraries.

Submit Form through PHP CURL

Simple code snippets to submit form through PHP CURL. This is to show you PHP CURL way to post form data. You can use PHP Jquery and Ajax to make it more fancy. But we will make it simple.
We will use this form as example:

<form action="form-action-curl.php" method="POST">
<input type=hidden name="oid" value="00D400000009mUU">
<input type=hidden name="retURL" value="http://thank-you.html">
<label for="first_name">First Name</label><input  id="first_name" maxlength="40" name="first_name" size="20" type="text" /><br>
<label for="last_name">Last Name</label><input  id="last_name" maxlength="80" name="last_name" size="20" type="text" /><br>
<label for="street">Address</label><textarea name="street"></textarea><br>
<label for="city">City</label><input  id="city" maxlength="40" name="city" size="20" type="text" /><br>
<label for="zip">Zip</label><input  id="zip" maxlength="20" name="zip" size="20" type="text" /><br>
<label for="email">Email</label><input  id="email" maxlength="80" name="email" size="20" type="text" /><br>
<label for="phone">Phone</label><input  id="phone" maxlength="40" name="phone" size="20" type="text" /><br>
<input type="submit" name="submit">
</form>
This is standard PHP CURL script (form-action-curl.php) to post from you can use anywhere without any modification in from you can add more fields if you need.

//Initialize the $query_string variable for later use
$query_string = "";
//If there are POST variables
if ($_POST) {
//Initialize the $kv array for later use
$kv = array();
//For each POST variable as $name_of_input_field => $value_of_input_field
foreach ($_POST as $key => $value) {
//Set array element for each POST variable (ie. first_name=Arsham)
$kv[] = stripslashes($key)."=".stripslashes($value);
}
//Create a query string with join function separted by &amp;
$query_string = join("&amp;", $kv);
}
//Check to see if cURL is installed ...
if (!function_exists('curl_init')){
die('Sorry cURL is not installed!');
}
//The original form action URL from Step 2 :)
$url = 'https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8';
//Open cURL connection
$ch = curl_init();
//Set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, count($kv));
curl_setopt($ch, CURLOPT_POSTFIELDS, $query_string);
//Set some settings that make it all work :)
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
//Execute SalesForce web to lead PHP cURL
$result = curl_exec($ch);
//close cURL connection
curl_close($ch);
if($result=='ok')
{
//echo '<script>alert("Posted -- ")</script>';
}
// Here you can write mysql query to insert data in table.
$insert_tbl_index_page= "insert into tbl_form_data(first_name,last_name,street,city,zip,phone,email)values('$first_name','$last_name','$street','$city','$zip','$phone','$email')";

All PHP Scripts on this website are provided by phpscripts4u.com where you can find all the latest PHP code snippets, plugins and libraries.

Add and Disable ETags through .htaccess

How to add and disable ETags through

.htaccess

? An ETag, or entity tag, is part of HTTP and it provides a unique identifier for the resource being supplied.

Use this code to setup ETags on your server, using following

.htaccess

:

FileETag MTime Size
<ifmodule mod_expires.c>
  <filesmatch "\.(jpg|gif|png|css|js)$">
       ExpiresActive on
       ExpiresDefault "access plus 1 year"
   </filesmatch>
</ifmodule>

Though sometimes developer want to be disable ETags from headers. To disable ETags, make sure to include following snippet in your

.htaccess file

:

Header unset ETag
FileETag None

Something like this:

All PHP Scripts on this website are provided by phpscripts4u.com where you can find all the latest PHP code snippets, plugins and libraries.

PHP iPhone Scripts

Here’s a simple tutorial, PHP iPhone scripts that you can use to develop custom applications for the iPhone ;)

The software development kit for the iPhone is standard Dynamic HTML through the Web browser. Hence, you can use all the familiar HTML, CSS, and Ajax front-end technologies in combination with your choice of back-end technology (PHP, Rails, Java technology—whatever you would like).

Reviewing all that… didn’t you think it was time to develop something specifically for the iPhone now? If you did think then the next question is… what to develop?

Well, have you heard about “Salling Clicker” application? Sailing Clicker turns any phone into a remote control for a Macintosh and now, computers running Windows, as well. Using the clicker application on the phone, you can launch AppleScripts on Mac computers to do all kinds of useful things, such as controlling Apple iTunes or KeyNote. On smart phones, this functionality required a small downloaded application on the phone. But since the iPhone is so complicated with regards to downloading stuff, it doesn’t allow you to download special applications, boo! :( No worries though, coz below is what else that you can do =)
Build a command list:

Building the application starts with defining some commands that the iPhone remote control will present for you to select.

You use an XML file to define the commands:

<commands>
  <command title="Next Song">
    tell application "iTunes" to next track
  </command>
  <command title="Previous Song">
    tell application "iTunes" to back track
  </command>
</commands>

The file is a list of

 

tags. Each tag has a title attribute that defines a human readable title for the command. And the content of the

 

tag is the AppleScript code to execute when the command is requested.

To wrap this XML file, you must write a PHP V5 Command class first that reads the file, returns the command names, and runs the commands using the Mac OS X osascript command. The code for this class is:

<?php
class Commands
{
  private $_commands;

  function __construct()
  {
    $this->_commands = array();

    $doc = new DOMDocument();
    $doc->load('commands.xml');
    $cmds = $doc->getElementsByTagName( 'command' );
    foreach( $cmds as $cmd )
    {
      $this->_commands []= array(
        'title' => $cmd->getAttribute('title'),
        'command' => $cmd->firstChild->nodeValue
      );
    }
  }

  function getCommands()
  {
    $cmds = array();
    foreach( $this->_commands as $cmd )
    {
      $cmds []= $cmd['title'];
    }
    return $cmds;
  }

  function runCommand( $id )
  {
    $ph = popen( "osascript", "w" );
    fwrite( $ph, $this->_commands[$id]['command'] );
    fclose( $ph );
  }
}
?>

The class starts by loading up the

commands.xml

file. It reads in the file using the

DomDocument PHP class

. Then, it finds all the command arguments using

getElementsByTagName

. When it has the

 

tags as an array, the class loads

the _commands

member variable with the titles and AppleScript commands.

Two additional methods are defined:
- The

getCommands()

method, which simply returns a list of the names
- The

runCommand()

method, which given an index runs that command using the osascript command-line AppleScript executor.

Build an Interface:

It’s time to add an interface. Just to make sure everything is working properly, we’ll put a fairly rudimentary Interface on it. This Interface is:

<html><body>
<?php
require_once('commands.php');
$cmds = new Commands();
?>
<?php
$id = 0;
foreach( $cmds->getCommands() as $cmd ) {
?>
<a href="do.php?id=<?php echo($id);?>"><?php echo( $cmd ); ?></a><br/>
<?php $id++; } ?>
</body></html>
The script first gets the

Command

class, and then asks it for the lists of commands using the

getCommands()

method. Then, the script builds a set of links to the

do.php

page using the command index number and the name of the command that the

Commands

class returned.

It will output something like this once you navigate your page in Safari:

This would work but it wouldn’t feel like the iPhone. Use the iUI toolkit to extend the Interface. Use this code to do so:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<title>Mac Controller</title>
<meta name="viewport"
  content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=no;"/>
<style type="text/css" media="screen">@import "iui/iui.css";</style>
<script type="application/x-javascript" src="iui/iui.js"></script>
</head>
<body>
<div class="toolbar">
  <h1 id="pageTitle"></h1>
  <a id="backButton" class="button" href="#"></a>
</div>
<?php
require_once('commands.php');
$cmds = new Commands();
?>
<ul title="Commands" selected="true">
<?php
$id = 0;
foreach( $cmds->getCommands() as $cmd ) {
?>
<li>
<a href="do.php?id=<?php echo($id);?>"><?php echo( $cmd ); ?></a>
</li>
<?php $id++; } ?>
</ul>
</body></html>
Include the iUI CSS file that has all the styles that give the page its iPhone look at the top of the file. Then, you include the iUI JavaScript file that handles all the interactivity. Use the

Commands

class to get the list of commands. With that list, you build an unordered list

(<ul>)

with list item elements for each item

(<li>)

.

You will see something like this: The

index.php

page as rendered in Safari

Remember that Safari now runs on both Windows and Mac so no worries if you use Windows. Of course, the PHP that runs this code must be on a Mac to run the

osascript

command and the AppleScript code. But you could use system commands if you want to run this on DOS or UNIX systems.

Lastly, create the

do.php

file that

index.php

references to run the actual commands. This class is:

<?php
require_once('commands.php');

$cmds = new Commands();
$cmds->runCommand( $_GET['id'] );
?>

Now, you can use Safari to browse to the page locally and just click the links to check whether the application works. If everything is in order, iTunes will go to the next or previous song depending on what you select.

On your installation, edit the

/etc/httpd/httpd.conf

file, change the User setting to your user name, and change the Group setting to staff. Then reboot your Apache server by running this command line:

% apachectl graceful

With that done, your iTunes Interface will flip back and forth between tracks when you click the links. You can then turn on your iPhone and use the Safari browser to go to your local machine by IP address and access the application, as long as your laptop and your iPhone are on the same Wi-Fi network.

All PHP Scripts on this website are provided by phpscripts4u.com where you can find all the latest PHP code snippets, plugins and libraries.

PHP Scripts to Send SMS

In this post, what we will share with you are some of PHP script examples to send SMS.

Text messaging has become extremely widespread throughout the world to the point where an increasing number of web applications have integrated SMS to notify users of events, etc., directly through their mobile devices.

Example 1

SMS messages are just sent to special email addresses, so they can be sent from server to phone with minimal effort.

The form:

<form id="sms" name="sms" method="post" action="scripts/send_sms.php">
<table width="400">
  <tr>
    <td align="right" valign="top">From:</td>
    <td align="left"><input name="from" type="text" id="from" size="30" /></td>
  </tr>
  <tr>
    <td align="right" valign="top">To:</td>
    <td align="left"><input name="to" type="text" id="to" size="30" /></td>
  </tr>
  <tr>
    <td align="right" valign="top">Carrier:</td>
    <td align="left"><select name="carrier" id="carrier">
      <option value="verizon">Verizon</option>
      <option value="tmobile">T-Mobile</option>
      <option value="sprint">Sprint</option>
      <option value="att">AT&amp;amp;T</option>
      <option value="virgin">Virgin Mobile</option>
    </select></td>
  </tr>
  <tr>
    <td align="right" valign="top">Message:</td>
    <td align="left"><textarea name="message" cols="40" rows="5" id="message"></textarea></td>
  </tr>
  <tr>
    <td colspan="2" align="right"><input type="submit" name="Submit" value="Submit" /></td>
    </tr>
</table>
</form>

The handler:

<?php
$from = $_POST['from'];
$to = $_POST['to'];
$carrier = $_POST['carrier'];
$message = stripslashes($_POST['message']);

if ((empty($from)) || (empty($to)) || (empty($message))) {
header ("Location: sms_error.php");
}

else if ($carrier == "verizon") {
$formatted_number = $to."@vtext.com";
mail("$formatted_number", "SMS", "$message");
// Currently, the subject is set to "SMS". Feel free to change this.

header ("Location: sms_success.php");
}

else if ($carrier == "tmobile") {
$formatted_number = $to."@tomomail.net";
mail("$formatted_number", "SMS", "$message");

header ("Location: sms_success.php");
}

else if ($carrier == "sprint") {
$formatted_number = $to."@messaging.sprintpcs.com";
mail("$formatted_number", "SMS", "$message");

header ("Location: sms_success.php");
}

else if ($carrier == "att") {
$formatted_number = $to."@txt.att.net";
mail("$formatted_number", "SMS", "$message");
header ("Location: sms_success.php");
}

else if ($carrier == "virgin") {
$formatted_number = $to."@vmobl.com";
mail("$formatted_number", "SMS", "$message");

header ("Location: sms_success.php");
}
?>

Sending a text message to a cell phone through PHP is just a matter of appending the correct suffix to the number and using the

mail() function

.

Example 2

To send and receive SMS messages from a webpage you need to have scripting support enabled on your webserver. The scripting support can be PHP or ASP. The examples presented here are using PHP.

(The very first step in setting up this system, is to install “your prefer” SMS Gateway to your computer and to verify, that you can send SMS messages from the gateway manually)

Create the HTML Form for SMS sending (To get this solution working you need to save the

sendsms.html

file into the

WWW

directory of your webserver):

C:\www\sendsms.html
<html>
 <body>
   <h1>My SMS form</h1>
   <form method=post action='sendsms.php'>
   <table border=0>
   <tr>
     <td>Recipient</td>
     <td><input type='text' name='recipient'></td>
   </tr>
   <tr>
     <td>Message</td>
     <td><textarea rows=4 cols=40 name='message'></textarea></td>
   </tr>
   <tr>
     <td> </td>
     <td><input type=submit name=submit value=Send></td>
   </tr>
   </table>
   </form>
 </body>
</html>

It should output something like this:

Example 3

This code requires phpmailer class though.

<?php
require("class.phpmailer.php");

$mail = new PHPMailer();

$mail->IsSMTP(); // set mailer to use SMTP
$mail->Host = "ipipi.com"; // specify main and backup server
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Port =25;
$mail->Username = "YoureIPIPIUsername"; // SMTP username at ipipi
$mail->Password = "YourPassword"; // SMTP password

$mail->From = "YourUserName@ipipi.com";
$mail->FromName = "Your Name";
$mail->AddAddressTo("DestinationPhoneNumber@sms.ipipi.com", "Receiver Name");

$mail->Subject = "Compression Option goes here - find out more";
$mail->Body = "Your Message";

if(!$mail->Send())
{
   echo "Message could not be sent. <p>";
   echo "Mailer Error: " . $mail->ErrorInfo;
   exit;
}
echo "Message has been sent";
?>

Example 4

The following example PHP script,

sendsms.php

, can be used to send an SMS text message via NowSMS with PHP.

<?php



function SendSMS ($host, $port, $username, $password, $phoneNoRecip, $msgText) {

/* Parameters:

$host - IP address or host name of the NowSMS server

$port - "Port number for the web interface" of the NowSMS Server

$username - "SMS Users" account on the NowSMS server

$password - Password defined for the "SMS Users" account on the NowSMS Server

$phoneNoRecip - One or more phone numbers (comma delimited) to receive the text message

$msgText - Text of the message

*/


$fp = fsockopen($host, $port, $errno, $errstr);

if (!$fp) {

echo "errno: $errno \n";

echo "errstr: $errstr\n";

return $result;

}

fwrite($fp, "GET /?Phone=" . rawurlencode($phoneNoRecip) . "&amp;Text=" .

 rawurlencode($msgText) . " HTTP/1.0\n");

if ($username != "") {

$auth = $username . ":" . $password;

$auth = base64_encode($auth);

fwrite($fp, "Authorization: Basic " . $auth . "\n");

}

fwrite($fp, "\n");

$res = "";

while(!feof($fp)) {

$res .= fread($fp,1);

}

fclose($fp);

return $res;

}

/* This code provides an example of how you would call the SendSMS function from within

a PHP script to send a message.  The response from the NowSMS server is echoed back from the script.

$x   = SendSMS("127.0.0.1", 8800, "username", "password", "+44999999999", "Test Message");

echo $x;

*/


?>

The SendSMS function is the important part of the example. This is the function that needs to be included in your PHP script.

All PHP Scripts on this website are provided by phpscripts4u.com where you can find all the latest PHP code snippets, plugins and libraries.

PHP Scripts Linux

The following code snippets are some example PHP Scripts in Linux that you might find very helpful.
How to startup PHP script in Linux SUSE:
In case you are using Linux SUSE / APACHE server / PHP 5.1 and you don’t know how to start up your PHP script this code might be the solution.

At the bare minimum, you could create an executable script in

/etc/rc2.d

named

S99socket

containing:

#!/bin/sh
/path/to/php /path/to/socket.php &amp;

Since Suse appears to use

init

scripts to launch apps at start up and you will need to write a custom

init

script to launch your

socket.php

script.

How to run PHP script in shell:
Simply put the following line at the beginning of your PHP file.

#!/path/to/php
#!/path/to/php

is the path you installed PHP in Linux.

In case you don’t know where PHP is installed in your Linux. Type the following command:

which php

This will output the PHP path from your Linux.

The output will be something like this:

/usr/bin/php

For example:

hello.php
#!/usr/bin/php
<?php
echo "Hello World!";
?>

Make your php script executable by typing:

chmod +x hello.php

And then run it:

./hello.php

You’ll see:

    Hello World! 
Compile a PHP script in Linux:

We all know PHP scripts don’t actually compile until they are run. However, for instance you want to create a small simple program and compile it to a binary without requiring the PHP binary. You can do that with phpcompiler… but if you just want to run it like a script, you may not need to compile it, but just run it via the command line.

All PHP Scripts on this website are provided by phpscripts4u.com where you can find all the latest PHP code snippets, plugins and libraries.