И убери дивы.
(А вообще-то если дивы, то дивы...)
6
« : 16 Октября 2007, 10:58:49 »
Одно время приходилось "ковыряться" во внутренностях системы eGroupWare ( http://www.egroupware.org/). Кое-что взял оттуда на вооружение, но многое видоизменилось в процессе использования, поэтому пример приведу из первоисточника. Если кто заинтерессуется может скачать архив дистрибутива (около 38Мб), в котором около 40 000 файлов (очень долго распаковывается и копируется  и посмотреть что там и как. В коде классов этой системы создают и подключают на лету сколько угодно различных классов. Получаются что-то типа "класс наследник нескольких классов" (Вот это может и приходиться в интерессующей задаче). Код имеет вид: ...... $this->so = CreateObject(\'addressbook.soaddressbook\'); .... $ret = $this->so->contacts->check_perms(False,$rights,$addr); ....
В первой строчке создается и подключается "на лету" класс ../addressbook/inc/class.soaddressbook.inc.php. Во второй строчке, в подключаемом классе в свою очеред подключили еще один класс, но используют все их методы в основном классе. Код функции создания и подключения класса "на лету":
function &CreateObject($class)
{
list($appname,$classname) = explode(\'.\',$class);
include_once($file=EGW_INCLUDE_ROOT.\'/\'.$appname.\'/inc/class.\'.$classname.\'.inc.php\');
if (class_exists($classname))
{
$args = func_get_args();
if(count($args) == 1)
{
$obj =& new $classname;
}
else
{
$code = \'$obj =& new \' . $classname . \'(\';
foreach($args as $n => $arg)
{
if ($n)
{
$code .= ($n > 1 ? \',\' : \'\') . \'$args[\' . $n . \']\';
}
}
$code .= \');\';
eval($code);
}
}
if (!is_object($obj))
{
echo "<p>CreateObject(\'$class\'): Cant instanciate class!!! \\n".function_backtrace(1)."</p>\\n";
}
return $obj;
}
Для передачи данных между различными классами используется массив $GLOBALS. (Этот массив может быть лучше и использовать вместо MySQL).
7
« : 15 Октября 2007, 15:32:36 »
А можно ли уточнить саму задачу. (По тексту обсуждается реализация одного из ее решений).
Если я правильно понял, то имеются несколько классов (объектов): class_1, class_2, ...., class_N. В этих классах, соответственно, определены функции (методы) func_1, func_2, ..., func_N. И есть основной класс - main_class, в котором необходимо выполнить один или несколько методов из набора func_1, ..., func_N. Причем заранее не известно сколько методов и какие именно методы понадобятся в ходе работы объета class_main.
Если задача именно такая, то могу предложить другое решение без использования MySQL.
В основном классе будет вызываться что-то типа:
$[результат]=$[основной_класс]->[подгружаемый_класс]->[метод_подгруженного_класса]([набор_аргументов]);
(Если задача именно такая, как я описал выше, то подробное решение приведу здесь. Если нет, то и незачем топик засорять).
8
« : 08 Октября 2007, 11:47:41 »
Как вариант решения на PHP http://spectator.ru/technology/php/php_search Нужно только в индекс-файле решить вопрос о сопоставлении ссылок "индексируемый файл с контентом"-"\'собранная\' страница". Задача, думаю, упростится, если структура сайта будет имет вид: "Файлы с контентом лежат в одной папке и имеют различные имена, их названия совпадают с названиями "собранных" страниц". Но и при структуре: "Контент... содержится в отдельных файлах и папках ... файлы с контентом имеют одинаковое имя..." задача поиска и индексации решается в рамках предлагаемого примера.
9
« : 19 Сентября 2007, 10:24:37 »
10
« : 14 Сентября 2007, 17:52:43 »
Если тема все еще актуальна, могу предложить следующее.
Для того чтобы ввести в это дело вероятность можно сделать различный т.н. "коэффициент атаки", очередность ударов и вероятности нанесения удара зависящую от того пропущен ли был предыдущий удар.
Для того чтобы удар был не всегда постоянный - ввсести т.н. моногмерный кубик - NdM+K . Например, если максимальный удар 850, то для него считать удар где-то по такой формуле - 11d5+795. Что означает удар будет 800-850. 11d5 означает что подбросили 5 раз 11-гранный кубик, то есть сумма 5-ти случайных чисел от 1 до 11. (Возможны другие варианты).
Вероятность события можно считать следующим образом. Например, вероятность события равна N%, тогда надо получить случайное число от 0 до 100 и если полученное число меньше N, то событие произошло, если больше,то неудача.
При определении "попал-непопал" считать, что вероятность равна 50% у каждого корабля.
Для внесения большей непредсказуемости можно не одновременно списывать нанеаенный ущерб с каждого корабля а по очереди. Случайно определять кто первый ударил при каждом ходе. У первого будет явно преимущество и если первый попал во второго, то снижать вероятность нанесения удара вторым скажем до 45% (что-то типа не оправился от удара). На следующем ходе запоминать пропустил ли противник предыдущий удар. В случае если имелась вероятность 45% и противник предыдущим ударом промазал, то вероятность опять повышается до 50%.
Рассчетов больших проводить не нужно, а исход битвы станет более непредсказуемым.
11
« : 19 Марта 2007, 16:01:26 »
Может в кавычках проблема?
12
« : 16 Марта 2007, 17:34:26 »
Решал подобную задачу. Без использования временных файлов - не получится видимо. Вот кусочек класса (немного подредактированный). //***************************************************** // Изменение масштаба рисунка в зависимости от параметра // (используется временный файл) //***************************************************** function PrintFotoResize($id, $kod) { $this->pIdPhoto=$id; $this->GetFoto(); $tmpfname = tempnam ("/temp", "img"); $fp = fopen($tmpfname, "w"); fwrite($fp, $this->pPhoto); fclose($fp); $im=imagecreatefromjpeg($tmpfname); $size=getimagesize($tmpfname); $koef1=0.15; $koef2=0.25; unlink($tmpfname); switch($kod) { case "small": { $new_w=intval($size[0]*$koef1); $new_h=intval($size[1]*$koef1); break; } case "medium": { $new_w=intval($size[0]*$koef2); $new_h=intval($size[1]*$koef2); break; } case "large": { $new_w=$size[0]; $new_h=$size[1] ;break; }
} $im1=imagecreatetruecolor($new_w,$new_h); $kd=imagecopyresized($im1,$im,0,0,0,0,$new_w,$new_h,$size[0],$size[1]);
if($kod==="large") { $my_www = imagecolorallocate($im1, 0, 0, 0); imagefilledrectangle ($im1, $size[0]-145, $size[1]-16, $size[0]-3, $size[1]-3, imagecolorallocate($im1, 255, 255, 255)); ImageString($im1, 5, $size[0]-140, $size[1]-17, "www.mysite.ru", $my_www); } if (!headers_sent()) { header("Content-type: image/jpeg"); } Imagejpeg($im1); ImageDestroy($im1); }
13
« : 15 Марта 2007, 18:30:33 »
Я на локальном сервере делал  Или договаривайся с провайдером (что мало вероятно), или храни все в файлах, а в базе указатели на файлы.
14
« : 15 Марта 2007, 16:21:53 »
Сталкивался. (База MySQL) В моем случае изменений только php.ini тоже было не достаточно. Что точно делал не помню... давно это было.  Собака была зарыта в настройках MySQL. Есть предположение, что нужно изменить значение переменной max_allowed_packet. Тут написано: ....Если используются поля BLOB большого размера, то рекомендуется увеличить значение этого параметра. В идеале нужно присвоить этой переменной значение размера самого большого BLOB поля. Может и еще что менял... не помню, но копать надо от настроек базы (Если MySQL... В других может аналогично...).
|