Zadejte hledaný výraz...

Nekonečná smyčka.

Richard Hutta
verified
rating uzivatele
(1 hodnocení)
23. 7. 2011 19:29:11
Dobrý den.
Měl bych na zdejší odborníky malou prosbu. Snažím jse dát dohromady malý prográmek, který by měl za účel na vybraných webových adresách sebrat emaily s odkazy. A pokračovat po jednotlivých odkazech. Ovšem narazil jsem na úskalí, cyklení celého programu. Zdrojový kód:
error_reporting(E_NOTICE);
set_time_limit(0);
include "dibi/dibi/dibi.php";
dibi::connect(array('driver' => 'mysqli', 'host' => 'localhost', 'username' => '****', 'password' => '*****', 'database' => '*****', 'charset' => 'utf8'));
function extract_email_address ($string) {
foreach (preg_split('/ /', $string) as $token) {
$email = filter_var(filter_var($token, FILTER_SANITIZE_EMAIL), FILTER_VALIDATE_EMAIL);
if ($email !== false) {
$arrays = array ("mail" => $email, "id" => "");
dibi::query('INSERT INTO emaily', $arrays);
}
}
}
function file_get_contents_curl($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
function zjisti_url ($string, $uri) {
$sek = explode('href="', $string);
foreach ($sek as $x) {
$dok = explode('"', $x);
if(count($dok) > 1) {
if(strpos($dok, "http://") !== false) {
$arrays = array ("link" => $dok, "ID" => "");
dibi::query('INSERT INTO odkazy', $arrays);
$vypis_zjisti = "Přidán odkaz ".$dok;
} else {
$arrays = array ("link" => $uri."/".$dok, "ID" => "");
dibi::query('INSERT INTO odkazy', $arrays);
$vypis_zjisti = "Přidán odkaz ".$uri."/".$dok;
}
}
}
}
$odkazy = dibi::fetchAll("SELECT * FROM odkazy");
foreach($odkazy as $x) {
$web_string = file_get_contents_curl($x);
zjisti_url($web_string, $x);
extract_email_address($web_string);
dibi::query("DELETE * FROM odkazy WHERE link= %s", $x);
}
?>
Na konci programu je cykl foreach, který ale nefunguje tak jak by měl. Představoval bych jsi kdyby to šlo tak, že by to byla nekonečná smyčka tudíž by jse celý tento ckyl pořád opakoval. Zkoušel jsem while foreach rekurzi a nakonec jsem to ještě kombinoval, ale nikdy jsem nedoáhl úspěchu. Program pokaždé sebral nejspíše první odkaz v db poté uložil všechny odkazy co byly na webu a tím to haslo. Pro lepší manipulaci s databází jsem použil dibi. Var_dumpoval jsem veškeré vstupy a vše jse zdálo být v pořádku. !!POZOR tento program neslouží k vykrádání emailů jak by jsi jiní mohli myslet, ale pouze je to kontrola pro majitele více webů. Poradili by jste mě co s tím ?
23. 7. 2011 19:29:11
https://webtrh.cz/diskuse/nekonecna-smycka/#reply658777
Jan Matoušek
verified
rating uzivatele
(12 hodnocení)
23. 7. 2011 20:05:20
program nemuzes zacyklit, musis ho poustet pomoci cronu...
moje reseni by bylo:
projit stranku, ulozit url, maily
pri dalsim spusteni navstivit nove stranky s rozumnym limitem a v db si je oznacit jako navstivene
na navstivenych strankavh ulozit maily, odkazy
a tak do kola, ale musis to delat tim cronem...
23. 7. 2011 20:05:20
https://webtrh.cz/diskuse/nekonecna-smycka/#reply658776
Tom
verified
rating uzivatele
(6 hodnocení)
23. 7. 2011 21:04:06
Nemusí se to dělat cronem, stačí odstranit limit doby běhu skriptu a zavolat funkci ignore_user_abort (nebo tak nějak) a může to běžet třeba do nekonečna
23. 7. 2011 21:04:06
https://webtrh.cz/diskuse/nekonecna-smycka/#reply658775
Jan Matoušek
verified
rating uzivatele
(12 hodnocení)
23. 7. 2011 23:24:58
Na konci programu je cykl foreach, který ale nefunguje tak jak by měl.
pokud máš v db uloženou pouze startovací stránku, tak by měl udělat to, co ti dělá.
zde se vybere ta url
nyní to projede web uloží maily a url, vymaže použitý odkaz a script končí...
pokud spustíš skript znovu, už by měl projet uložené adresy uložit nové a skončit
jestli ti tohle takhle šlape, tak bych volil zmiňovaný cron, co by ho spouštěl dokola
23. 7. 2011 23:24:58
https://webtrh.cz/diskuse/nekonecna-smycka/#reply658774
Richard Hutta
verified
rating uzivatele
(1 hodnocení)
24. 7. 2011 06:38:24
Tak jsem to zkoumal dále, ale ukázalo jse že ani ignore_user_abort(true); nepomohlo. Nejvíc mě štve že to sebere vždy jenom první odkayz (i když je jich tam více). Můžete to zkusit u sebe. Používám verzi 1.2. Takže abych to shrnul sebere první odkaz přejde na web vyfiltruje linky a adresy a procedura končí. Jsem bezmocný potřebuju pomoct :D prosím..
24. 7. 2011 06:38:24
https://webtrh.cz/diskuse/nekonecna-smycka/#reply658773
Jan Matoušek
verified
rating uzivatele
(12 hodnocení)
24. 7. 2011 08:45:40
no a nehází ti to nekde chybu? jinak mi nejde do hlavy proc to neprojde vse
pokud mam takovouhle chybu, tak vetsinou si ji rozkouskuju, zkusil, bych nejdrive
pokud to pujde, tak chyba v ziskanich dat neni, tak bych zkusil pridat
a takhle to zkouset da... jinak uz nevim:-)
24. 7. 2011 08:45:40
https://webtrh.cz/diskuse/nekonecna-smycka/#reply658772
Richard Hutta
verified
rating uzivatele
(1 hodnocení)
24. 7. 2011 09:46:46
No tak děkuji za odpovědi byly jste lakavý chybal byla v
dibi::query("DELETE * FROM odkazy WHERE link= %s", $x);
který mazal linky dřív než jse stačili přečíst což byla chyba..
24. 7. 2011 09:46:46
https://webtrh.cz/diskuse/nekonecna-smycka/#reply658771
Pro odpověď se přihlašte.
Přihlásit