pwet

Sign in or create your account | Project List | Help | pwet.fr | Planet eZ Publish.fr | Bioutifoul Photos

pwet Svn Source Tree

Root/trunk/www/index_image_mysqli.php

  • Property svn:keywords set to: Id HeadURL
1<?php
2/**
3 * @copyright Copyright (C) 1999-2011 eZ Systems AS. All rights reserved.
4 * @license http://www.gnu.org/licenses/gpl-2.0.txt GNU General Public License v2
5 * @version 2011.7
6 * @package kernel
7 */
8
9define( 'TABLE_METADATA', 'ezdbfile' );
10define( 'TABLE_DATA', 'ezdbfile_data' );
11
12function _die( $value )
13{
14    header( $_SERVER['SERVER_PROTOCOL'] . " 500 Internal Server Error" );
15    die( $value );
16}
17
18// Connect to storage database.
19$serverString = STORAGE_HOST;
20if ( !defined( 'STORAGE_SOCKET' ) )
21    define ( 'STORAGE_SOCKET', false );
22if ( !defined( 'STORAGE_PORT' ) )
23    define ( 'STORAGE_PORT', false );
24
25$maxTries = 3;
26$tries = 0;
27while ( $tries < $maxTries )
28{
29    if ( $db = mysqli_connect( $serverString, STORAGE_USER, STORAGE_PASS, null, STORAGE_PORT, STORAGE_SOCKET ) )
30        break;
31    ++$tries;
32}
33if ( !$db )
34    _die( "Unable to connect to storage server.\n" );
35
36if ( !mysqli_select_db( $db, STORAGE_DB ) )
37    _die( "Unable to select database " . STORAGE_DB . ".\n" );
38
39if ( !mysqli_set_charset( $db, defined( 'STORAGE_CHARSET' ) ? STORAGE_CHARSET : 'utf8' ) )
40    _die( "Failed to set character set.\n" );
41
42$filename = ltrim( $_SERVER['REQUEST_URI'], '/');
43if ( ( $queryPos = strpos( $filename, '?' ) ) !== false )
44    $filename = substr( $filename, 0, $queryPos );
45
46// Fetch file metadata.
47$filePathHash = mysqli_real_escape_string( $db, $filename );
48$sql = "SELECT * FROM " . TABLE_METADATA . " WHERE name_hash=MD5('$filePathHash')" ;
49if ( !$res = mysqli_query( $db, $sql ) )
50    _die( "Failed to retrieve file metadata\n" );
51
52if ( !( $metaData = mysqli_fetch_array( $res, MYSQLI_ASSOC ) ) ||
53     $metaData['mtime'] < 0 )
54{
55    header( $_SERVER['SERVER_PROTOCOL'] . " 404 Not Found" );
56?>
57<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
58<HTML><HEAD>
59<TITLE>404 Not Found</TITLE>
60</HEAD><BODY>
61<H1>Not Found</H1>
62The requested URL <?php echo htmlspecialchars( $filename ); ?> was not found on this server.<P>
63</BODY></HTML>
64<?php
65    //mysql_free_result( $res );
66    mysqli_close( $db );
67    exit( 1 );
68}
69
70mysqli_free_result( $res );
71
72// Verify the filesize
73$sql = "SELECT SUM(LENGTH(filedata)) AS size FROM " . TABLE_DATA . " WHERE name_hash=MD5('$filePathHash')";
74if ( !$res = mysqli_query( $db, $sql ) )
75{
76    header( $_SERVER['SERVER_PROTOCOL'] . " 500 Internal Server Error" );
77    exit();
78}
79
80$row = mysqli_fetch_row( $res );
81if ( $row[0] != $metaData['size'] )
82{
83    header( $_SERVER['SERVER_PROTOCOL'] . " 500 Internal Server Error" );
84    exit();
85}
86
87// Fetch file data.
88$sql = "SELECT filedata, offset FROM " . TABLE_DATA . " WHERE name_hash=MD5('$filePathHash') ORDER BY offset";
89// Set cache time out to 100 minutes by default
90$expiry = defined( 'EXPIRY_TIMEOUT' ) ? EXPIRY_TIMEOUT : 6000;
91if ( $res = mysqli_query( $db, $sql ) )
92{
93    // Output HTTP headers.
94    $path = $metaData['name'];
95    $size = $metaData['size'];
96    $mimeType = $metaData['datatype'];
97    $mtime = $metaData['mtime'];
98    $mdate = gmdate( 'D, d M Y H:i:s', $mtime ) . ' GMT';
99
100    header( "Content-Length: $size" );
101    header( "Content-Type: $mimeType" );
102    header( "Last-Modified: $mdate" );
103    header( "Expires: " . gmdate('D, d M Y H:i:s', time() + $expiry) . ' GMT' );
104    header( "Connection: close" );
105    header( "X-Powered-By: eZ Publish" );
106    header( "Accept-Ranges: none" );
107    header( 'Served-by: ' . $_SERVER["SERVER_NAME"] );
108
109    // Output image data.
110    while ( $row = mysqli_fetch_row( $res ) )
111        echo $row[0];
112    //mysql_free_result( $res );
113}
114mysqli_close( $db );
115
116?>
117

Archive Download this file

Revision: HEAD