Ответов: 4 Просмотров: 2405
|
Здравствуйте!
Делаю примитивную систему - со скрипта пользователь загружает файл картинки, скрипт его пихает в blob базы данных и потом несколько десятков пользователей из другого скрипта смотрят эту картинку из базы данных. в базе данных остается только последняя картинка - предыдущие удаляются.
Собственно проблема встала когда из локального компа вывел это дело на хостинг.
Пользователь-выгружатор - заливает картинку каждые две секунды, а пользователи-наблюдатели обновляют у себя на странице эту картинку каждые две секунды.
код получения картинки
PHP:
скопировать код в буфер обмена
<html> <head> <meta http-equiv="content-type" content="text/html"> <title>Сохранение бинарных данных в базе данных MySQL</title> </head> <body> <?PHP if($_POST['passwd'] == "1004") { // подключение к базе данных // (возможно, вам придется настроить имя хоста, имя пользователя и пароль) $dbh = new mysqli("localhost", "111", "111", "bd1"); { exit("Ошибка подключения к базе данных MySQL: Сервер база данных не доступен!<br> Проверте параметры подключения к базе данных."); } filesize($_FILES['file']['tmp_name']))); $_POST['form_description'] = trim($_POST['form_description']); $size = filesize ($_FILES['file']['tmp_name']); $result=$dbh->prepare("INSERT INTO binary_data (description,bin_data,filename,filesize,filetype,scr_id, ipaddr) "."VALUES ('".$_POST['form_description']."', '".$data."', '".$_FILES["file"]["name"]."', '".$size."', '".$_FILES["file"]["type"]."', '".$_POST['scrid']."', '".$_SERVER['REMOTE_ADDR']."')"); if(!$result) exit("Ошибка выполнения SQL запроса!"); $result->execute(); $id = $dbh->prepare(); echo "<p>Этот файл имеет следующий идентификатор (ID) в базе данных: <b>|".$result->insert_id."|</b><br>"; $query = "SELECT t FROM binary_data WHERE scr_id=".$_POST['scrid']." ORDER BY t DESC LIMIT 1"; $result = $dbh->query($query); if(!$result) exit("Ошибка выполнения SQL запроса 1!"); $row = $result->fetch_array(); $query = "DELETE FROM binary_data WHERE scr_id=".$_POST['scrid']." AND t<'".$row[0]."'"; $result = $dbh->prepare($query); $result ->execute(); if(!$result) exit("Ошибка выполнения SQL запроса 2!"); echo "<br> Deleted ".$result->affected_rows." rows"; } else { echo "<br><br><Muhahahaha<br><br>"; } ?> </body> </html>
ну а получение картинки с сервера такое
PHP:
скопировать код в буфер обмена
<?PHP // подключение к базе данных // (возможно, вам придется настроить имя хоста, имя пользователя и пароль) $dbh = new mysqli("localhost", "111", "111", "bd1"); { exit("Ошибка подключения к базе данных MySQL: Сервер база данных не доступен!<br> Проверте параметры подключения к базе данных."); } $query = "SELECT bin_data,filetype FROM `binary_data` WHERE scr_id = ".$_GET['id']." ORDER BY t DESC LIMIT 1"; $result = $dbh->query($query); if(!$result) exit("Ошибка выполнения SQL запроса!"); $row = $result->fetch_array(); Header( "Content-type: ".$row['filetype'].""); echo $row['bin_data']; ?>
У каждого пользователя эта картинка на автообновлении стоит раз в секунду две три. пользователей дофига - в идеале чтоб хоть тысяча их была.
Аналогично - штук 10 выгружателей будет - раз в секунду или в две - не важно.
Во всех хостингах даже платных кол-во подключений к базе данных ограничено.
Как я понимаю проблем в строке - $dbh = new mysqli("localhost", "111", "111", "bd1"); - я каждый раз открываю новое подключение.
А как его сохранять-передавать? ведь это просто картинка выдается. у человека в браузере написано http://mysite[dot]myhost[dot]com[dot]ua/img.php и поставлено автообновление страницы каждую секунду. вот он и генерирует 3600 подключений в час... а ну да - эта фигня должна работать по три месяца непрерывно.
Как это правильно делается? есть какие-то глобальные переменные которые от запуска к запуску скрипта сохраняют свое значение? |