PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (14): [1] 2 3 4 5 6 7 8 9 ... » В конец

> Найдено сообщений: 197
Haron Отправлено: 27 Августа, 2015 - 18:45:38 • Тема: CURL, Авторизация и отправка Post данных на сайте worldoftanks.ru • Форум: Работа с сетью

Ответов: 5
Просмотров: 1590
Вероятно, на странице есть переменные, которые генерируются при помощи javascript. И которые затем участвуют в запросах.
Haron Отправлено: 27 Августа, 2015 - 18:33:22 • Тема: Алгоритм переключения таблиц • Форум: Работа с СУБД

Ответов: 2
Просмотров: 784
Как всё элементарно оказывается... Устал я видимо, сильно.

Мелкий пишет:
И начальные значения переменных обычно перед циклом ставят


В реальном скрипте есть ещё один вложенный цикл, в котором имя данной переменной генерируется динамически. Поэтому за while() его не вынести.
Haron Отправлено: 27 Августа, 2015 - 18:03:58 • Тема: Алгоритм переключения таблиц • Форум: Работа с СУБД

Ответов: 2
Просмотров: 784
Здравствуйте

Есть задача с подводными камнями. Суть такова:

Имеем базу данных: В базе данных находятся таблицы, причём на каждый день таблица своя. Имена таблиц имеют вид table_2015_08_21, table_2015_08_22, etc...
В таблицу, в реальном времени, валится непрерывный поток данных. Каждая таблица имеет первичный уникальный ключ id. На колонке автоинкремент. В пределах суток id естественно, всегда уникален.

