Ответы пользователя по тегу PHP
  • Как реализовать полосу загрузки от чиста 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 конечно же есть свои ф-кции которые позволяют работать с огромными файлами, но мы их трогать не стали.
    Ответ написан
    Комментировать