Posts Tagged ‘PHP’
Monday, July 14th, 2008
Both these functions allow you to quickly pick a float, or double, out of a string.
doubleval vs floatval
doubleval: 4.56571412086 seconds
floatval: 4.35375285149 seconds
Time saved: 0.211961269379 seconds; 4.8684727087%
4% or 211 nanoseconds is next to nothing. I would want to use floatval but I wouldn’t exactly be kicking myself if I slipped a doubleval into my code instead.
Tags: doubleval, floatval, Instead, kicking, myself, nanoseconds, next, nothing, PHP
Posted in PHP, tricks | No Comments »
Monday, July 14th, 2008
Tidying up a string breaks the pattern. Maybe my analysis was a little premature.
chop vs rtrim
chop: 4.73731994629 seconds
rtrim: 4.41647195816 seconds
Time saved: 0.320847988129 seconds; 7.26480301852%
rtrim is a little faster and these functions take longer at a little over 4 microseconds.
Tags: chop, faster, functions, little, microseconds, PHP, rtrim
Posted in PHP, tricks | No Comments »
Monday, July 14th, 2008
Next it is time to try some validation with is_int and is_integer.
is_int vs is_integer
is_int: 3.11394786835 seconds
is_integer: 3.42630600929 seconds
Time saved: 0.312358140945 seconds; 9.11646946006%
The difference is smaller this time but again both functions are executing in a little over 3 microseconds. is_int is faster than is_integer so again the shorter function name wins. Is this going to be a pattern?
Tags: again, difference, functions, integer, microseconds, pattern, PHP
Posted in PHP, tricks | No Comments »
Monday, July 14th, 2008
First up are the sizeof and count functions. They can both be used to count the number of items in an array but does one do it better?
sizeof vs count
sizeof: 3.75928902626 seconds
count: 3.33035206795 seconds
Time saved: 0.428936958313 seconds; 12.8796280262%
The evidence says yes. The count function was over 12% faster in this test. Both functions are fast though taking 3-4 microseconds to count an array with 100,000 items. You might think it isn’t worth it but remember count is also a character shorter. Not only is it faster to run but it is also faster to type!
Tags: array, character shorter, count, evidence, fast, faster, functions, number, PHP, remember, sizeof
Posted in PHP, tricks | No Comments »
Tuesday, July 1st, 2008
A variable variable looks like this: $$var
So, if $var = ‘foo’ and $foo = ‘bar’ then $$var would contain the value ‘bar’ because $$var can be
thought of as $’foo’ which is simply $foo which has the value ‘bar’.
Variable variables sound like a cryptic a useless concept, but they can be useful sometimes. For
example, if we have a configuration file consisting of configuration directives and values in this
format:
foo=bar
abc=123
Then it is very easy to read this file and create corresponding variables:
<?php
$fp = fopen(’config.txt’,'r’);
while(true) {
$line = fgets($fp,80);
if(!feof($fp)) {
if($line[0]==’#’ || strlen($line)<2) continue;
list($name,$val)=explode(’=',$line,2);
$$name=trim($val);
} else break;
}
fclose($fp);
?>
Along the same lines as variable variables, you can create compound variables and variable
functions.
<?php
$str = ‘var’;
$var_toaster = “Hello World”;
echo ${$str.’_toaster’};
$str(); // Calls a function named var()
${$str.’_abc’}(); // Calls a function named var_abc()
?>
Tags: configuration, consisting, corresponding, cryptic, easy, example, format, functions, PHP, read, trim, useful, values, variable, variables
Posted in PHP | 1 Comment »
Tuesday, July 1st, 2008
PHP maintains a connection status bitfield with 3 bits:
0 - NORMAL
1 - ABORTED
2 - TIMEOUT
By default a PHP script is terminated when the connection to the client is broken and the ABORTED
bit is turned on. This can be changed using the ignore_user_abort() function. The TIMEOUT bit is
set when the script timelimit is exceed. This timelimit can be set using set_time_limit().
<?php
set_time_limit(0);
ignore_user_abort(true);
/* code which will always run to completion */
?>
You can call connection_status() to check on the status of a connection.
<?php
ignore_user_abort(true);
echo “some output”;
if(connection_status()==0) {
// Code that only runs when the connection is still alive
} else {
// Code that only runs on an abort
}
?>
You can also register a function which will be called at the end of the script no matter how the script
was terminated.
<?php
function foo() {
if(connection_status() & 1)
error_log(”Connection Aborted”,0);
if(connection_status() & 2)
error_log(”Connection Timed Out”,0);
if(!connection_status())
error_log(”Normal Exit”,0);
}
register_shutdown_function(’foo’);
?>
Tags: Client, Connection, Handling, PHP, register, Script, Timed Out, timelimit, timeout, True
Posted in PHP | No Comments »
Tuesday, July 1st, 2008
When a keep-alive request is granted the established socket is kept open after each keep-alive
response. Note that a keep-alive response is only possible when the response includes a
content-length header.
request 1
request 2
request 3
request 4
20 bytes
120 bytes
60 bytes
?? bytes
You cannot rely on the keep-alive feature for any sort of application-level session state maintenance.
Using Output Buffering to get content-length
<?php
ob_start();
echo “Your Data”;
$l = ob_get_length();
Header(”Content-length: $l”);
ob_end_flush();
?>
You will have to weigh the trade-off between the extra cpu and memory that output buffering takes
against the increased effciency of being able to use keep-alive connections for your dynamic pages.
Tags: Alive, CPU, effciency, established, header, includes, Keep, PHP, REQUEST, response, socket
Posted in PHP | No Comments »
Monday, June 30th, 2008
Client/Server Request/Response
HTTP is a simple client/server protocol with stateless request/response sequences.
The Client HTTP Request
7 possible HTTP 1.1 request types: GET, PUT, POST, DELETE, HEAD, OPTIONS and TRACE.
Any number of HTTP headers can accompany a request.
GET /filename.php HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*
Accept-Charset: iso-8859-1,*,utf-8
Accept-Encoding: gzip
Accept-Language: en
Connection: Keep-Alive
Host: localhost
User-Agent: Mozilla/4.77 [en] (X11; U; Linux 2.4.5-pre4 i686; Nav)
The Server HTTP Response
HTTP/1.1 200 OK
Date: Mon, 21 May 2001 17:01:51 GMT
Server: Apache/1.3.20-dev (Unix) PHP/4.0.7-dev
Last-Modified: Fri, 26 Jan 2001 06:08:38 GMT
ETag: “503d3-50-3a711466″
Accept-Ranges: bytes
Content-Length: 80
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html
Tags: Client, Connection, Delete, get, HEAD, HTTP, Image, Linux, localhost, Options, PHP, post, PUT, REQUEST, response, server, Text, Trace
Posted in PHP | No Comments »
Monday, June 30th, 2008
Problem
Short expiry cookies depend on users having their system clocks set correctly.
Solution
Don’t depend on the users having their clocks set right. Embed the timeout based on your server’s
clock in the cookie.
<?php
$value = time()+3600 . ‘:’ . $variable;
SetCookie(’Cookie_Name’,$value);
?>
Then when you receive the cookie, decode it and determine if it is still valid.
<?php
list($ts,$variable) = explode(’:',$Cookie_Name,2);
if($ts < time()) {
…
} else {
SetCookie(’Cookie_Name’,”);
}
?>
Tags: clocks, cookie, Expiry, explode, PHP, problem, SetCookie, solution, timeout
Posted in PHP | No Comments »
Monday, June 30th, 2008
Problem
You need PHP’s built-in ftp functions for the ultra-cool script you are writing, but your service
provider does not have PHP compiled with the –enable-ftp option.
Solution
If you have a shell account on a system with the same operating system as your web server, grab the
PHP source tarball and build using:
–with-apxs –enable-ftp=shared
You can check which flags your provider used by putting a phpinfo() call in a script on your server.
<?phpinfo()?>
Once compiled, you will find a “modules/ftp.so” file which you can copy to your web server and
enable either by putting:
extension=ftp.so
in your php.ini file or by adding this to the top of your script:
<?php dl(”ftp.so”) ?>
Tags: Adding, compiled, cool, extension, flags, FTP, functions, PHP, phpinfo, problem, provider, Script, server, service, solution
Posted in PHP | No Comments »