Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Optymalizacja...
Forum PHP.pl > Forum > PHP
cahe
Mam oto taki skrypt:

[php:1:3bff2b36d8]<?php
set_time_limit(0);
error_reporting(E_ALL);
function getmicrotime()
{
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
$time_start = getmicrotime(); // pobranie czasu poczatkowego
$glowny = file("glowny.txt");
$porownanie = file("telefony.txt");
$adresy = file("klienci.txt");
$i = 0;
$n = 0;
echo('Trwa liczenie danych... to moze portrwac do 5 minut<br><pre>');
echo('0% 50% 100%' . "n");
flush();

foreach($glowny as $main_item)
{
$n++;
$main_item = trim($main_item);
if(!isset($nowa_partia))
{
if(ereg("^[0-9]{4}-[0-9]{2}-[0-9]{2}$", $main_item))
{
$nowa_partia = 1;
$data = $main_item;
}
if(ereg("^[0-9]+|[0-9]+$", $main_item) OR ereg("^[0-9]+$", $main_item))
{
$dane = explode("|", $main_item);
$imei = $dane[0];
if(count($dane) == 2)
{
$sim = $dane[1];
}
else $sim = '';
//$i++;
foreach($porownanie as $comp_item)
{
$comp_dane = explode("|", $comp_item);
/*if(ereg("^[0-9]{6,16}$", $comp_dane[0]) OR ereg("^[0-9]{6,16}$", $comp_dane[1]))
{
$comp_imei = trim($comp_dane[0]);
$comp_sim = '';
}
elseif(ereg("^[0-9]+$", $comp_dane[1]) OR ereg("^[0-9]+$", $comp_dane[0]))
{
$comp_sim = trim($comp_dane[1]);
$comp_imei = '';
}*/
if((int) $comp_dane[0] > 1)
{
$comp_dane[0] = (int) $comp_dane[0];
}
elseif((int) $comp_dane[1] > 1)
{
$comp_dane[1] = (int) $comp_dane[1];
}

if((is_int($comp_dane[0]) AND strlen($comp_dane[0]) < 17) OR (is_int($comp_dane[1]) AND strlen($comp_dane[1]) < 17))
{
$comp_imei = trim($comp_dane[0]);
$comp_sim = '';
}
elseif((is_int($comp_dane[0]) AND strlen($comp_dane[0]) > 17) OR (is_int($comp_dane[1]) AND strlen($comp_dane[1]) > 17))
{
$comp_sim = trim($comp_dane[1]);
$comp_imei = '';
}
else echo("<br>BLAD! " . strlen($comp_sim) ."<br>");
if($comp_imei == $imei)
{
$i++;
//echo('Mamy trafienie!<br>');
//echo("IMEI: $imei SIM: $sim LINIJKA: $comp_item <br>");

}
}
}
}
else
{
$n_zestawu = $main_item;
unset($nowa_partia);
}

if(is_int($n / 100))
{
echo("*");
flush();
}
}
$time_end = getmicrotime(); // obliczenie roznicy czasu
$time = round($time_end - $time_start, 4); //zaokraglenie
echo '<br>Skrypt wykonany w czasie: '.$time.' sekundy</p>';
echo("</pre><br>$i");
?>[/php:1:3bff2b36d8]

A jego wynik jest taki:

Kod
Trwa liczenie danych... to moze portrwac do 5 minut



0%       50%      100%

**********************

Skrypt wykonany w czasie: 92.3461 sekundy





2


Jak moge przyspieszyć? Jakieś pomysły? Próbowałem regexpów - strasznie wolne (dwa razy).[/code]
kurtz
Hej
Cytat
Mam oto taki skrypt:

[php:1:bbcb711f21]<?php
...
?>[/php:1:bbcb711f21]

Jak moge przyspieszyć? Jakieś pomysły? Próbowałem regexpów - strasznie wolne (dwa razy).

Kolejno
1) zmienic ereg na preg_match - sa szybsze. zapewniam
2) zamiast foreach for
3) zamiast pobierac caly plik fgets'uj po linijce i wtedy dopiero analizuj.

4!) skrypt ktory dostarczyles jest niekompletny - brak plikow .txt (wiec jak sprawdzac czy pomoglo..) oraz brak komentarzy wiec wogole nie wiadomo co skrypt ma robic.


Pozdrawiam
cahe
Dobrze. Wzbogaciłem skrypt o komentarze i dodałem potrzebne pliki. Można to ściągnąć z: www.telecard.pl/tmp/php.pl.rar

Proszę o w miarę szybką pomoc :-). Ew. też o zgłaszanie błędów (wszystkich chętnych oczywiście, jak ktoś nie chce pomóc to niech nie mówi "eeeee... czego ty wymagasz" tylko siedzi cicho :-)).
DeyV
A ja proszę tylko o to, by nie dawać mi paczek z rarem...
Czy tak ciężko na końcu skryptu dodać [manual:e5dc9cfd41]highlight_file()[/manual:e5dc9cfd41]?
scanner
albo chociaż [manual:0a0a65c4a6]show_source()[/manual:0a0a65c4a6]
DeyV
8) dobre, dobre laugh.gif
Cytat
show_source
show_source -- Alias of highlight_file()
Description
This function is an alias of highlight_file().
cahe
Cytat
A ja proszę tylko o to, by nie dawać mi paczek z rarem...
Czy tak ciężko na końcu skryptu dodać [manual:334737d510]highlight_file()[/manual:334737d510]?


Może i nie ciężko, ale mój komputer nie chodzi 24h na dobe ;-). Pozatym skrypt nie wymaga bazy/ustawiania czegokolwiek. Można spokojnie testować lokalnie. (unikanie błędów, optymalizacja), ale skoro się upierasz (może masz racje - nie wiem :-)) to prosze: http://212.160.55.72/

Zresztą gdyby każdy sobie testował na moim komputerze, zajeło by to wieczność, bo skrypt wykonuje się niezwykle długo (2 minuty, czasem więcej).

//Update: po krótkim namyśle wpadłem na fajny pomysł :-). Highlightowany pliczek jest tu: http://212.160.55.72/index_hl.php
treewood
Kurtz << no ja bym nie byl taki pewny czy ten preg_match jest szybszy w stosunku do ereg ... w przypadku wyrazen regularnych tak ... ale w przypadku gdy szukamy np "ala" w stringu "ala ma kota" ... to z moich testow wynika, ze ereg wygrywa

z reszta radze samemu potestowac ...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.