Web Services Tutorial Code / public / headers-accept.php

<?php

function parseAcceptHeader( $header )
{
    if ( !preg_match_all(
            '(
                (?P<value>[a-z*][a-z0-9_/*+.-]*)
                    (?:;q=(?P<priority>[0-9.]+))?
             \\s*(?:,|$))ix', $header, $matches, PREG_SET_ORDER ) )
    {
        return false;
    }

    $accept = array();
    foreach ( $matches as $values )
    {
        if(!isset($values['priority']) || 
            (isset($values['priority']) && $values['priority'] == 1))
        {
            $accept[] = isset( $values['value'] ) ? strtolower( $values['value'] ) : null;
        }
    }

    return $accept;
}

$data = array(
    'format' => 'json',
    'status' => 'live'
    );

$original_accept_header = $_SERVER['HTTP_ACCEPT'];

$accept = parseAcceptHeader($original_accept_header);

if(in_array('text/html', $accept)) {
    header('Content-Type: text/html');
    echo "<pre>";
    print_r($data);
    echo "</pre>";
} elseif(in_array('text/xml', $accept)) {
    $simplexml = simplexml_load_string('<?xml version="1.0" ?><data />');
    foreach($data as $key => $value) {
        $simplexml->addChild($key, $value);
    }

    header('Content-Type: text/xml');
    echo $simplexml->asXML();
} else {
    // return json
    header('Content-Type: application/json');
    echo json_encode($data);
}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.