LINUX.ORG.RU

Сообщения solovey

 

Digest Authentication с помощью libvlc

Привет, ЛОР!

У меня есть видеосервер с авторизацией через Digest Authentication. Он отдает видео по ссылкам вида http://127.0.0.1:9786/cameras/0/video.

Если я эту ссылку подсовываю в VLC, то у меня вылезает окно ввода логина/пароля, и после ввода логина пароля видео с камеры наблюдения воспроизводится.

Но меня интересует отображение видео в своем приложении. Соответственно, вопрос в том, как реализовать аутентификацию с помощью libvlc?

Пока что я нашел файл include/vlc/plugins/vlc_http.h в котором, как я понял, есть функции для создания всех необходимых заголовков, но как их передавать непосредственно видеосерверу?

Буду благодарен за пример кода или за ссылку на то, где про это можно почитать!

Я пока только начал ковырять libvlc, есть минимально работающий код, который воспроизводит видео с другого видеосервера без аутентификациии:

...
#include <vlc/vlc.h>
...
libvlc_instance_t * inst;
libvlc_media_player_t *mp;
libvlc_media_t *m;

const char * const vlc_args[] = {
		  "--live-caching=100",
		  "--network-caching=100"
              };

/* Load the VLC engine */
inst = libvlc_new (sizeof(vlc_args) / sizeof(vlc_args[0]), vlc_args);

/* Как добавить сюда аутентификацию??? */

/* Create a new item */
m = libvlc_media_new_location (inst, "http://127.0.0.1:8080/video?login=root&password=c4ca4238a0b923820dcc509a6f75849b&channelid=71bb90d9-6d65-4807-9914-108b7e6b38e5");

/* Create a media player playing environement */
mp = libvlc_media_player_new_from_media (m);

/* No need to keep the media now */
libvlc_media_release (m);

/* play the media_player */
libvlc_media_player_play (mp);

...

 ,

solovey
()

Клавиатура + встраиваемое приложение на qt embedded

Всем доброго времени суток.

Есть у меня железка на арме. Я запилил на нее Qt, прикрутил тачскрин и написал приложение с интерфейсом на кутях.

Тачскрин работает нормально, но надо дать пользователю возможность осуществлять редактирование некоторых данных (не принципиально), для чего к девайсу подцепляется клавиатура и мышь.

И здесь начинаются проблемы - клавиатура работает неадекватно. Если подцепить клаву, включить девайс, залогиниться с помощью этой клавиатуры в консоль (ту, которая отображается на тачскрине - tty1) и затем из консоли запустить приложение, то все работает прекрасно.

Но надо автоматизировать процесс, поэтому засовываем приложение в автозапуск (по простому - по крону на @reboot). Теперь все работает ровно до тех пор, пока мы не нажмем любую клавишу на клавиатуре. После этого весь интерфейс зависает, да и само приложение перестает что-либо делать...

Такая же ситуация наблюдается, если запилить автологин на tty1 и добавить в .profile запуск своего приложения.

Еще небольшое уточнение: на самом деле во всех случаях запускается не само приложение, а скрипт, который устанавливает нужные переменные и потом запускает приложение:

...
# export needed variables
export TSLIB_PLUGINDIR=/lib/ts/
export TSLIB_TSDEVICE=/dev/ep93xx_ts
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_FBDEVICE=/dev/fb0
export QWS_MOUSE_PROTO=tslib:/dev/ep93xx_ts
export QWS_KEYBOARD=TTY:/dev/tty0

# start app here
...

Собственно, вопрос: как заставить клавиатуру корректно работать?

P.S.: Когда-то давно я уже создавал подобную тему, поэтому кастую сюда velikS :)

 ,

solovey
()

ifup применяет некорректные настройки сети

Всем доброго времени суток.

Небольшая предистория. Есть одноплатный компьютер на котором работает emdebian.

Внутри крутится демон на с++, который, помимо основных задач, анализирует состояние перемычек на плате. Если замкнута перемычка, отвечающая за сброс ip адреса, демон запускает скрипт следующего содержания:

#!/bin/bash

defaultfile="/etc/network/interfaces.save"
targetfile="/etc/network/interfaces"