Имеем некий скрипт: Задача скрипта, вытаскивать свежеупавшие в таблицу данные раз в 15 секунд. Данные затем идут на обработку куда-либо. Алгоритм извелечения данных работает следующим образом:

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. while(true)
  4. {              
  5.         // Первый запуск
  6.         if (!isset($start_id)
  7.         {
  8.                 $table = 'table_' . implode('_', explode('-', date('Y-m-d')));
  9.                 $start_id = 1;
  10.         }
  11.  
  12.         // Получаем порцию данных
  13.         $data = $db -> select('SELECT * FROM ' . $table . ' WHERE id >= ' . $start_id;
  14.         if ($data)
  15.         {
  16.                 $start_id = $data[count($data)-1]['id']
  17.                 // process_data($data);
  18.         }
  19.  
  20.         sleep(15);
  21. }
  22.  
  23.  


Задача: Реализовать переключение скрипта на новую таблицу, в полночь (при смене дня), без потерь данных. Задача нетривиальная, и простая лишь на первый взгляд Улыбка. Я вот голову сломал.
Haron Отправлено: 20 Марта, 2013 - 18:40:46 • Тема: Сложные транзакции • Форум: Работа с СУБД

Ответов: 1
Просмотров: 1076
В общем есть такая конструкция:

PHP:
скопировать код в буфер обмена
  1.  
  2. function a() {
  3.     '...SQL Query...'
  4. }
  5.  
  6. function b() {
  7.     '...SQL Query...'
  8. }
  9.  
  10. function c() {
  11.     'START TRANSACTION'
  12.     '...SQL Query...'
  13.     '...SQL Query...'
  14.     '...SQL Query...'
  15.     'COMMIT TRANSACTION'
  16. }
  17.  
  18. function d() {
  19.     'START TRANSACTION'
  20.     a();
  21.     b();
  22.     c();
  23.     'COMMIT TRANSACTION'
  24. }
  25.  
  26. d();
  27.  


Насколько корректно она себя поведёт, при сбое скажем, в середине функции c()?
Допустимы ли подтразакции?
Haron Отправлено: 17 Ноября, 2012 - 07:13:28 • Тема: Нюансы логических выражений в php • Форум: Программирование на PHP

Ответов: 2
Просмотров: 437
Посмотрел таблицу. Да, динамическая типизация - это очень удобно и интуитивно понятно...

(array() == null) = true - вот это удивило

("php" == 0) = true, но ("php" === 0) = false - а это какбе символизирует суть языка для непосвящённых, да Улыбка. (При взгляде со стороны - php это ноль, но при ближайшем рассмотрении - уже не ноль)
Haron Отправлено: 16 Ноября, 2012 - 16:36:10 • Тема: Нюансы логических выражений в php • Форум: Программирование на PHP

Ответов: 2
Просмотров: 437
Здравствуйте, обнаружил интересную вещь:

Вот собственно - есть такой код:

PHP:
скопировать код в буфер обмена
  1. $r = <любое число>;
  2. if ($r == (2 or 3))
  3. {
  4.         echo 1;
  5. }
  6. // - Выведет 1
  7.  
  8. $r = 3
  9. if ($r === (2 or 3))
  10. {
  11.         echo 1;
  12. }
  13. // - Не выведет ничего.
  14.  


Вопрос, почему так?
Haron Отправлено: 11 Ноября, 2012 - 18:18:10 • Тема: Организация разработки крупного проекта через API • Форум: Вопросы новичков

Ответов: 25
Просмотров: 614
Я вот два с половиной года в одиночку писал веб, для одной известной онлайн-игры. И в данный момент - края не видно даже на горизонте хоть веб уже и разросся до 4 серверов.

И меня до недавнего времени мучил тот-же самый вопрос, касательно коллективной разработки. Однако, после того, как я подписал документ об отчуждении прав, получил официальную работу и зарплату, а также NDA и вполне реальную ответственность - проблема была снята, так как аналогичные документы были подписаны и моими новыми помощниками. И теперь я точно знаю - ничего не утечёт никуда, так как никому не охота платить штраф в 3 мегарубля и\или даже "сесть" за кражу интеллектуальной собственности.

А меры подобные описанным здесь - не помогут, увы. Если что-то принципиально можно слить - оно будет слито. Хоть ты за 100500 обсракций выноси свои классы, хоть огораживай фундаментально доступ. И даже если удастся обеспечить достойную защиту на таком уровне, она начнёт неиллюзорно мешать разработке. Знаете притчу про "гнилое ядро"?

Так что я бы вам посоветовал - прежде всего проработать организационные вопросы. Хотите помощников - дайте им достойную зарплату и не менее достойную работу "согласно ТК". Вместе с этим - у них появится и отвественность за свои действия, и в случае чего - вы будете иметь полное право призвать работника к ответственности. Тем более если у вас такой посещаемый проект, то уверен и прибыли более чем достаточно на то, чтобы нанять хотя бы двух человек официально.
Haron Отправлено: 30 Октября, 2012 - 20:52:50 • Тема: загрузить файл, послав его по E-mail или MMS на персональный адрес • Форум: Работа с файловой системой и файлами

Ответов: 4
Просмотров: 1801
http://www[dot]hevyweb[dot]com[dot]ua/progra[dot][dot][dot]tionmailphp[dot]html

Загрузка файлов на сервер - отдельная тема.
Haron Отправлено: 30 Октября, 2012 - 20:45:08 • Тема: Проблема с ipsRegistry.php • Форум: Если скрипт не работает

Ответов: 1
Просмотров: 1143
Текст ошибки бы привели. Телепаты - в отпуске, а IPB - он большой.
Haron Отправлено: 30 Октября, 2012 - 20:42:18 • Тема: Реализация ЧПУ • Форум: Вопросы новичков

Ответов: 2
Просмотров: 212
Разбирай REQUEST_URI и будет тебе счастье.
Haron Отправлено: 30 Октября, 2012 - 20:39:13 • Тема: Как избавиться от Notice • Форум: Вопросы новичков

Ответов: 9
Просмотров: 300
Если по уму - то isset - это всё таки проверка на существование переменной, а empty - проверка на пустоту.

Я бы не стал нарушать негласные правила.
Haron Отправлено: 29 Октября, 2012 - 03:48:24 • Тема: Простейший компилирующий шаблонизатор • Форум: Пользовательские функции

Ответов: 2
Просмотров: 409
Согласен, но тут цель - максимально упрощённо и понятно Улыбка.
Haron Отправлено: 29 Октября, 2012 - 03:39:19 • Тема: Простейший компилирующий шаблонизатор • Форум: Пользовательские функции

Ответов: 2
Просмотров: 409
Данный класс представляет собой - простейший компилирующий шаблонизатор, который компилирует шаблон 1 раз, в дальнейшем отображая его из скомпилированной в php-код версии, без необходимости дальнейшей компиляции. Дабы не усложнять - в нём намеренно имеется ТОЛЬКО реализация назначения переменных шаблона, компиляция, отображение и больше ничего.

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. class tpl
  4. {
  5.         public $tpl_vars = array();
  6.        
  7.         /*
  8.          * Назначает переменные шаблона
  9.          * @param string $name имя переменной
  10.          * @param string $value значение переменной
  11.          * @return bool true
  12.          */
  13.         public function assign($name, $value)
  14.         {
  15.                 $this -> tpl_vars[$name] = $value;
  16.                 return true;
  17.         }
  18.        
  19.         /*
  20.          * Компилирует файл шаблона и записывает
  21.          * результат компиляции в файл.
  22.          * @param string $template имя файла шаблона
  23.          * @return bool
  24.          */
  25.         private function compile($template)
  26.         {
  27.                 $template = file_get_contents($template);
  28.                 foreach ($this -> tpl_vars as $name => $value)
  29.                 {
  30.                         if (strpos($template, '{$' . $name . '}'))
  31.                         {
  32.                                 $template = str_replace('{$' . $name . '}', '<?PHP if (isset($this -> tpl_vars["' . $name . '"])) echo("' . $value . '"); ?>', $template);
  33.                         }
  34.                 }
  35.                 return file_put_contents('template.cache', $template);
  36.         }
  37.        
  38.         /*
  39.          * Отображает скомпилированный шаблон. Если скомпилированный
  40.          * шаблон не найден - производит компиляцию.
  41.          * @param string $template имя файла шаблона
  42.          */
  43.         public function display($template)
  44.         {
  45.                 if (file_exists($template . '.cache'))
  46.                 {
  47.                         include($template . '.cache');
  48.                         exit();
  49.                 }
  50.                 else
  51.                 {
  52.                         if ($this -> compile($template . '.html'))
  53.                         {
  54.                                $this -> display($template);
  55.                         }
  56.                         else
  57.                         {
  58.                                 echo 'Произошла ошибка!';
  59.                          }
  60.                 }
  61.         }
  62. }
  63.  
  64. $tpl = new tpl();
  65.  
  66. $tpl -> assign('title', 'Тестируем шаблонизатор');
  67. $tpl -> assign('link', 'http://php.su');
  68. $tpl -> assign('name', 'Учи похап!!!11');
  69.  
  70. $tpl -> display('template');


Содержимое шаблона "template.html"
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <title>{$title}</title>
  3. <a href="{$link}" />{$name}</a>
  4.  


Проще - некуда.
Haron Отправлено: 29 Октября, 2012 - 03:26:18 • Тема: Класс фильтрации GET POST COOKIE запросов • Форум: Пользовательские функции

Ответов: 11
Просмотров: 3952
Значит тебе он не нужен, проходи мимо Улыбка
Haron Отправлено: 26 Октября, 2012 - 15:17:40 • Тема: Класс фильтрации GET POST COOKIE запросов • Форум: Пользовательские функции

Ответов: 11
Просмотров: 3952
- Класс тотально упрощён и облегчен.
- Добавлена поддержка реквестов с неограниченной вложенность.
- Работает на php 5.4

Вместо рекурсии в методе filter_vars - можно было бы использовать функцию array_walk_recursive(), но к сожалению, в php 5.4 эта функция стала во многом бесполезной. В частности - она больше не может изменять перебираемый массив "на лету".

Страниц (14): [1] 2 3 4 5 6 7 8 9 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB