I have a feeling its due to the differences in PHP version installed. The server that doesn’t properly execute the code is running PHP Version 4.3.9.
Here is the section of code that doesn’t work.
// Function to find browser name
function getBrowser() {
$u_agent = $_SERVER['HTTP_USER_AGENT'];
$bname = 'Unknown';
$platform = 'Unknown';
$version= "";
//First get the platform?
if (preg_match('/linux/i', $u_agent)) {
$platform = 'Linux';
}
elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
$platform = 'Mac';
}
elseif (preg_match('/windows|win32/i', $u_agent)) {
$platform = 'Windows';
}
// Next get the name of the useragent yes seperately and for good reason
if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent))
{
$bname = 'Internet Explorer';
$ub = "MSIE";
}
elseif(preg_match('/Firefox/i',$u_agent))
{
$bname = 'Mozilla Firefox';
$ub = "Firefox";
}
elseif(preg_match('/Chrome/i',$u_agent))
{
$bname = 'Google Chrome';
$ub = "Chrome";
}
elseif(preg_match('/Safari/i',$u_agent))
{
$bname = 'Apple Safari';
$ub = "Safari";
}
elseif(preg_match('/Opera/i',$u_agent))
{
$bname = 'Opera';
$ub = "Opera";
}
elseif(preg_match('/Netscape/i',$u_agent))
{
$bname = 'Netscape';
$ub = "Netscape";
}
elseif(preg_match('/Android/i',$u_agent))
{
$bname = 'Android';
$ub = "Android";
}
elseif(preg_match('/iPad/i',$u_agent))
{
$bname = 'iPad';
$ub = "iPad";
}
elseif(preg_match('/iPhone/i',$u_agent))
{
$bname = 'iPhone';
$ub = "iPhone";
}
elseif(preg_match('/BlackBerry/i',$u_agent))
{
$bname = 'BlackBerry';
$ub = "BlackBerry";
}
// finally get the correct version number
$known = array('Version', $ub, 'other');
$pattern = '#(?<browser>' . join('|', $known) .
')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
if (!preg_match_all($pattern, $u_agent, $matches)) {
// we have no matching number just continue
}
// see how many we have
$i = count($matches['browser']);
if ($i != 1) {
//we will have two since we are not using 'other' argument yet
//see if version is before or after the name
if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
$version= $matches['version'][0];
}
else {
$version= $matches['version'][1];
}
}
else {
$version= $matches['version'][0];
}
// check if we have a number
if ($version==null || $version=="") {$version="?";}
return array(
'userAgent' => $u_agent,
'name' => $bname,
'version' => $version,
'platform' => $platform,
'pattern' => $pattern
);
}
// now try it
$ua=getBrowser();
// Make browser and variables readable
$browser = $ua['name'] . " v" . $ua['version'];
$user_agent = $ua['userAgent'];
edit: Clarification, here are the outputted error messages (thanks for the heads up)
Warning: Compilation failed: unrecognized character after (?< at offset 3 in /var/www/vhosts/staging.xxxxxxxxx.com/httpdocs/feedback/feedback-accept.php on line 150
Notice: Undefined index: browser in /var/www/vhosts/staging.xxxxxxxxx.com/httpdocs/feedback/feedback-accept.php on line 155
Fatal error: Call to undefined function: strripos() in /var/www/vhosts/staging.xxxxxxxxx.com/httpdocs/feedback/feedback-accept.php on line 159
Thanks for the help you guys the information and advice has been excellent.
Here is the phpinfo() of the server the script doesn’t work on
Without seeing the actual error is pretty hard, but I guess that the culprit is strripos(), which is available only on PHP > 5
Edit after your update: I guessed right. And, incidentally, while looking on here, I found this:
Fatal error: Call to undefined function: strripos()
which has a code veeery similar to yours and an accepted solution, you might refer to that SO question then (be sure to credit the answerers there if you find it useful)