![]() |
|
Модераторы: Aliance, skyboy, MoLeX, ksnk |
![]()
|
|
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 2 Всего: 386 |
Muerto, create_function, imho, эффективней eval'а, я вроде как даже когда-то проверял. Впрочем - несложно проверить еще раз. Польза create_function в том, что в результате получается именно функция, по которой можно вычислять значения, то есть сделать функцию нужно один раз, а eval можно захотеть вызывать в цикле построения графика.
Безопасность тут примерно одна и та-же. Если код небезопасен - не важно eval'ить его или функцией запускать ... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: нет Всего: 4 |
Увы похоже пытаюсь прыгнуть выше моего понимания...
Я построил серию регулярок return preg_replace($search,$replace,$data); Они допустим из pattern=x^2+2x+5+x*5-sinx через $_SERVER['QUERY_STRING'] и explode Беру... Превращаю его в -> pow($x,2)+2*$x+5+$x*5-sin($x) Это у меня уже получилось... ВОт только через create-function он мне выдает тупо мой же паттерн...
Выдаст pow($x,2)+2*$x+5+$x*5-sin($x) |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 2 Всего: 386 |
может так? Это сообщение отредактировал(а) ksnk - 9.9.2010, 18:25 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: нет Всего: 4 |
ksnk, Ага спасибо, теперь работает=-)
pattern=x^2[/URL] x^2 pow($x,2) 9 Осталось немного о безопасности подумать... и добавить регулярки для самых распространенных выражений Как бы вы обезопасили такой запрос? очень страшно мне вставлять такое на публичное... Надо придумать функцию чисти которая все отсеит... Пока что перекодировал в
Но как мне кажется здесь разницы нету... это не в BD записывать... Нужно фильтровать левые буквы... Это сообщение отредактировал(а) Muerto - 9.9.2010, 18:38 |
|||
|
||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: нет Всего: 4 |
Все в общем... Готово...
Я вот ещё думаю может описание составить... но все же http://learn-php.ru/graph/1000~1000~p=tanx+x+4*x^3+2x+300 Я сделал что бы он записывал генерируемые картинки в папку кэша, и в след раз от туда читал... дабы меньше грузить сервер... Да и любопытно что там люди нагенирируют=-) Небольшое объяснение: graph/1000~1000~p=tanx+x+4*x^3+2x+300 Первая 1000 это WIDTH Вторая это HEIGHT P Это ваш y!!! Вот и все... |
|||
|
||||
| ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 2 Всего: 386 |
Выковырял и немного допилил свой класс, который вычисляет всякое. Он строит по предложенному выражению его php эквивалент с учетом скобок и протч.
Вот так, примерно, им можно пользоваться.
Добавлено @ 22:36 Настройка калькулятора производится в секции
Тут описываются бинарные, унарные операции и идентификаторы . Бинарные операции newOp2(первый параметр) перечисляются через пробел, если все операции имеют один приоритет (второй параметр). Чем выше приоритет - тем раньше будет выполняться операция. В С с приоритетами все наоборот Если бинарная операция не имеет описателя - она будет "заменятся" на саму себя. Если нужно другое толкование - нужно указать формат для sprintf'а с двумя параметрами. newOp1 - первый параметр - операция или список через пробел, второй параметр - маска для подмены newOpr - описание идентификаторов. (x, pi, time). При трансляци они подменяются своими эквивалентами. Сама функция строится как функция от 2-х переменных create_function('&$self,$x', ... так что внутри текста функции можно пользоваться и $x и $self? что позволяет вызывать методы класса в нужное время. Само выражение нечувствительно к регистру. Количество скобок, по идее, не ограниченно... Сообщения об ошибках маловразумительны, но зато они есть ;) Это сообщение отредактировал(а) ksnk - 10.9.2010, 22:39 Присоединённый файл ( Кол-во скачиваний: 5 )
nat2php.class.php.gz 2,86 Kb-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
||||
|
|||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: нет Всего: 4 |
Спасибо вам большое, полезная вещь...
На свежую голову попытаюсь разобраться Сложный вы класс написали... Я вот задачку для себя решил вот так
Но так мне увы не удалось поймать все случая... хотя все стандартные варианты ловит... Игрался немного сегодня пытался к примеру что бы делало такое (18+x)^2 но сложность была в том что когда я в регулярку добавлял что бы ловило () +-*/ оно считало верно (18+x)^2, и ставило pow(18+$x,2) но вот беда в том что если я писал (18+x)^2+2x то Глючило... я в конце пока решил не портить что есть... Задание своей цели достигло... выучил я очень многое... Вот кстати очень клевая функции http://learn-php.ru/graph/1000~1000~p=xtanxcosx http://learn-php.ru/graph/1000~1000~p=xtanxatanx Я вас кстати в Credits снизу справа добавил =-) Это сообщение отредактировал(а) Muerto - 11.9.2010, 01:17 |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Графика | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |