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_dfsmysql.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', 'ezdfsfile' );
10
11function _die( $value )
12{
13    header( $_SERVER['SERVER_PROTOCOL'] . " 500 Internal Server Error" );
14    die( $value );
15}
16
17// Storage database connection string
18if ( defined( 'STORAGE_SOCKET' ) && STORAGE_SOCKET !== false )
19    $serverString = STORAGE_SOCKET;
20elseif ( defined( 'STORAGE_PORT' ) )
21    $serverString = STORAGE_HOST . ':' . STORAGE_PORT;
22else
23    $serverString = STORAGE_HOST;
24
25$maxTries = 3;
26$tries = 0;
27while ( $tries < $maxTries )
28{
29    if ( $db = mysql_connect( $serverString, STORAGE_USER, STORAGE_PASS, true ) )
30        break;
31    ++$tries;
32}
33if ( $tries > $maxTries )
34{
35    _die( "Unable to connect to database server.\n" );
36}
37if ( !$db )
38    _die( "Unable to connect to storage server: " . mysql_error( $db ) );
39
40if ( !mysql_select_db( STORAGE_DB, $db ) )
41    _die( "Unable to select database " . STORAGE_DB . ".\n" );
42
43if ( !$res = mysql_query( "SET NAMES '" . ( defined( 'STORAGE_CHARSET' ) ? STORAGE_CHARSET : 'utf8' ) . "'", $db ) )
44    _die( "Failed to set character set.\n" );
45
46$filename = ltrim( $_SERVER['REQUEST_URI'], '/');
47if ( ( $queryPos = strpos( $filename, '?' ) ) !== false )
48    $filename = substr( $filename, 0, $queryPos );
49
50// Fetch file metadata.
51$filePathHash = md5( $filename );
52$sql = "SELECT * FROM " . TABLE_METADATA . " WHERE name_hash=('$filePathHash')" ;
53if ( !$res = mysql_query( $sql, $db ) )
54    _die( "Failed to retrieve file metadata\n" );
55
56if ( !( $metaData = mysql_fetch_assoc( $res ) ) ||
57     $metaData['mtime'] < 0 )
58{
59    header( $_SERVER['SERVER_PROTOCOL'] . " 404 Not Found" );
60?>
61<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
62<HTML><HEAD>
63<TITLE>404 Not Found</TITLE>
64</HEAD><BODY>
65<H1>Not Found</H1>
66The requested URL <?php echo htmlspecialchars( $filename ); ?> was not found on this server.<P>
67</BODY></HTML>
68<?php
69    mysql_close( $db );
70    exit( 1 );
71}
72
73mysql_free_result( $res );
74
75// Fetch file data.
76$dfsFilePath = MOUNT_POINT_PATH . '/' . $filename;
77// Set cache time out to 100 minutes by default
78$expiry = defined( 'EXPIRY_TIMEOUT' ) ? EXPIRY_TIMEOUT : 6000;
79if ( file_exists( $dfsFilePath ) )
80{
81    // Output HTTP headers.
82    $path = $metaData['name'];
83    $size = $metaData['size'];
84    $mimeType = $metaData['datatype'];
85    $mtime = $metaData['mtime'];
86    $mdate = gmdate( 'D, d M Y H:i:s', $mtime ) . ' GMT';
87
88    header( "Content-Length: $size" );
89    header( "Content-Type: $mimeType" );
90    header( "Last-Modified: $mdate" );
91    header( "Expires: " . gmdate('D, d M Y H:i:s', time() + $expiry) . ' GMT' );
92    header( "Connection: close" );
93    header( "X-Powered-By: eZ Publish" );
94    header( "Accept-Ranges: none" );
95    header( 'Served-by: ' . $_SERVER["SERVER_NAME"] );
96
97    // Output image data.
98    $fp = fopen( $dfsFilePath, 'r' );
99    fpassthru( $fp );
100    fclose( $fp );
101}
102?>
103

Archive Download this file

Revision: HEAD