Автор оригинала: Вурдалак
Можно посоветовать preg_replace(). Или даже preg_match().
С другой стороны — откуда эти теги?
Теги будут браться с программы которая слушает определенный порт и отдает плэин текст.
Спасибо за советы
Решил провести тесты... возможно кому-то интересно будет
Для подсчета юзал функцию microtime(1);
PHP:
$time_start = microtime(true);
............
$time_end = microtime(true);
1 string это одна строчка включающая
PHP:
$data_2 = '<users>8</users><IfIsSlave>it\'s just test! ;-)</IfIsSlave><blah>dummy</blah><asd>dummy</asd>';
а html page это html страничка....
--------------
PHP:
list(,$data_my) = explode("<IfIsSlave>", $data_my , 2);
list($data_my,) = explode("</IfIsSlave>", $data_my , 2);
/* 1 string
* Started at 1268164781.969 ended at 1268164781.969
* Started at 1268164793.7756 ended at 1268164793.7756
* Started at 1268164802.8831 ended at 1268164802.8832
* Started at 1268164812.8133 ended at 1268164812.8133
* Started at 1268164827.0988 ended at 1268164827.0989
* Started at 1268164859.136 ended at 1268164859.136
* html page
* Started at 1268165761.4235 ended at 1268165761.4235
* Started at 1268165774.6263 ended at 1268165774.6263
*/
PHP:
$data_my = ereg_replace(".*<IfIsSlave>", "", $data_my); //extract data
$data_my = ereg_replace("</IfIsSlave>.*", "", $data_my); //extract data
/* 1 string
* Started at 1268164889.9833 ended at 1268164889.9834 (0.00011610984802246)
* Started at 1268164920.3605 ended at 1268164920.3606 (0.0001220703125)
* Started at 1268164940.2691 ended at 1268164940.2692 (0.00011920928955078)
* Started at 1268164966.7055 ended at 1268164966.7056 (0.00011801719665527)
* Started at 1268164989.311 ended at 1268164989.3111 (0.00010514259338379)
* Started at 1268165015.8015 ended at 1268165015.8017 (0.00013303756713867)
* html page
* Started at 1268165790.488 ended at 1268165790.4881 (0.00011897087097168)
* Started at 1268165822.8748 ended at 1268165822.875 (0.00011277198791504)
*/
PHP:
$data_my = preg_replace('/(.*)<IfIsSlave>/i',null,$data_my);
$data_my = preg_replace('/<\/IfIsSlave>(.*)/i',null,$data_my);
/* 1 string
* Started at 1268165107.2066 ended at 1268165107.2066
* Started at 1268165128.5477 ended at 1268165128.5477
* Started at 1268165153.5112 ended at 1268165153.5113
* Started at 1268165163.2111 ended at 1268165163.2111
* Started at 1268165172.924 ended at 1268165172.924
* Started at 1268165181.9631 ended at 1268165181.9631
* html page
* Started at 1268165860.5845 ended at 1268165860.5845
* Started at 1268165883.1944 ended at 1268165883.1944
*/
PHP:
$start = strpos($data_my, '<IfIsSlave>' ) + strlen('<IfIsSlave>');
$length = strpos($data_my, '</IfIsSlave>' ) - $start;
$data_my = substr( $data_my, $start , $length );
/* 1 string
* Started at 1268165226.6797 ended at 1268165226.6798
* Started at 1268165233.9606 ended at 1268165233.9606
* Started at 1268165242.018 ended at 1268165242.018
* Started at 1268165247.7993 ended at 1268165247.7993
* Started at 1268165253.8756 ended at 1268165253.8756
* Started at 1268165260.4907 ended at 1268165260.4907
* html page
* Started at 1268165926.9691 ended at 1268165926.9691
* Started at 1268165937.5984 ended at 1268165937.5984
*/
тестировалось на нагрузке в 50%
Linux linux-0fiy 2.6.31.12-0.1-desktop #1 SMP PREEMPT 2010-01-27 08:20:11 +0100 i686 i686 i386 GNU/Linux
забавно.. думал preg_replace() будет работать медленнее чем explode()
буду юзать preg_replace() или substr()
как видите ereg_replace() вообще "стоит и курит в сторонке".. не думал, что будет такая значительная разница... нужно поскорее переписывать скрипт
в общем все, что я хотел узнать я узнал.. тему можно закрывать...
сам скрипт для теста
PHP:
<?php
$data_0 = <<<HTML
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Object not found!</title>
<link rev="made" href="mailto:sandel@localhost" />
<style type="text/css"><!--/*--><![CDATA[/*><!--*/
body { color: #000000; background-color: #FFFFFF; }
a:link { color: #0000CC; }
p, address {margin-left: 3em;}
span {font-size: smaller;}
/*]]>*/--></style>
</head>
<body>
<h1>Object not found!</h1>
<p>
The requested URL was not found on this server.
If you entered the URL manually please check your
spelling and try again.
</p>
<p>
If you think this is a server error, please contact
the <a href="mailto:sandel@localhost">webmaster</a>.
</p>
<IfIsSlave>it's just test! ;-)</IfIsSlave>
<h2>Error 404</h2>
<address>
<a href="/">localhost</a><br />
<span>Tue Mar 9 20:37:26 2010<br />
Apache/2.2.13 (Linux/SUSE)</span>
</address>
</body>
</html>
HTML;
$data_2 = '<users>8</users><IfIsSlave>it\'s just test! ;-)</IfIsSlave><blah>dummy</blah><Scuko>dummy</Scuko>';
$data_my = $data_2;
$time_start = microtime(true);
////////////////////////////////////
//list(,$data_my) = explode("<IfIsSlave>", $data_my , 2);
//list($data_my,) = explode("</IfIsSlave>", $data_my , 2);
/* 1 string
* Started at 1268164781.969 ended at 1268164781.969
* Started at 1268164793.7756 ended at 1268164793.7756
* Started at 1268164802.8831 ended at 1268164802.8832
* Started at 1268164812.8133 ended at 1268164812.8133
* Started at 1268164827.0988 ended at 1268164827.0989
* Started at 1268164859.136 ended at 1268164859.136
* html page
* Started at 1268165761.4235 ended at 1268165761.4235
* Started at 1268165774.6263 ended at 1268165774.6263
*/
////////////////////////////////////
//$data_my = ereg_replace(".*<IfIsSlave>", "", $data_my); //extract data
//$data_my = ereg_replace("</IfIsSlave>.*", "", $data_my); //extract data
/* 1 string
* Started at 1268164889.9833 ended at 1268164889.9834 (0.00011610984802246)
* Started at 1268164920.3605 ended at 1268164920.3606 (0.0001220703125)
* Started at 1268164940.2691 ended at 1268164940.2692 (0.00011920928955078)
* Started at 1268164966.7055 ended at 1268164966.7056 (0.00011801719665527)
* Started at 1268164989.311 ended at 1268164989.3111 (0.00010514259338379)
* Started at 1268165015.8015 ended at 1268165015.8017 (0.00013303756713867)
* html page
* Started at 1268165790.488 ended at 1268165790.4881 (0.00011897087097168)
* Started at 1268165822.8748 ended at 1268165822.875 (0.00011277198791504)
*/
////////////////////////////////////
//$data_my = preg_replace('/(.*)<IfIsSlave>/i',null,$data_my);
//$data_my = preg_replace('/<\/IfIsSlave>(.*)/i',null,$data_my);
/* 1 string
* Started at 1268165107.2066 ended at 1268165107.2066
* Started at 1268165128.5477 ended at 1268165128.5477
* Started at 1268165153.5112 ended at 1268165153.5113
* Started at 1268165163.2111 ended at 1268165163.2111
* Started at 1268165172.924 ended at 1268165172.924
* Started at 1268165181.9631 ended at 1268165181.9631
* html page
* Started at 1268165860.5845 ended at 1268165860.5845
* Started at 1268165883.1944 ended at 1268165883.1944
*/
////////////////////////////////////
//$start = strpos($data_my, '<IfIsSlave>' ) + strlen('<IfIsSlave>');
//$length = strpos($data_my, '</IfIsSlave>' ) - $start;
//$data_my = substr( $data_my, $start , $length );
/* 1 string
* Started at 1268165226.6797 ended at 1268165226.6798
* Started at 1268165233.9606 ended at 1268165233.9606
* Started at 1268165242.018 ended at 1268165242.018
* Started at 1268165247.7993 ended at 1268165247.7993
* Started at 1268165253.8756 ended at 1268165253.8756
* Started at 1268165260.4907 ended at 1268165260.4907
* html page
* Started at 1268165926.9691 ended at 1268165926.9691
* Started at 1268165937.5984 ended at 1268165937.5984
*/
////////////////////////////////////
$time_end = microtime(true);
(float)$time_page_load = $time_end - $time_start;
//$time_page_load = round($time_page_load, 4);
echo 'RESULT: '.$data_my.'<br />';
echo 'TIME ELAPSED: '.$time_page_load.'<br />';
echo 'Started at '.$time_start.' ended at '.$time_end;
?>