• Как добавить одну запись в двух таблицах (разные бд)?

    LINKeRxUA
    @LINKeRxUA
    web dev
    master->slave репликация или использовать 2 соединения. и делать execute запросов на 2х соединениях
    Ответ написан
  • Как реализовать полосу загрузки от чиста n до числа n2?

    LINKeRxUA
    @LINKeRxUA
    web dev
    <?php
      $max = 150; //(mb) максимально возможное значение === 100%
     $cur = 1.48; //(mb) текущее значение
     $percent = ( $cur * 100 / $max );
     var_dump( "процент спользования %:", $percent ) ;
     echo( PHP_EOL );
     var_dump( "Осталось доступно %:", 100 - $percent ) ; 
     echo( PHP_EOL );
     var_dump( "А это в мегабайтах:", $max - ($max * $percent / 100) ) ;



    Код

    string(40) "процент спользования %:"
    float(0.98666666666667)

    string(34) "Осталось доступно %:"
    float(99.013333333333)

    string(10) "А это в мегабайтах:"
    float(148.52)

    Bootstrap для отображения
    Ответ написан
    Комментировать
  • Как разделить текст на 2 части php?

    LINKeRxUA
    @LINKeRxUA
    web dev
    Вот набросал:
    Должно розделить на 2 части.
    Определить позицию обрыва строки с конца в первой части и с начала во второй.
    По этому - определяем, какому блоку принадлежит часть текста что больше. Ну и соответственно делим
    <?php
    $text = 'aaa'.PHP_EOL.'bbbbb'.PHP_EOL.'ccccccc'.PHP_EOL.'dddd'.PHP_EOL.'eeeeeeeeeeeee'.PHP_EOL.'fff';
    
    $length = strlen($text);
    $half = (int) ($length / 2);
    
    $part_1 = substr($text,0, $half);
    $part_2 = substr($text,$half);
    
    
    
    $eol_1 = strrpos( $part_1, PHP_EOL, 0); 			// last  position from string start of first part
    $eol_2 = $half + strpos( $part_2, PHP_EOL, 0 );		// first position from string start of second part
    
    
    $shift_1 = $half - $eol_1; // char shift size till middle point of first block
    $shift_2 = $eol_2 - $half; // char shift size till middle point of last block
    	
    	if($shift_1 < $shift_2){ // PHP_EOL is closer to firts block, so larger size of block saved in second block
    
    	    $part_1 = substr($text,0,$shift_1);
    		$part_2 = substr($text,$shift_1);
    	
    	}else{	
    		
    		$part_1 = substr($text,0,$eol_1);
    		$part_2 = substr($text,$eol_1);
    		
    	}
    echo '<pre>';
    var_dump( array(
    	'length' 		=> $length, 
    	'middle point' 	=> $half, 
    	'position of EOL of first block' => $eol_1,
    	'position of EOL of second block' => $half + $eol_2,
    	
    ) );
    var_dump( $part_1, $part_2 );
    
    ?>
    Ответ написан
    4 комментария
  • Электронный товар. Или как продавать ключи?

    LINKeRxUA
    @LINKeRxUA
    web dev
    Пфф.. Какой вопрос - такой и ответ:
    Каждый пользователь имеет свой ID в базе так же как и товар

    пароль доступа может быть сгенерирован по определенному набору переменных + подсолить на всякий... Пример:
    const ACCESS_SALT = 'UBGYKUASO^B^NDbfsud67tydgiwe67';
    $access_key = md5( md5( $userID . $itemID . ACCESS_SALT ) . $userID);
    Ответ написан
    Комментировать
  • Как распараллелить процессы php?

    LINKeRxUA
    @LINKeRxUA
    web dev
    Я бы делал так:
    Сперва собрать в таблицу БД коллекцию ссылок для обработки парсером. По завершению - не через file_get_html() а через мультипоточный cURL запросить контент и сохранить его в базу. По завершению - в цикле пробежаться по таблице и порциями в 20 записей выбирать id не обработанных парсером записей и тем же мультикурлом запросить другой урл для обработки, к примеру "/parser.php?id=1" .../parser.php?id=20"
    Каждый из 20 запросов будет работать паралельно.

    Скорее всего у вас проблема не в парсинге а соединении. По-этому мультикурл вам поможет, так как это подобно открытию страниц одновременно в нескольких вкладках браузера, а ваш код - это работ в одном окне и в одной вкладке.

    И между прочем расставьте метки времени в своем коде для профилирования и отсчета времени на операцию. и вы будете знать наверняка, что заняло больше времени.
    Ответ написан
    Комментировать
  • Как импортировать большие файлы из Excel в PHP?

    LINKeRxUA
    @LINKeRxUA
    web dev
    100 лет назад была проблема с xml, не то чтобы очень большие файлы или ресурсоемкая задача для современных ЭВМ. Железо было слабеньким :)
    Стояла задача импорта информации в каталог. Мы сделали следующим образом:
    В БД в таблицу с колонками "путь к файлу", "позиция"делали запись. изначально позиция 0;
    Потом читаем файл с позиции указанной в этой таблице и читаем порциями по N байт. Проверяем наличие открывающего тега "" и закрывающего через ф-ции работы с подстроками. как только нашли X закрытых тегов (к примеру 30 элементов) и столько же открытых - обрезаем лишнее и получаем разметку для X продуктов. Помещаем это в тело валидного XML документа, делаем DOMDocument, парсим и подготавливаем массив данных.

    Потом в транзакции сохраняем обработанное количество строк и проставляем позицию с какой остановились. И тут коммит. Это все дело должно быть в цикле. Если проблемы с max_execution_time и нет возможности его убрать - то тогда такую процедуру можно и на аякс повесить! Ведь она сохраняет текущий прогресс операции.

    Для XML конечно же есть свои ф-кции которые позволяют работать с огромными файлами, но мы их трогать не стали.
    Ответ написан
    Комментировать
  • Google chrome. Как убрать часть панели разработчика?

    LINKeRxUA
    @LINKeRxUA Автор вопроса
    web dev
    Ахахах!!! Помогло!
    Ответ написан
    Комментировать
  • Не могу разобраться с сессией?

    LINKeRxUA
    @LINKeRxUA
    web dev
    Я работаю на Kohana - это ветка от code igniter, по-этому попробую объяснить как работает Kohana.
    Ваше значение - скорее timestamp генерации сессии. попробуйте поместить в сессию ID пользователя по своему ключу. и поэкспериментировать!

    Дело в том что существует конфиг который служит для идентификации TTL сессии.
    В момент создания сессии - создается сессионный файл. Если время создания этого файла больше чем TTL - то данная считается простроченной. Чтобы избежать просрочки обертка Session::instance() - всегда перезаписывает сессионный файл, обновляя там ключ который отвечает за последнее обращение к сессии.

    1441008941 === Mon, 31 Aug 2015 08:15:41 GMT

    Это скорее всего служебная инфа. Попробуйте поместить id\login\email в соответсвующие ключи и повыводить дампы сессии.

    Это все актуально только если вы работете в пределах одного домена. Если вопрос идет о субдоменах - то там нужно учитывать то что подскажет гугл по запросу "one session across subdomains"
    Ответ написан
  • Предпросмотр загрузки фоток, реально ли прикрутить к кохане 3.1?

    LINKeRxUA
    @LINKeRxUA
    web dev
    Раньше я ajax-ом пред-загружал во временную папку и выводил оттуда preview; Но! Но так делать - не хорошо! Есть такакя вещь как FileReader и readAsDataURL на чистом JS. - вот это более элегантный спопсоб!
    Ответ написан
    Комментировать
  • Как сделать парсинг информации сайта?

    LINKeRxUA
    @LINKeRxUA
    web dev
    Я использую многопоточно CURL (мультикурл) через proxy - для того чтобы получить контент предположим с 100-500 страниц за 3-5 секнд. И PHP DomDocument + DomXPath для выпаршивания.

    Благо мощности сервера хватает.
    Ответ написан
  • Как правильно написать запрос sql для вывода данных из 2х таблиц?

    LINKeRxUA
    @LINKeRxUA
    web dev
    Ваши таблицы не отвечают даже первой нормальной форме!
    Лучше привести к такому виду:

    stuff //товары                banner
    id| price| ... и т.д.            id|width|height| ... и т.д.
    |                                 |
    |      stuffToBanner              |
    |____stuffID | bannerID___________| // и эта комбинация должна быть PK,
    // FK на "stuff.id" и  FK на "banner.id"


    Тоесть есть:
    товары с ID, 1,2,3,4,5,6,7,8,9,10
    баннеры с ID, 1,2

    и связная таблица
    stuffID, bannerID
    1,1
    1,2
    3,1

    Тогда по INNER JOIN можно очень быстро определить что выводить, а что нет
    Ответ написан
    Комментировать