for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types=1);
namespace Selami\Stdlib;
use function basename;
use function strpos;
use function substr;
use function trim;
class BaseUrlExtractor
{
public static function getBaseUrl(array $httpServerData): string
$protocol = self::getProtocol($httpServerData);
$host = self::getHost($httpServerData);
$uriPath = $httpServerData['REQUEST_URI'] ?? '';
$uriPath
This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.
$myVar = 'Value'; $higher = false; if (rand(1, 6) > 3) { $higher = true; } else { $higher = false; }
Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.
$myVar
$higher
$filename = $httpServerData['SCRIPT_FILENAME'] ?? '';
$scriptName = $httpServerData['SCRIPT_NAME'];
$phpSelf = $httpServerData['PHP_SELF'];
$baseUrl = self::getRelativeBaseUrl($scriptName, $phpSelf, $filename);
return trim($protocol . '://' . $host . $baseUrl, '/');
}
public static function getProtocol(array $httpServerData): string
if (isset($httpServerData['HTTP_X_FORWARDED_PROTO'])) {
return $httpServerData['HTTP_X_FORWARDED_PROTO'];
return isset($httpServerData['HTTPS']) && $httpServerData['HTTPS'] !== 'Off' ? 'https' : 'http';
public static function getHost($httpServerData): string
return $httpServerData['HTTP_HOST'];
public static function getRelativeBaseUrl($scriptName, $phpSelf, $filename): string
$scriptName
This check looks from parameters that have been defined for a function or method, but which are not used in the method body.
// Backtrack up the SCRIPT_FILENAME to find the portion
// matching PHP_SELF.
$baseUrl = '/';
$basename = basename($filename);
if ($basename) {
$path = ($phpSelf ? trim($phpSelf, '/') : '');
$basePos = strpos($path, $basename) ?: 0;
$baseUrl .= substr($path, 0, $basePos);
return $baseUrl;
This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.
Both the
$myVar
assignment in line 1 and the$higher
assignment in line 2 are dead. The first because$myVar
is never used and the second because$higher
is always overwritten for every possible time line.