if [ -f ${defaultfile} ]; then
        ifdown eth0 --force
        cp ${defaultfile} ${targetfile}
        ifup eth0 --force
        echo "Network settings restored!"
else
        echo "Could not restore network settings!"
fi

Содержимое файла /etc/network/interfaces.save:

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.0.100
netmask 255.255.255.0

Я ожидаю, что после выполнения этого скрипта параметры сети изменятся на указанные выше. На деле параметры сети не меняются.

Мой демон, который анализирует перемычки, запускается при старте одноплатника по крону с параметром @reboot:

@reboot /var/www/webdaemon/webscript.sh 2>&1 >> /dev/null &

После него стартует только apache2.

Собственно, вопрос - как мне сделать так, чтобы настройки сети реально изменились?

 ,

solovey
()

Инструменты для создания контрольных точек (checkpoints)

Собственно, сабж.

В универе в рамках курса по разработке качественного ПО есть задание - найти инструмент, позволяющий создавать контрольные точки для приложений.

Нашел сайт http://checkpointing.org/, но там половина проектов - протухшие... Наиболее интересным оттуда показался DMTCP (последний релиз был вчера!). Но при попытке запустить его для моего Qt приложения под xubuntu 12.04, он ругнулся на то, что не смог "подцепиться" к X-серверу...

Собственно, может кто-нибудь сможет посоветовать еще какие-нибудь инструменты?

Ну и (не флейма ради, а вообще интересно), такие инструменты кто-нибудь реально использует при разработке и отладке приложений?

upd: Под контрольными точками я подразумеваю не системы контроля версий, а возможность сохранить ("заморозить") состояние программы и затем продолжить ее выполнение из сохраненного состояния.

solovey
()

Embedded + Qt - не работает клавиатура

Всем доброго времени суток.

Есть embedded машина на arm, у нее есть экран и usb-клавиатура.

Если с помощью клавиатуры залогиниться на машину (консоль выводится на экран) как root и запустить Qt-шное приложение через

# ./app -qws
то клавиатура работает.

Если же залогиниться обычным пользователем, изменить права доступа к приложению и точно также запустить его, то на клавиатуру нет никакой реакции...

Возможно вопрос не совсем в Development, но я помню, что здесь обитают люди, успешно запускавшие Qt-шные приложения на embedded девайсах.

P.S.: К слову, такая же ситуация наблюдается, если запускать приложение через отладочную консоль, подключенную через rs232 к хост-компьютеру. При этом в последнем случае пользователь уже роли не играет (то есть, клавиатура не работает всегда).

 ,

solovey
()

Нужен годный мануал по libusb-1.0

Всем доброго времени суток.

Раньше опыта работы с libusb не имел, а документация не особо впечатляет...

Интересует сам «алгоритм» взаимодействия, желательно с примерами...

Пока что понял только, как получить нужный мне libusb_device_handle, но что с ним делать дальше - не понятно.

Гугл не выдал ничего интересного, так что буду благодарен за помощь!

 

solovey
()

QPrinter + QPainter динамическое формирование документа

Всем доброго времени суток.

Пишу приложение на Qt, которое кроме всего прочего должно печатать талоны со штрих-кодами.

Для этого использую термопринтер.

В настройках принтера делаю следующее:

pPrinter->setOrientation (QPrinter::Portrait);
pPrinter->setColorMode (QPrinter::GrayScale);
pPrinter->setPageSize (QPrinter::A7);
pPrinter->setFullPage (true);

Размер бумаги A7 - 74х105 мм (т.к. термопринтер печатает на бумаге 80х120 мм).

Есть QWidget, из которого я и печатаю данные:

void Printer::draw(QPaintDevice *ppd, const QString &info, const QString &ticketStr) {
	QPainter painter(ppd);
        QRect r(painter.viewport());
	
	painter.setPen(Qt::black);
	painter.setFont (QFont ("Helvetica", 10, QFont::Normal));
	painter.drawText (r, Qt::AlignLeft | Qt::AlignTop | Qt::TextWrapAnywhere, info);
	
	QString barcode = strToCode128 (ticketStr);
	
	painter.setFont (QFont ("Code 128", 50, QFont::Normal));
	painter.drawText (r, Qt::AlignHCenter | Qt::AlignBottom, barcode);
}

