В силу того что PHP является динамическим языком программирования с роизвольным уровнем вложения динамических элементов - то ваша защита может быть обойдена с помощью функции create_function код который является строковой константой - и может содержать через конкатенацию или экранирование или шифрование любую из вышеуказанных функций Аналогичным образом использование библиотеки runkit позволяет динамически модифицировать код любых функций - и по аналогии использовать в них любые операторы Кроме того начиная с PHP5.3 функции становятся объектами первого рода и их также можно динамически генерировать
А разве проверка строк кода на наличие выше описанные функции и при их обнаружении запрет исполнения кода не решит вопрос безопасности? Мне с помощью eval() необходимо выполнять только математическии операции. Причина использования функции eval: http://forum.php.su/topic.php?fo...1&topic=7841
P.S.: Извините за поднятие древней темы, но меня так же как и автору появилась потребность использовать функцию eval.
Здравствуйте.
Подскажите пожалуйста как можно реализовать ниже описанное, уже весь мозг изломал не могу придумать как такое сделать.
Ситуация:
Имеется программа написанная на php для внутреннего пользования в фирме, а именно полный учёт работы компьютерного сервис центра от сбора информации о заявках на ремонт, вывода статистики, до расчёта зарплаты. Раньше все формулы и условия для расчётов прописывались в коде.
Задача:
Теперь требуется создать конфигуратор для задания условий расчёта и составления формул по которым будут производится расчёты. Имеются различные переменные и массивы с данными.
Например:
Имеется заявка по ремонту ПК, для расчёта зарплаты имеют значение следующие параметры: тип заявки (дневная, вечерняя), тип выезда (в городе, за городом), сумма оказанных услуг и т.д. (для примера хватит и этого)
В зависимости от этих параметров будет выбирается формула для расчёта.
На данный момент я не знаю каким образом мне в конфигуратор предать переменные, сохранить после набора формулы и при выполнении расчётов их разобрать и подставить данные из переменных. С условиями применения формул я примерно представляю как можно разобраться, но формулы полный тупик.
скопируйте ВЕСЬ html код отображающейся в браузере на сайт http://regexpal[dot]com/ и примените свою регулярку и проверте будет работать или нет.
У меня подозрения что у вас получившейся текст немного не такой в котором вы ищете
выведите текст в котором ищешь данный текст и посмотри в чём точно ищешь. + что содержится в MasRes после поиска? (Добавление)
А вообще используйте тестер регулярных выражений: http://regexpal[dot]com/ http://www[dot]pcre[dot]ru/eval/
Все тесты проводились на localhost (Denver), так что сетевые задержки можно исключить. Хочу с начало всё отладить на localhoste, а уже потом когда допишу всё требуемое, выносить на сервер.
В такой же теме на форуме antichat (https://forum[dot]antichat[dot]ru/thread248758[dot]html ) было выдвинуто предположение что у меня скрипт упирается в допустимое количество потоков Апача. Я тоже к этому склоняюсь.
Загрузка тех же 500 файлов в 24 потока происходит за 3 секунды, а в 25 потоков за 161 секунду.
В настройках (c:\WebServers\usr\local\apache\conf\extra\httpd-mpm.conf) в Апаче нашёл переменную ThreadsPerChild =25 изменил на 60 и всё заработало.
JustUserR пишет:
У меня есть подозрение, что usleep можно уменьшить или убрать
после убирания задержки, 1 ядро ЦП загружено на 100% в течение всего времени работы скрипта.
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)0/0. Колличество загрузок(потоков):1
Затрачено времени на загрузку контрольного файла: 0
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)16/16. Колличество загрузок(потоков):50
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)16/16. Колличество загрузок(потоков):50
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)17/17. Колличество загрузок(потоков):50
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)16/16. Колличество загрузок(потоков):50
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)16/16. Колличество загрузок(потоков):50
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)16/16. Колличество загрузок(потоков):50
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)16/16. Колличество загрузок(потоков):50
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)16/16. Колличество загрузок(потоков):50
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)16/16. Колличество загрузок(потоков):50
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)16/16. Колличество загрузок(потоков):50
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)1/1. Колличество загрузок(потоков):1
Всего файлов/Ошибок: 500/0
Затрачено времени: 162
лог работы без usleep
Цитата:
ункция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)0/0. Колличество загрузок(потоков):1
Затрачено времени на загрузку контрольного файла: 0
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)16/16. Колличество загрузок(потоков):50
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)16/16. Колличество загрузок(потоков):50
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)16/16. Колличество загрузок(потоков):50
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)16/16. Колличество загрузок(потоков):50
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)16/16. Колличество загрузок(потоков):50
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)16/16. Колличество загрузок(потоков):50
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)16/16. Колличество загрузок(потоков):50
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)16/16. Колличество загрузок(потоков):50
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)17/17. Колличество загрузок(потоков):50
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)16/16. Колличество загрузок(потоков):50
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)0/0. Колличество загрузок(потоков):1
Всего файлов/Ошибок: 500/0
Затрачено времени: 161
т.е. 99% времени выполняется загрузка файлов, только почему так долго?? (Добавление)
Статистика работы цикла do while
Загружено: 3 за 0.140714883804
Загружено: 1 за 0.000761985778809
Загружено: 1 за 0.0652120113373
Загружено: 4 за 0.19765996933
Загружено: 15 за 0.00912094116211
Загружено: 1 за 7.74062299728
Загружено: 3 за 0.00156712532043
Загружено: 1 за 0.000958919525146
Загружено: 1 за 0.0139629840851
Загружено: 3 за 0.0597929954529
Загружено: 2 за 0.0270190238953
Загружено: 8 за 0.00556087493896
Загружено: 2 за 0.017627954483
Загружено: 3 за 0.061870098114
Загружено: 1 за 7.82833409309
Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)16.1831879616/16.1735069752. Колличество загрузок(потоков):50
Из чего видно что по какой то причине некоторые файлы загружаются очень медленно 7 секунд
[quote=OrmaJever]Ладно обьясню понятным способом на примере вашего скрипта.
В функцию multiCurl передаются масив $data каждое значение это название файла. Затем вы его помещаете в цыкл foreach для разбора масива.
За одни проход цыкл отдаёт одно значение, затем это значение попадает в curl и пока это одно значение НЕ обработается цыкл не даст 2 значение. И по этому у вас получается проходоы цыкла столько сколько и файлов!
Понятно причём здесь пхп?[/quote]
1) OrmaJever если вы не разу не пользовались multiCurl, то зачем лезть в тему?
2) В самом конце работы цыкла foreach есть функция
в коментарии всё описано
[quote]Где вы устанавливаете потоки? Как курл понимает что вам нужно имено 50 потоков?[/quote]
ответил выше
[quote]по второй сылке ничего не сказано про многопоточность. А вот по первый написан такой же бред как и тут.[/quote]
найдите следующий абзац, там всё написано
Я же лишь скажу что иногда тебе вовсе не нужна страница, а лишь её заголовки, как в нашем примере авторизации. Еще не нужно для каждого запроса создавать в памяти экземпляр механизма curl. Один раз его инициализируем, потом просто меняем параметры и адрес url. Думаю этого вполне хватит для успешного обмена данным с другими сайтами по началу, ну а если не хватит, то можно рассмотреть несколько сложных случаев далее. Несколько параллельных запросов и curl_multi_init
Если бы нам нужно было бы получить допустим содержания трех страниц, то наверное мы бы отправили запрос сначала на одну, получили результат, отправили на вторую и потом только на третью. Но вот чудо - эта библиотека позволяет отправить запрос сразу в 3 источника параллельно, при этом затратить на все это дело столько же времени сколько на один запрос.
[quote=OrmaJever]Если бы так было была бы сказка [quote]
про эту сказку спросите у одного из более опытного участника (http://forum.php.su/topic.php?fo...31566#1274431566 ) данного форума, раньше когда у меня возникали вопросы про multiCurl он мне хорошо помог
tisar пишет:
Уважаемый curl это не отдельная програма и она не может работать паралельно! curl работает вместе с php а php читает скрипт по одной строчке и выполняет. И никакой многопоточности тут нету. В перле есть многопоточность.
Я согласен что php нет многопоточности. multiCurl одновременно отправляет n запросов и собирает ответы и выдаёт все n ответов скрипту которые уже обрабатывает данные.
Время загрузки файлов будет равно времени загрузки самого 'медленного файла'. Быстрее получить разом n ответов чем n раз запрашивать данные т.е. во втором случае время загрузки будет складываться из времени загрузки всех файлов по очереди.
OrmaJever пишет:
tisar пишет:
Оу я думал вы их с удалёного сервера берёте.
А зачем для локалхоста использовать curl? copy() например уже не в щёт?
Это делается для тестирования чтобы избавиться от максимально возможного количества задержек. Вот именно потому что я беру файлы с localhost меня и поражает такое долгое время загрузки. как я уже писал выше при однопоточной загрузки загрузка всех файлов выполняется за 9 секунд, а при многопоточной она должна выполняться вообще за доли секунд.
Я хотел бы услышать комментарии от человека который использовал multiCurl и мог бы подсказать почему такая хрень происходит.
50 потоков? Это как? пхп изначально не имеет многопоточности. Я конешно могу ошибатся.
а при чём тут php? Cyrl это отдельная библиотека которая выполняет запросы параллельно.
Про multiCurl: http://job-interview.ru/articles/post/67, http://php.su/lessons/?lesson_11.
OrmaJever пишет:
А так впринципе ничего страного. Для 500 файлов это обычное время.а при чём тут php?
Не знаю как у вас но у меня копирование 500 файлов размером 13 байт происходит за несколько секунд. Насколько мне видится единственным ограничением на скорость загрузки файла будет время чтения его с HDD и обработки его WEB сервером, если бы файлы лежали где нибудь удалённо то ещё добавилось бы время задержки ответа и ограничения связанные со скорость Интернет канала.
В данном случае все файлы лежат на localhoste т.е. остаётся только время чтения файла с HDD и время обработки его WEB сервером. Счем может быть связана более чем 170 кратная задержка в работе мне совершенно не понятно???? При запуске в одно поточном режиме те же 500 файлов загружаются за 9 секунд
Здравствуйте.
Ситуация следующая.
Имеется скрипт для многопоточной загрузки с использованием multiCurl. Так вот по моему мнению он работает как то очень медленно на localhost`е(Denver) при работе в 50 потоков 500 файлов размером 13 байт загружались 161 секунд. Встречал сообщения что multiCurl запускали работать и на [URL="http://forum.searchengines.ru/showpost.php?p=4090238&postcount=66"]1000 потоков[/URL] и всё работало.
В производительность компьютера скрипт точно не упирается (Core 2 Duo E8500, ОЗУ 4 Гб) повышения потребления памяти не заметил, загрузка ЦП 5-10%.
echo'Функция multiCurl завершена. Время работы всей функции/получение загружаемых данных (do while)'.(time()-$time1).'/'.$time3.'. Колличество загрузок(потоков):'.$x.'<br>';
3) добавит в файл 2 функцию multiCurl
4) указать адрес где лежать загружаемые файлы $UrlPath
Осталась надежда только на гуру с форума, подскажите пожалуйста почему происходит такая хрень, что я сделал неправильно? Протестируйте этот скрипт кто нибудь у себя, хотелось бы сравнить результаты.