Verzeichnisstruktur phpBB-3.1.0


Veröffentlicht
27.10.2014

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

file.php

Zuletzt modifiziert: 09.10.2024, 12:51 - Dateigröße: 8.57 KiB


001  <?php
002  /**
003  *
004  * This file is part of the phpBB Forum Software package.
005  *
006  * @copyright (c) phpBB Limited <https://www.phpbb.com>
007  * @license GNU General Public License, version 2 (GPL-2.0)
008  *
009  * For full copyright and license information, please see
010  * the docs/CREDITS.txt file.
011  *
012  */
013   
014  /**
015  * @ignore
016  */
017  define('IN_PHPBB', true);
018  $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './../';
019  $phpEx = substr(strrchr(__FILE__, '.'), 1);
020   
021  // Thank you sun.
022  if (isset($_SERVER['CONTENT_TYPE']))
023  {
024      if ($_SERVER['CONTENT_TYPE'] === 'application/x-java-archive')
025      {
026          exit;
027      }
028  }
029  else if (isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'], 'Java') !== false)
030  {
031      exit;
032  }
033   
034  if (isset($_GET['avatar']))
035  {
036      require($phpbb_root_path . 'includes/startup.' . $phpEx);
037   
038      require($phpbb_root_path . 'phpbb/class_loader.' . $phpEx);
039      $phpbb_class_loader = new \phpbb\class_loader('phpbb\\', "{$phpbb_root_path}phpbb/", $phpEx);
040      $phpbb_class_loader->register();
041   
042      $phpbb_config_php_file = new \phpbb\config_php_file($phpbb_root_path, $phpEx);
043      extract($phpbb_config_php_file->get_all());
044   
045      if (!defined('PHPBB_INSTALLED') || empty($dbms) || empty($acm_type))
046      {
047          exit;
048      }
049   
050      require($phpbb_root_path . 'includes/constants.' . $phpEx);
051      require($phpbb_root_path . 'includes/functions.' . $phpEx);
052      require($phpbb_root_path . 'includes/functions_download' . '.' . $phpEx);
053      require($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx);
054   
055      // Setup class loader first
056      $phpbb_class_loader_ext = new \phpbb\class_loader('\\', "{$phpbb_root_path}ext/", $phpEx);
057      $phpbb_class_loader_ext->register();
058   
059      phpbb_load_extensions_autoloaders($phpbb_root_path);
060   
061      // Set up container
062      $phpbb_container_builder = new \phpbb\di\container_builder($phpbb_config_php_file, $phpbb_root_path, $phpEx);
063      $phpbb_container = $phpbb_container_builder->get_container();
064   
065      $phpbb_class_loader->set_cache($phpbb_container->get('cache.driver'));
066      $phpbb_class_loader_ext->set_cache($phpbb_container->get('cache.driver'));
067   
068      // set up caching
069      $cache = $phpbb_container->get('cache');
070   
071      $phpbb_dispatcher = $phpbb_container->get('dispatcher');
072      $request    = $phpbb_container->get('request');
073      $db            = $phpbb_container->get('dbal.conn');
074      $phpbb_log    = $phpbb_container->get('log');
075   
076      unset($dbpasswd);
077   
078      request_var('', 0, false, false, $request);
079   
080      $config = $phpbb_container->get('config');
081      set_config(null, null, null, $config);
082      set_config_count(null, null, null, $config);
083   
084      // load extensions
085      $phpbb_extension_manager = $phpbb_container->get('ext.manager');
086   
087      // worst-case default
088      $browser = strtolower($request->header('User-Agent', 'msie 6.0'));
089   
090      $phpbb_avatar_manager = $phpbb_container->get('avatar.manager');
091   
092      $filename = request_var('avatar', '');
093      $avatar_group = false;
094      $exit = false;
095   
096      if (isset($filename[0]) && $filename[0] === 'g')
097      {
098          $avatar_group = true;
099          $filename = substr($filename, 1);
100      }
101   
102      // '==' is not a bug - . as the first char is as bad as no dot at all
103      if (strpos($filename, '.') == false)
104      {
105          send_status_line(403, 'Forbidden');
106          $exit = true;
107      }
108   
109      if (!$exit)
110      {
111          $ext        = substr(strrchr($filename, '.'), 1);
112          $stamp        = (int) substr(stristr($filename, '_'), 1);
113          $filename    = (int) $filename;
114          $exit = set_modified_headers($stamp, $browser);
115      }
116      if (!$exit && !in_array($ext, array('png', 'gif', 'jpg', 'jpeg')))
117      {
118          // no way such an avatar could exist. They are not following the rules, stop the show.
119          send_status_line(403, 'Forbidden');
120          $exit = true;
121      }
122   
123   
124      if (!$exit)
125      {
126          if (!$filename)
127          {
128              // no way such an avatar could exist. They are not following the rules, stop the show.
129              send_status_line(403, 'Forbidden');
130          }
131          else
132          {
133              send_avatar_to_browser(($avatar_group ? 'g' : '') . $filename . '.' . $ext, $browser);
134          }
135      }
136      file_gc();
137  }
138   
139  // implicit else: we are not in avatar mode
140  include($phpbb_root_path . 'common.' . $phpEx);
141  require($phpbb_root_path . 'includes/functions_download' . '.' . $phpEx);
142   
143  $attach_id = request_var('id', 0);
144  $mode = request_var('mode', '');
145  $thumbnail = request_var('t', false);
146   
147  // Start session management, do not update session page.
148  $user->session_begin(false);
149  $auth->acl($user->data);
150  $user->setup('viewtopic');
151   
152  if (!$config['allow_attachments'] && !$config['allow_pm_attach'])
153  {
154      send_status_line(404, 'Not Found');
155      trigger_error('ATTACHMENT_FUNCTIONALITY_DISABLED');
156  }
157   
158  if (!$attach_id)
159  {
160      send_status_line(404, 'Not Found');
161      trigger_error('NO_ATTACHMENT_SELECTED');
162  }
163   
164  $sql = 'SELECT attach_id, post_msg_id, topic_id, in_message, poster_id, is_orphan, physical_filename, real_filename, extension, mimetype, filesize, filetime
165      FROM ' . ATTACHMENTS_TABLE . "
166      WHERE attach_id = $attach_id";
167  $result = $db->sql_query($sql);
168  $attachment = $db->sql_fetchrow($result);
169  $db->sql_freeresult($result);
170   
171  if (!$attachment)
172  {
173      send_status_line(404, 'Not Found');
174      trigger_error('ERROR_NO_ATTACHMENT');
175  }
176  else if (!download_allowed())
177  {
178      send_status_line(403, 'Forbidden');
179      trigger_error($user->lang['LINKAGE_FORBIDDEN']);
180  }
181  else
182  {
183      $attachment['physical_filename'] = utf8_basename($attachment['physical_filename']);
184   
185      if (!$attachment['in_message'] && !$config['allow_attachments'] || $attachment['in_message'] && !$config['allow_pm_attach'])
186      {
187          send_status_line(404, 'Not Found');
188          trigger_error('ATTACHMENT_FUNCTIONALITY_DISABLED');
189      }
190   
191      if ($attachment['is_orphan'])
192      {
193          // We allow admins having attachment permissions to see orphan attachments...
194          $own_attachment = ($auth->acl_get('a_attach') || $attachment['poster_id'] == $user->data['user_id']) ? true : false;
195   
196          if (!$own_attachment || ($attachment['in_message'] && !$auth->acl_get('u_pm_download')) || (!$attachment['in_message'] && !$auth->acl_get('u_download')))
197          {
198              send_status_line(404, 'Not Found');
199              trigger_error('ERROR_NO_ATTACHMENT');
200          }
201   
202          // Obtain all extensions...
203          $extensions = $cache->obtain_attach_extensions(true);
204      }
205      else
206      {
207          if (!$attachment['in_message'])
208          {
209              phpbb_download_handle_forum_auth($db, $auth, $attachment['topic_id']);
210   
211              $sql = 'SELECT forum_id, post_visibility
212                  FROM ' . POSTS_TABLE . '
213                  WHERE post_id = ' . (int) $attachment['post_msg_id'];
214              $result = $db->sql_query($sql);
215              $post_row = $db->sql_fetchrow($result);
216              $db->sql_freeresult($result);
217   
218              if (!$post_row || ($post_row['post_visibility'] != ITEM_APPROVED && !$auth->acl_get('m_approve', $post_row['forum_id'])))
219              {
220                  // Attachment of a soft deleted post and the user is not allowed to see the post
221                  send_status_line(404, 'Not Found');
222                  trigger_error('ERROR_NO_ATTACHMENT');
223              }
224          }
225          else
226          {
227              // Attachment is in a private message.
228              $post_row = array('forum_id' => false);
229              phpbb_download_handle_pm_auth($db, $auth, $user->data['user_id'], $attachment['post_msg_id']);
230          }
231   
232          $extensions = array();
233          if (!extension_allowed($post_row['forum_id'], $attachment['extension'], $extensions))
234          {
235              send_status_line(403, 'Forbidden');
236              trigger_error(sprintf($user->lang['EXTENSION_DISABLED_AFTER_POSTING'], $attachment['extension']));
237          }
238      }
239   
240      $download_mode = (int) $extensions[$attachment['extension']]['download_mode'];
241      $display_cat = $extensions[$attachment['extension']]['display_cat'];
242   
243      if (($display_cat == ATTACHMENT_CATEGORY_IMAGE || $display_cat == ATTACHMENT_CATEGORY_THUMB) && !$user->optionget('viewimg'))
244      {
245          $display_cat = ATTACHMENT_CATEGORY_NONE;
246      }
247   
248      if ($display_cat == ATTACHMENT_CATEGORY_FLASH && !$user->optionget('viewflash'))
249      {
250          $display_cat = ATTACHMENT_CATEGORY_NONE;
251      }
252   
253      if ($thumbnail)
254      {
255          $attachment['physical_filename'] = 'thumb_' . $attachment['physical_filename'];
256      }
257      else if ($display_cat == ATTACHMENT_CATEGORY_NONE && !$attachment['is_orphan'] && !phpbb_http_byte_range($attachment['filesize']))
258      {
259          // Update download count
260          phpbb_increment_downloads($db, $attachment['attach_id']);
261      }
262   
263      if ($display_cat == ATTACHMENT_CATEGORY_IMAGE && $mode === 'view' && (strpos($attachment['mimetype'], 'image') === 0) && (strpos(strtolower($user->browser), 'msie') !== false) && !phpbb_is_greater_ie_version($user->browser, 7))
264      {
265          wrap_img_in_html(append_sid($phpbb_root_path . 'download/file.' . $phpEx, 'id=' . $attachment['attach_id']), $attachment['real_filename']);
266          file_gc();
267      }
268      else
269      {
270          // Determine the 'presenting'-method
271          if ($download_mode == PHYSICAL_LINK)
272          {
273              // This presenting method should no longer be used
274              if (!@is_dir($phpbb_root_path . $config['upload_path']))
275              {
276                  send_status_line(500, 'Internal Server Error');
277                  trigger_error($user->lang['PHYSICAL_DOWNLOAD_NOT_POSSIBLE']);
278              }
279   
280              redirect($phpbb_root_path . $config['upload_path'] . '/' . $attachment['physical_filename']);
281              file_gc();
282          }
283          else
284          {
285              send_file_to_browser($attachment, $config['upload_path'], $display_cat);
286              file_gc();
287          }
288      }
289  }
290