#php
#php
Вопрос:
Мой код file.php:
<?php
if(!isset($_GET['filename']) OR $_GET['filename'] == NULL) {
print("Error!");
exit();
}
$_GET['filename'] = htmlentities($_GET['filename'], ENT_QUOTES, "utf-8");
session_start();
include_once("/var/www/html/get.php");
for($i = 0; $i < $GLOBALS['files']['ile']; $i ) {
if($GLOBALS['files'][$i]['name'] == $_GET['filename']) {
if($GLOBALS['files'][$i]['priv'] == NULL OR $GLOBALS['files'][$i]['owner'] == $_SESSION['id'] OR (isset($_SESSION['privs']) AND in_array($GLOBALS['files'][$i]['priv'], $_SESSION['privs']))) {
if(file_exists($GLOBALS['files'][$i]['loc'])) {
header("Content-length: ".filesize($GLOBALS['files'][$i]['loc']));
header("Content-type: ".mime_content_type($GLOBALS['files'][$i]['loc']));
readfile($GLOBALS['files'][$i]['loc']);
} else {
print("Can't find that file!");
}
}
}
}
?>
В get.php файл, я загружаю (из базы данных) информацию о файлах, к которым я хотел получить доступ, используя этот файл выше на сайте.
$_SESSION['privs'] //it's an array that holds privileges, i.e: site.priv.mess
$GLOBALS['files'] //holds info about all files that user can load, i.e: $GLOBALS['files'][0]['name'] is a name of first file in array
$GLOBALS['files'][0]['loc'] //holds info about first file localisation
$GLOBALS['files']['ile'] // holds sizeof($GLOBALS['files'])
С изображениями это работает хорошо, но если я попытаюсь загрузить файл большего размера, то есть видео, которое весит 300 МБ, тогда файл загрузится, все выглядит хорошо, но если я перезагружу сайт, это больше не будет работать…
Я попытался удалить свои файлы cookie в браузере (чтобы изменить идентификатор сеанса), и это работает… Но что я могу сделать, чтобы это работало лучше?
РЕДАКТИРОВАТЬ: В Firefox все выглядит хорошо, зависает только в Chrome : (
ПРАВКА 2: Закрытие сеанса с помощью: session_write_close(); перед чтением файла исправлено мое проклятие: P Спасибо вам всем
Комментарии:
1. файлы, которые вы отправляете, слишком велики для вашего сервера.
Ответ №1:
Проверьте свой php.ini или используйте phpinfo()
для проверки ваших значений для upload_max_filesize
, post_max_size
и memory_limit
. Возможно, также проверьте максимальное время выполнения php-скрипта.
Комментарии:
1. у меня есть значения по умолчанию. Нужно ли мне изменить их, чтобы это заработало?
2. я изменил их, и теперь, когда я открываю этот файл в новой вкладке, сайт зависает на других вкладках (только по этому адресу, на других все еще работает). Похоже, что зависает только сессия
3. попробуйте с другим браузером, когда вы думаете, что это всего лишь приостановка сеанса. 🙂
4. да, вы можете использовать ini_set() для этого или изменить значения в php.ini напрямую. Может ли ваша интернет-пропускная способность обрабатывать данные? Или ваш сервер достаточно быстр, или вы тестируете его локально?
5. Я тестирую его и локально, и внешне. И я вижу, что это замораживает всю сессию при любом типе соединения. Но самое интересное, что я обнаружил, что при локальном подключении видео загружается нормально (все еще задержка сеанса), но при внешнем это у меня не сработает. Мой друг сказал, что на его компьютере все работает отлично. Итак, я не знаю, что теперь делать.