Rename all the files to camelCase and update the class name in the files
This commit is contained in:
142
src/Http.php
Normal file
142
src/Http.php
Normal file
@@ -0,0 +1,142 @@
|
||||
<?php
|
||||
/** DomFramework
|
||||
* @package domframework
|
||||
* @author Dominique Fournier <dominique@fournier38.fr>
|
||||
* @license BSD
|
||||
*/
|
||||
|
||||
namespace Domframework;
|
||||
|
||||
/** HTTP Helper : understand the best choices provided by browser, the HTTP
|
||||
* codes
|
||||
*/
|
||||
class Http
|
||||
{
|
||||
/** Choose the best choice from user choices.
|
||||
* Can be used for languages (HTTP_ACCEPT_LANGUAGE), type of pages
|
||||
* (HTTP_ACCEPT)...
|
||||
* Ex. fr, en-gb;q=0.8, en;q=0.7
|
||||
* Ex. text/html,application/xhtml+xml,application/xml;q=0.9,* /*;q=0.8
|
||||
* If available is empty, then return the best priority defined by user,
|
||||
* and throw an exception if nothing is provided for by the user.
|
||||
* If nothing match, return $default
|
||||
* Defined in https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
|
||||
* @param string $uservar The parameter provided by the user
|
||||
* @param array|null $available The list of available choices in the soft
|
||||
* @param string|null $default The choice if nothing match
|
||||
* @return string The prefered choice
|
||||
*/
|
||||
function bestChoice ($uservar, $available=array(), $default=FALSE)
|
||||
// {{{
|
||||
{
|
||||
$uservar = str_replace (" ", "", $uservar);
|
||||
$userchoices = explode (",", $uservar);
|
||||
if (!isset ($userchoices[0]))
|
||||
{
|
||||
if ($default === FALSE)
|
||||
throw new \Exception ("No user choice provided to bestChoice", 500);
|
||||
return $default;
|
||||
}
|
||||
|
||||
// If the priority is not set, must be used in priority
|
||||
// If the priority is set, use it if it is valid
|
||||
$choicesPrio = array ();
|
||||
foreach ($userchoices as $choice)
|
||||
{
|
||||
@list ($choice, $prio) = explode (";q=", $choice);
|
||||
if (trim ($choice) === "")
|
||||
continue;
|
||||
if ($prio === null)
|
||||
$prio = 1.0;
|
||||
else
|
||||
{
|
||||
$nums = explode (".", $prio);
|
||||
if (count ($nums) > 2)
|
||||
$prio = 0.0;
|
||||
elseif ($nums[0] !== "0")
|
||||
$prio = 0.0;
|
||||
elseif ($nums[0] < 0 || $nums[0] > 9)
|
||||
$prio = 0.0;
|
||||
}
|
||||
$choicesPrio[$choice] = $prio;
|
||||
}
|
||||
// Sort by priority
|
||||
arsort ($choicesPrio, SORT_NATURAL);
|
||||
|
||||
if (count ($available) === 0)
|
||||
return $userchoices[0];
|
||||
|
||||
// Look at the best existing solution
|
||||
foreach ($choicesPrio as $choice => $priority)
|
||||
{
|
||||
if ($choice === "*/*")
|
||||
return $default;
|
||||
foreach ($available as $avail)
|
||||
{
|
||||
if (strtolower ($avail) === strtolower ($choice))
|
||||
return $avail;
|
||||
// Case en_US
|
||||
$availTmp = str_replace ("_", "-", $avail);
|
||||
if (strtolower ($availTmp) === strtolower ($choice))
|
||||
return $avail;
|
||||
}
|
||||
}
|
||||
|
||||
// No best solution found. Use the default available solution
|
||||
return $default;
|
||||
}
|
||||
// }}}
|
||||
|
||||
/** Return the associated text for a HTTP code
|
||||
* @param integer $code The HTTP code to translate in text
|
||||
*/
|
||||
function codetext ($code)
|
||||
// {{{
|
||||
{
|
||||
switch ($code)
|
||||
{
|
||||
case 100: $text = 'Continue'; break;
|
||||
case 101: $text = 'Switching Protocols'; break;
|
||||
case 200: $text = 'OK'; break;
|
||||
case 201: $text = 'Created'; break;
|
||||
case 202: $text = 'Accepted'; break;
|
||||
case 203: $text = 'Non-Authoritative Information'; break;
|
||||
case 204: $text = 'No Content'; break;
|
||||
case 205: $text = 'Reset Content'; break;
|
||||
case 206: $text = 'Partial Content'; break;
|
||||
case 300: $text = 'Multiple Choices'; break;
|
||||
case 301: $text = 'Moved Permanently'; break;
|
||||
case 302: $text = 'Moved Temporarily'; break;
|
||||
case 303: $text = 'See Other'; break;
|
||||
case 304: $text = 'Not Modified'; break;
|
||||
case 305: $text = 'Use Proxy'; break;
|
||||
case 400: $text = 'Bad Request'; break;
|
||||
case 401: $text = 'Unauthorized'; break;
|
||||
case 402: $text = 'Payment Required'; break;
|
||||
case 403: $text = 'Forbidden'; break;
|
||||
case 404: $text = 'Not Found'; break;
|
||||
case 405: $text = 'Method Not Allowed'; break;
|
||||
case 406: $text = 'Not Acceptable'; break;
|
||||
case 407: $text = 'Proxy Authentication Required'; break;
|
||||
case 408: $text = 'Request Time-out'; break;
|
||||
case 409: $text = 'Conflict'; break;
|
||||
case 410: $text = 'Gone'; break;
|
||||
case 411: $text = 'Length Required'; break;
|
||||
case 412: $text = 'Precondition Failed'; break;
|
||||
case 413: $text = 'Request Entity Too Large'; break;
|
||||
case 414: $text = 'Request-URI Too Large'; break;
|
||||
case 415: $text = 'Unsupported Media Type'; break;
|
||||
case 416: $text = 'Range Not Satisfiable'; break;
|
||||
case 500: $text = 'Internal Server Error'; break;
|
||||
case 501: $text = 'Not Implemented'; break;
|
||||
case 502: $text = 'Bad Gateway'; break;
|
||||
case 503: $text = 'Service Unavailable'; break;
|
||||
case 504: $text = 'Gateway Time-out'; break;
|
||||
case 505: $text = 'HTTP Version not supported'; break;
|
||||
default:
|
||||
exit('Unknown http status code "'.htmlentities ($code).'"');
|
||||
}
|
||||
return $text;
|
||||
}
|
||||
// }}}
|
||||
}
|
||||
Reference in New Issue
Block a user