Когда я задаю положение элементов через флаги Qt (как это сделано выше), содержимое виджета масштабируется под размер страницы (A7) и нормально печатается.

Однако мне бы хотелось форматировать страницу чуть более гибко. Пытаюсь задать координаты какого-либо элемента в процентах от размера r:

QPoint p (r.height ()*0.9, r.width ()*0.2);
painter.drawText (p, barcode);
При этом элемент просто не отображается.

P.S.: Еще меня смущает то, что размер r = QRect(0,0 3500x4967)

 ,

solovey
()

CUPS принтер не поддерживает ни один формат

Всем доброго времени суток.

У меня есть плата с emdebian.

Задача - подцепить на нее принтер и печатать некоторые данные из приложения на Qt.

Принтер тоже не простой, а термопринтер для печати чеков CUSTOM VKP-80 II (http://www.custom-printer.ru/ru/CustomVKP-80II/ - вот, если кому интересно).

Для него удалось найти ppd файл, «драйвер» под линукс под названием rastertoVKP80 и скрипт установки драйвера и ppd файла.

На рабочей машине с debian squeeze после того, как отработал скрипт, принтер определился через cups. Мне удалось его настроить и печатать с него все, что надо.

Теперь я пытаюсь заставить его работать на моей плате с emdebian.

Для начала я установил там cups:

apt-get install cups cups-client

Потом точно также запустил скрипт и настроил принтер через cups.

Вроде бы, все отработало успешно. Но когда я пытаюсь напечатать любой документ, в консоль плюются следующие ошибки:

lp: Unsupported format 'text/plain'!
или
lp: Unsupported format 'application/pdf'!

Читал, что некоторым помогает переустановка ghostscript. Мне не помогло.

Не знаю, в чем может быть проблема. Версия CUPS на хосте и на плате - 1.4.4.

Буду признателен за помощь.

upd: забыл уточнить, если просто из консоли сделать

echo "bla-bla-bla" > /dev/usb/lp0
то текст печатается

 ,

solovey
()

Qt, грамотное разделение на потоки

Всем доброго времени суток.

Пишу приложение с интерфейсом на Qt, общающееся с контроллером.

Возникла такая ситуация - при поднесении карты к считывателю необходимо отправить контроллеру команду, а также вывести сообщение в интерфейс. Делаю это так:

// проверка условий
...
// отправляем сигнал интерфейсу
emit signalSendInfoMsg (MSG_USR_WRONG_TIME);
// формируем и отсылаем команду контроллеру
controller.denyOpenGate (evcode, card);
...
Сейчас это работает так: сначала контроллер получает и выполняет команду, а затем выводится сообщение в интерфейс... А нужно, чтобы сообщение выводилось еще до выполнения команды и висело, пока она выполняется!

Сразу нашел у себя косяк в том, что приведенный выше код работал в том же потоке, что и интерфейс. Вынес этот класс в отдельный поток, как написано здесь - не помогло.

Буду признателен за идеи.

 ,

solovey
()

отключить прокруткку по нажатию стрелок

Всем доброго времени суток.

Возникла задача отключить стандартное поведение клавиш со стрелками вверх/вниз, обеспечивающих прокрутку страницы.

Пробовал гуглить - нашел только похожее решение для события прокрутки колесика мыши:

if (elem.addEventListener) {
	 // IE9+, Opera, Chrome/Safari
	 elem.addEventListener ("mousewheel", onMouseWheel, false);
	 // Firefox
	 elem.addEventListener ("DOMMouseScroll", onMouseWheel, false);
} else { // IE<9
	 elem.attachEvent ("onmousewheel", onMouseWheel);
}
		
function onMouseWheel(e) {
	e = e || event;
	// отменить действие по умолчанию (прокрутку элемента/страницы)
	e.preventDefault ? e.preventDefault() : (e.returnValue = false);
}

Собственно, вопрос - как провернуть то же со стрелками? Пробовал вместо onmousewheel/других обработчиков воткнуть onkeypress или onkeydown - не работает...

 

solovey
()

Qt Embedded работа с com-портом

Всем доброго времени суток.

Есть девайс на arm, под который я пишу приложение на Qt. Разрабатываю и тестирую сначала на хосте, потом кросс-компилирую и заливаю на плату. Пока писал гуй, все прекрасно работало.

Сейчас возникла необходимость реализовать работу с com-портом. Сначала для этих целей взял QextSerialPort. На компе все завелось и общение через com-порт (с помощью конвертера usb-rs232) идет нормально. Попробовал кросс-компилировать на плату - ничего не работает.

Стал грешить на то, что криво собрал QextSerialPort. Попробовал использовать вместо него обычные системные вызовы linux. Резальтат тот-же. На компе через конвертер все работает, а после того, как кросс-компилирую для платы - нет.

Более того, на проблемы с компилятором это также не похоже, т.к. если написать чистый сишный код работы с com-портом и откомпилировать его из консоли (arm-linux-gnueabi-gcc file.c -o file...), то все работает...

Инициализирую порт так:

int comInit (const char *name) {
	int baud;
	struct termios opt;
	
	int fd = open (name, O_RDWR | O_NOCTTY);
	if (fd < 0) {
		perror ("open");
		return fd;
	}
	fsync (fd);
	tcflush (fd, TCIOFLUSH);
	bzero (&opt, sizeof (opt));
	opt.c_cflag |= (CREAD | CLOCAL);
	opt.c_cflag &= ~PARENB;
        opt.c_cflag &= ~CSTOPB;
	opt.c_cflag &= ~CSIZE;
	opt.c_cflag |= CS8;
	opt.c_cflag &= ~CBAUD;
	opt.c_cflag |= B115200;
	opt.c_cc[VMIN] = 0;
	opt.c_cc[VTIME] = 0;
	
	baud = B115200;
	
	cfsetispeed (&opt, baud);
	cfsetospeed (&opt, baud);
	
	tcsetattr (fd, TCSANOW, &opt);
	
	return fd;
}

Как уже говорил, если просто скомпилировать это как сишный файлик, то все работает. Если же подсунуть этот кусок в проект на Qt, то попытки передачи данных в порт ведутся (если верить логам), но ответ мне так и не прочитать.

Возможно, кто-нибудь сталкивался с подобной проблемой. Буду признателен за любые конструктивные идеи.

upd: Если набросать простую тестовую программку на Си, которая бы открывала порт, писала туда что-то и считывала ответ, то тоже ничего не работает. Но полноценный проект, написанный на Си и собранный тем же компилятором, успешно использует com-порт. Код инициализации порта выдран как-раз из этого проекта...

 , ,

solovey
()

udisks mount error

Всем доброго времени суток.

При попытке примонтировать флешку с помощью udisks вижу следующее:

ep9315:~# udisks --mount /dev/sdb1
Mount failed: Not Authorized: Remote Exception invoking org.freedesktop.PolicyKit1.Authority.CheckAuthorization() on /org/freedesktop/PolicyKit1/Authority at name org.freedesktop.PolicyKit1: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.PolicyKit1 was not provided by any .service files

Ситуация осложняется тем, что все происходит на одноплатнике на базе arm, где в качестве ОС используется emdebian.

Ради интереса сравнил файлы org.freedesktop.udisks.policy с одноплатника и с рабочей машины с debian squeeze - они одинаковые. При этом на компе все работает...

Есть какие-нибудь предположения? Пробовал нагуглить, но ничего толком не нашел.

Заранее спасибо

 , ,

solovey
()

Редактировать системный файл без запроса пароля

Всем доброго времени суток.

Собственно, сабж.

Необходимо разрешить пользователю редактирование /etc/network/interfaces без запроса пароля.

Пользователь запускает скрипт, в котором данные записываются через

echo $data >> /etc/network/interfaces

Знаю, что можно просто разрешить в sudoers запуск этого скрипта без пароля, но в sudoers надо прописать полный путь к этому скрипту, а предполагается, что его «местоположение» может меняться...

Есть какие-нибудь красивые варианты решения поставленной задачи?

Заранее спасибо!

solovey
()

Qt valgrind memleak

Всем доброго времени суток.

Есть проект на Qt. При запуске анализатора памяти valgrind из Qt Creator вываливается вот такая ошибка:

240,332 (156 direct, 240,176 indirect) bytes in 1 blocks are definitely lost in loss record 5,921 of 5,921
  в MyClock::MyClock(QLabel*) в myclock.cpp:4
  1: operator new(unsigned int) в /tmp/buildd/valgrind-3.6.0~svn11254+nmu1/coregrind/m_replacemalloc/vg_replace_malloc.c:255
  2: /home/ivan/QtSDK/Desktop/Qt/4.8.1/gcc/lib/libQtGui.so.4.8.1
  3: QFontDatabase::load(QFontPrivate const*, int) в /home/ivan/QtSDK/Desktop/Qt/4.8.1/gcc/lib/libQtGui.so.4.8.1
  4: QFontPrivate::engineForScript(int) const в /home/ivan/QtSDK/Desktop/Qt/4.8.1/gcc/lib/libQtGui.so.4.8.1
  5: QFontInfo::pointSize() const в /home/ivan/QtSDK/Desktop/Qt/4.8.1/gcc/lib/libQtGui.so.4.8.1
  6: MyClock::MyClock(QLabel*) в myclock.cpp:4
  7: MainWindow::initMainWgt() в mainwindow.cpp:25
  8: MainWindow::MainWindow(QWidget*, QFlags&lt;Qt::WindowType&gt;) в mainwindow.cpp:9
  9: main в main.cpp:16

Код класса MyClock, на который он ругается:

myclock.h

#ifndef MYCLOCK_H
#define MYCLOCK_H

#include <QDateTime>
#include <QLabel>
#include <QTimer>

class MyClock : public QLabel
{
private:
	QDateTime timestamp;

protected:
	virtual void timerEvent (QTimerEvent *);
	
public:
	explicit MyClock(QLabel *parent = 0);
	void showTime ();

};

#endif // MYCLOCK_H

myclock.cpp

#include "myclock.h"

MyClock::MyClock(QLabel *parent) : QLabel(parent) {
	setMaximumHeight (fontInfo ().pointSize ()*2); // вот здесь ругается
	showTime ();
	startTimer (1000);
}

void MyClock::showTime() {
	timestamp = QDateTime::currentDateTime ();
	setText (tr ("Текущее время: ") + timestamp.toString ("dd.MM.yyyy hh:mm:ss"));
}

void MyClock::timerEvent(QTimerEvent *) {
	showTime ();
}

Что-то я смотрю-смотрю, и не могу увидеть, где здесь утечка памяти =(

Буду признателен за помощь.

 memleak,

solovey
()

qt4 прочитать русский текст из xml

Всем доброго времени суток.

Есть такая xml-ка:

<?xml version="1.0" encoding="UTF-8"?>
<users>
  <user id="1">
    <name>Имя на русском</name>
  </user>
</users>

Пытаюсь прочитать ее, используя dom:

#include <QtXml>

int main (int argc, char **argv) {
	QDomDocument domDoc;
	QFile file ("users.xml");	
	if (file.open (QIODevice::ReadOnly)) {
		if (domDoc.setContent (&file)) {
			QDomElement docEl = domDoc.documentElement ();
			QDomNode node = docEl.firstChild ();
			while (!node.isNull ()) {
				qDebug () << node.nodeName ();
				QDomElement el = node.toElement ();
				if (!el.isNull ()) {
					QDomElement name = el.elementsByTagName ("name").at (0).toElement ();
					qDebug () << name.nodeName ();
					qDebug () << name.text ();
				}
				node = node.nextSibling ();
			}
		}
		file.close ();
	}
}

В результате русские символы просто не выводятся.

Не подскажете, как быть? Google ничего точно сказать не смог =(

Заранее спасибо.

P.S.: Хотелось бы использовать именно dom, так как реально структура xml будет сложнее. Это просто тестовый пример.

 ,

solovey
()

QFileDialog::getOpenFileName ограничить выбор одной директорией

Собственно, сабж.

Можно стандартными средствами сделать так, чтобы файл можно было выбирать только из определенной директории и ее поддиректорий, а подняться «выше» не было бы возможности?

 

solovey
()

javascript странная проверка условий

На JavaScript'e пишу редко. Случайно наткнулся на такую фишку. Хотелось бы понять, почему так.

Есть функция:

function toggleEl (el_id, state) {
	if (state) {
		document.getElementById(el_id).style.display = '';
	} else {
		document.getElementById(el_id).style.display = 'none';
	}
}

Если вторым параметром передавать true или false, то все работает как положено. Но если 1 или 0, то всегда выполняется первая ветка.

При этом alert (0 == false) дает true, то есть, казалось бы, все должно работать корректно.

Не сказать, что мне это сильно мешает, просто несколько неожиданно...

solovey
()

php как заставить скрипт освободить ресурсы?

Выполнялся скрипт, который отожрал 28М оперативки (см. вывод top -u www-data).

Tasks:  39 total,   1 running,  38 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.3%us,  3.3%sy,  0.0%ni, 96.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:     61340k total,    58316k used,     3024k free,      300k buffers
Swap:        0k total,        0k used,        0k free,    13068k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
 9158 www-data  15   0 45004  28m 3360 S  0.0 47.7   2:42.41 apache2            
 9159 www-data  15   0 23520 7408 3320 S  0.0 12.1   0:02.35 apache2            
 9160 www-data  15   0 23956 8064 3428 S  0.0 13.1   0:17.80 apache2            
 9172 www-data  18   0 23348 7208 3368 S  0.0 11.8   0:03.59 apache2            
 9275 www-data  18   0 23536 7616 3308 S  0.0 12.4   0:10.60 apache2

Собственно, скрипт выполнен, результаты получены. Как теперь заставить скрипт освободить ресурсы? А то он так и висит в задачах, занимаю кучу оперативки....

Upd: в apache2.conf уменьшил время KeepAliveTimeout - вроде помогло. Это нормальное решение, или костыль?

solovey
()

Навернулась флешка. Как восстановить?

Собственно, сабж.

Флешка внезапно перестала опознаваться. Вывод dmesg | tail:

ivan@debian:~$ dmesg | tail
[   64.746875] Initializing USB Mass Storage driver...
[   64.746958] scsi4 : SCSI emulation for USB Mass Storage devices
[   64.747032] usbcore: registered new interface driver usb-storage
[   64.747034] USB Mass Storage support registered.
[   64.747326] usb-storage: device found at 4
[   64.747328] usb-storage: waiting for device to settle before scanning
[   69.744147] usb-storage: device scan complete
[   69.821640] scsi 4:0:0:0: Direct-Access     Kingston DT Micro         PMAP PQ: 0 ANSI: 0 CCS
[   69.822020] sd 4:0:0:0: Attached scsi generic sg2 type 0
[   69.876121] sd 4:0:0:0: [sdb] Attached SCSI removable disk
Изначально на флешке был один раздел. Он бы определился как /dev/sdb1, а сейчас - только /dev/sdb...

fdisk тоже ничего не видит:

ivan@debian:~$ sudo fdisk -l
[sudo] password for ivan: 

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc8ebc8eb

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1       30723   246782466    7  HPFS/NTFS
/dev/sda2           30724       60801   241601535    5  Extended
/dev/sda5           30724       58189   220620613+   7  HPFS/NTFS
/dev/sda6           58190       58432     1951866   82  Linux swap / Solaris
/dev/sda7           58452       60801    18876343+  83  Linux
/dev/sda8           58433       58451      152586   83  Linux

Partition table entries are not in disk order

Информация на флешке не важна. Важно саму флешку оживить. Есть какие-нибудь идеи?

solovey
()

Как считается память, используемая php-скриптом?

Всем доброго времени суток.

Такой вопрос - после небольших изменений в моем скрипте php начал ругаться на то, что я пытаюсь выделить больше память, чем разрешено:

Fatal error: Allowed memory size of 8388608 bytes exhausted

Но если выводить количество используемой памяти через memory_get_usage (true) и memory_get_peak_usage (true), то больше 2 с копейками метров там нет..

В связи с этим вопрос - php суммирует всю выделенную память и следит, чтобы она не превысила установленное значение? Или все-таки у меня реально кривой скрипт?

 ,

solovey
()

RSS подписка на новые темы