Skip to content

Commit

Permalink
Merge bbb85e9 into 210700a
Browse files Browse the repository at this point in the history
  • Loading branch information
fisharebest committed Sep 9, 2018
2 parents 210700a + bbb85e9 commit 7064135
Show file tree
Hide file tree
Showing 5 changed files with 274 additions and 260 deletions.
72 changes: 36 additions & 36 deletions src/Php.php
@@ -1,7 +1,7 @@
<?php

/**
* PHP Polyfill
* PHP Polyfill.
*
* @author Greg Roach <fisharebest@gmail.com>
* @copyright (c) 2016 Greg Roach
Expand All @@ -10,41 +10,41 @@

namespace Fisharebest\PhpPolyfill;

use Symfony\Polyfill\Php54\Php54 as SymfonyPhp54;

/**
* Class Php - polyfills for poor implementations of PHP
* Class Php - polyfills for poor implementations of PHP.
*/
class Php {
const BIG_ENDIAN_INF_BYTES = '7ff0000000000000';
const LITTLE_ENDIAN_INF_BYTES = '000000000000f07f';

/**
* Some builds of PHP (e.g. strato.de on SunOS) omit the
* definition of INF.
*
* Note: we can't use hex2bin() on PHP 5.3. Use pack('H*') instead.
*
* @link http://php.net/manual/en/math.constants.php
*
* @return double
*/
public static function inf() {
$inf_bytes = self::isLittleEndian() ? self::LITTLE_ENDIAN_INF_BYTES : self::BIG_ENDIAN_INF_BYTES;
$inf = unpack('d', pack('H*', $inf_bytes));

return $inf[1];
}


/**
* Is this CPU big-endian or little-endian?
*
* @return bool
*/
private static function isLittleEndian() {
$tmp = unpack('S',"\x01\x00");

return $tmp[1] === 1;
}
class Php
{
const BIG_ENDIAN_INF_BYTES = '7ff0000000000000';
const LITTLE_ENDIAN_INF_BYTES = '000000000000f07f';

/**
* Some builds of PHP (e.g. strato.de on SunOS) omit the
* definition of INF.
*
* Note: we can't use hex2bin() on PHP 5.3. Use pack('H*') instead.
*
* @link http://php.net/manual/en/math.constants.php
*
* @return float
*/
public static function inf()
{
$inf_bytes = self::isLittleEndian() ? self::LITTLE_ENDIAN_INF_BYTES : self::BIG_ENDIAN_INF_BYTES;
$inf = unpack('d', pack('H*', $inf_bytes));

return $inf[1];
}

/**
* Is this CPU big-endian or little-endian?
*
* @return bool
*/
private static function isLittleEndian()
{
$tmp = unpack('S', "\x01\x00");

return $tmp[1] === 1;
}
}
192 changes: 98 additions & 94 deletions src/Php54.php
@@ -1,7 +1,7 @@
<?php

/**
* PHP Polyfill
* PHP Polyfill.
*
* @author Greg Roach <fisharebest@gmail.com>
* @copyright (c) 2016 Greg Roach
Expand All @@ -11,105 +11,109 @@
namespace Fisharebest\PhpPolyfill;

/**
* Class Php54 - polyfills for functions introduced in PHP5.4
* Class Php54 - polyfills for functions introduced in PHP5.4.
*/
class Php54 {
/**
* @link https://php.net/http_response_code
*
* @param string|null $response_code
*
* @return int
*/
public static function httpResponseCode($response_code) {
static $current_code = 200;
class Php54
{
/**
* @link https://php.net/http_response_code
*
* @param string|null $response_code
*
* @return int
*/
public static function httpResponseCode($response_code)
{
static $current_code = 200;

$messages = array(
100 => 'Continue',
101 => 'Switching Protocols',
200 => 'OK',
201 => 'Created',
202 => 'Accepted',
203 => 'Non-Authoritative Information',
204 => 'No Content',
205 => 'Reset Content',
206 => 'Partial Content',
300 => 'Multiple Choices',
301 => 'Moved Permanently',
302 => 'Moved Temporarily',
303 => 'See Other',
304 => 'Not Modified',
305 => 'Use Proxy',
307 => 'Temporary Redirect',
308 => 'Permanent Redirect',
400 => 'Bad Request',
401 => 'Unauthorized',
402 => 'Payment Required',
403 => 'Forbidden',
404 => 'Not Found',
405 => 'Method Not Allowed',
406 => 'Not Acceptable',
407 => 'Proxy Authentication Required',
408 => 'Request Time-out',
409 => 'Conflict',
410 => 'Gone',
411 => 'Length Required',
412 => 'Precondition Failed',
413 => 'Request Entity Too Large',
414 => 'Request-URI Too Large',
415 => 'Unsupported Media Type',
416 => 'Requested Range Not Satisfiable',
417 => 'Expectation Failed',
500 => 'Internal Server Error',
501 => 'Not Implemented',
502 => 'Bad Gateway',
503 => 'Service Unavailable',
504 => 'Gateway Time-out',
505 => 'HTTP Version not supported',
);
$messages = [
100 => 'Continue',
101 => 'Switching Protocols',
200 => 'OK',
201 => 'Created',
202 => 'Accepted',
203 => 'Non-Authoritative Information',
204 => 'No Content',
205 => 'Reset Content',
206 => 'Partial Content',
300 => 'Multiple Choices',
301 => 'Moved Permanently',
302 => 'Moved Temporarily',
303 => 'See Other',
304 => 'Not Modified',
305 => 'Use Proxy',
307 => 'Temporary Redirect',
308 => 'Permanent Redirect',
400 => 'Bad Request',
401 => 'Unauthorized',
402 => 'Payment Required',
403 => 'Forbidden',
404 => 'Not Found',
405 => 'Method Not Allowed',
406 => 'Not Acceptable',
407 => 'Proxy Authentication Required',
408 => 'Request Time-out',
409 => 'Conflict',
410 => 'Gone',
411 => 'Length Required',
412 => 'Precondition Failed',
413 => 'Request Entity Too Large',
414 => 'Request-URI Too Large',
415 => 'Unsupported Media Type',
416 => 'Requested Range Not Satisfiable',
417 => 'Expectation Failed',
500 => 'Internal Server Error',
501 => 'Not Implemented',
502 => 'Bad Gateway',
503 => 'Service Unavailable',
504 => 'Gateway Time-out',
505 => 'HTTP Version not supported',
];

$previous_code = $current_code;
$previous_code = $current_code;

if (is_numeric($response_code)) {
$current_code = (int)$response_code;
$protocol = isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0';
$message = isset($messages[$response_code]) ? $messages[$response_code] : 'Unknown Status Code';
header($protocol . ' ' . $response_code . ' ' . $message);
} elseif (null !== $response_code) {
$type = gettype($response_code);
trigger_error('http_response_code() expects parameter 1 to be long, ' . $type . ' given', E_USER_WARNING);
}
if (is_numeric($response_code)) {
$current_code = (int) $response_code;
$protocol = isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0';
$message = isset($messages[$response_code]) ? $messages[$response_code] : 'Unknown Status Code';
header($protocol.' '.$response_code.' '.$message);
} elseif (null !== $response_code) {
$type = gettype($response_code);
trigger_error('http_response_code() expects parameter 1 to be long, '.$type.' given', E_USER_WARNING);
}

return $previous_code;
}
return $previous_code;
}

/**
* @link https://php.net/manual/en/security.magicquotes.disabling.php
*
* @param mixed[] $old
*
* @return mixed[]
*/
public static function removeMagicQuotesFromArray(array $old) {
$new = array();
foreach ($old as $key => $value) {
if (is_array($value)) {
$new[stripslashes($key)] = self::removeMagicQuotesFromArray($value);
} else {
$new[stripslashes($key)] = stripslashes($value);
}
}
/**
* @link https://php.net/manual/en/security.magicquotes.disabling.php
*
* @param mixed[] $old
*
* @return mixed[]
*/
public static function removeMagicQuotesFromArray(array $old)
{
$new = [];
foreach ($old as $key => $value) {
if (is_array($value)) {
$new[stripslashes($key)] = self::removeMagicQuotesFromArray($value);
} else {
$new[stripslashes($key)] = stripslashes($value);
}
}

return $new;
}
return $new;
}

/**
* @link https://php.net/manual/en/security.magicquotes.disabling.php
*/
public static function removeMagicQuotes() {
$_GET = self::removeMagicQuotesFromArray($_GET);
$_POST = self::removeMagicQuotesFromArray($_POST);
$_COOKIE = self::removeMagicQuotesFromArray($_COOKIE);
$_REQUEST = self::removeMagicQuotesFromArray($_REQUEST);
}
/**
* @link https://php.net/manual/en/security.magicquotes.disabling.php
*/
public static function removeMagicQuotes()
{
$_GET = self::removeMagicQuotesFromArray($_GET);
$_POST = self::removeMagicQuotesFromArray($_POST);
$_COOKIE = self::removeMagicQuotesFromArray($_COOKIE);
$_REQUEST = self::removeMagicQuotesFromArray($_REQUEST);
}
}
32 changes: 17 additions & 15 deletions src/bootstrap.php
@@ -1,33 +1,35 @@
<?php

/**
* PHP Polyfill
* PHP Polyfill.
*
* @author Greg Roach <fisharebest@gmail.com>
* @copyright (c) 2016 Greg Roach
* @license MIT or GPLv3+
*/

use Fisharebest\PhpPolyfill\Php;
use Fisharebest\PhpPolyfill\Php54;

if (PHP_VERSION_ID < 50400) {
// Magic quotes were removed in PHP 5.4
if (get_magic_quotes_gpc()) {
Php54::removeMagicQuotes();
}
// Magic quotes were removed in PHP 5.4
if (get_magic_quotes_gpc()) {
Php54::removeMagicQuotes();
}

// The global session variable bug/feature was removed in PHP 5.4
if (ini_get('session.bug_compat_42')) {
ini_set('session.bug_compat_42', '0');
}
// The global session variable bug/feature was removed in PHP 5.4
if (ini_get('session.bug_compat_42')) {
ini_set('session.bug_compat_42', '0');
}

// Add features that were introduced in PHP 5.4
if (!function_exists('http_response_code')) {
function http_response_code($reponse_code = null) { return Php54::httpResponseCode($reponse_code); }
}
// Add features that were introduced in PHP 5.4
if (!function_exists('http_response_code')) {
function http_response_code($reponse_code = null)
{
return Php54::httpResponseCode($reponse_code);
}
}
}

if (!defined('INF')) {
define('INF', PHP::inf());
define('INF', PHP::inf());
}

0 comments on commit 7064135

Please sign in to comment.