• 12-09-2020, 21:10:09
    #1
    Arkadaslar bot yaptim her sey guzel calisiyor ancak soyle bir sorun var 100 icerik cekiyor bu da sunucuyu bayagi yoruyor ve http hatalari aliyorum boyle bir seyi engellemek icin nasil bir yol izlemeliyim 500 vermeden geri dönüş mesajlarini almak istiyorum 500 verse bile calisiyor ama geri dönüş mesajlari mysql yuku fazla oluyor yuku en aza indirgemek icin nasil bir yol izlemeliyim ? Aklima gorev dosyasi gibi bir sistem geldi gorev var ise cron tetiklediginde islemi gerceklestirecek sekilde ancak geri dönüş mesajini almak sorun oluyor her türlü oneriye acigim.
  • 12-09-2020, 21:19:49
    #2
    php.ini den max_execution degerini arttırın, yapilabiliyorsa 0 yapınİşlemi parçalara bolebilirsiniz, başla ve bitir parametreleri oluşturun get metodu ile çekip,döngüye sokabilirsiniz, yani mesela ilk 1 ve 100 arasındaki verileri çek,veya 100 ile 200 arasındaki verileri çek gibi.
  • 12-09-2020, 21:23:16
    #3
    Kimlik doğrulama veya yönetimden onay bekliyor.
    ​​​​bu tür islemler için ajax kullanıyorum, kullandığınız yapı nasil işliyor bilmiyorum, tahminen yapınız şu şekilde:

    Bir php dosyanız var, bu dosyaya gelen post isteğinden sonra işlemler başlıyor.

    Eger bir döngü içerisinde islem gerceklesiyorsa döngüyü kaldırın, tekil işlem yapsın.

    Sonrasında ilgili dosyaya isteklerinizi ajax ile gönderin, ajax istekleri arasında bir süre koyun. 1 işlem ortalama 10 saniye sürüyorsa istek aralıklarını 12 saniye gibi ayarlayın.
  • 12-09-2020, 21:23:56
    #4
    WebGun adlı üyeden alıntı: mesajı görüntüle
    php.ini den max_execution degerini arttırın, yapilabiliyorsa 0 yapınİşlemi parçalara bolebilirsiniz, başla ve bitir parametreleri oluşturun get metodu ile çekip,döngüye sokabilirsiniz, yani mesela ilk 1 ve 100 arasındaki verileri çek,veya 100 ile 200 arasındaki verileri çek gibi.
    Hocam daha profesyonelce cozmek istiyorum javascript tarafinda yapilsa 500 hatasi alinmaz gibi ama profesyonelce olur mu bilmiyorum
  • 12-09-2020, 21:29:19
    #5
    Vindicta adlı üyeden alıntı: mesajı görüntüle
    bu tür islemler için ajax kullanıyorum, kullandığınız yapı nasil işliyor bilmiyorum, tahminen yapınız şu şekilde:

    Bir php dosyanız var, bu dosyaya gelen post isteğinden sonra işlemler başlıyor.

    Eger bir döngü içerisinde islem gerceklesiyorsa döngüyü kaldırın, tekil işlem yapsın.

    Sonrasında ilgili dosyaya isteklerinizi ajax ile gönderin, ajax istekleri arasında bir süre koyun. 1 işlem ortalama 10 saniye sürüyorsa istek aralıklarını 12 saniye gibi ayarlayın.
    Hocam bot dizi botu api kullanarak dizi sezon bolum bilgilerini cekiyorum bölümleri donguye alıp kaynagi veritabanina kaydediyorum mesela bazi diziler 400 bölüm kadar oluyor sorunum burada basliyor javascript tarafinda yapmak mantikli gibi ama aklima senaryo gelmiyor
  • 12-09-2020, 21:36:23
    #6
    WebKadir adlı üyeden alıntı: mesajı görüntüle
    Hocam bot dizi botu api kullanarak dizi sezon bolum bilgilerini cekiyorum bölümleri donguye alıp kaynagi veritabanina kaydediyorum mesela bazi diziler 400 bölüm kadar oluyor sorunum burada basliyor javascript tarafinda yapmak mantikli gibi ama aklima senaryo gelmiyor
    Bolumlerede parametre verebilirsiniz mesela
    bot.php?dizibaşlangıc=0&dizibitiş=50&bolumbaslangi c=1&bolumbitis =20 gibi
  • 12-09-2020, 21:40:50
    #7
    Şu şekilde de yapabilirsiniz
    Mesela dizi ve bolum diye iki parametren olur,
    Her bölüm atladiginde bölüm parametrelerini bir arttırır sayfayı yönlendirirsin böylece sayfa yenilendiğinden timeouta girmez
    Mesela bot.php?dizi=2&bölüm=$bolum+1 , eğer dizinin bölüm sayısı parametreden küçükse hep bir arttirirsin, eşit olursa bot durur (exit;), böylece o dizinin tüm bölümlerini sorunsuz çekersin.
    <meta refresh kodunu kullanarak sayfayı yönlendirin,kodun ardından PHP ile exit cekin.
    Mobilden yazıyorum yazım hataları için kusura bakmayın, mantığı anlatabilmişimdir umarim
    Ama bu bahsettiğim mantık cron desteklemez,
    Tarayıcıda baslatirsin tarayicin surekli sayfayı yenilerek bölüm bölüm çeker içerikleri
  • 12-09-2020, 22:21:11
    #8
    WebKadir adlı üyeden alıntı: mesajı görüntüle
    Hocam bot dizi botu api kullanarak dizi sezon bolum bilgilerini cekiyorum bölümleri donguye alıp kaynagi veritabanina kaydediyorum mesela bazi diziler 400 bölüm kadar oluyor sorunum burada basliyor javascript tarafinda yapmak mantikli gibi ama aklima senaryo gelmiyor
    Şu şekilde bir senaryo izleyebilirsiniz hocam;


    Yapınız nasıl tam bilmesemde, vereceğim örnekte yapı şu şekilde olacak:

    Bir api kullanıyorum ve verileri çekmek için bu apiye "id" adında bir post atıyorum. Bu apide bana geri dönüş olarak ad,soyad,yaş,telefon şeklinde verilerle json çıktısı veriyor. Bense 100.000 kişinin id bilgisine sahibim. api adresim: myapi.com/id_api.php benim sitem vindicta.com ve api işlemlerimi vindicta.com/api_post.php adresinde yapıyorum. api_post.php adresinde dönen işlemde şu; myapi.com/id_api.php adresine id adında post gönderdikten sonra dönen çıktıdaki bilgileri veritabanına insert ediyorum. Yani api_post.php adresine id adında bir post geldiğinde, bu post verisini alarak apiye post gönderiyorum.

    Buraya kadar gayet güzel. Ortak sorunumuz şu ki: 100.000 adet istek göndereceğim.

    $id_data = array(
    "3","5","12",79"....,"96532"...,"106598"
    );
    Üstteki değişkeni sürekli kullanacağım için üstte dursun. $id_data dizisinde 100k veri var (varsayalım yani ).

    api_post.php sayfamda şu şekilde bir kod kullandığımı varsayalım:

    <?php
    /* api_post.php {5xx hatalarına yol açan versiyon} */
    foreach ( $id_data as $id ) {
    // her döngüde öncelikle curl işlemleri çalıştırıyorum, idleri post olarak gönderiyorum ve çıktıları kullanarak crud işlemleri yapıyorum var sayalım bu kod bloğunda
    }
    ?>
    İyi güzel, 10 tanesi tamamlandı, 20si tamamlandı.. sonrasında sunucumuz isteklere cevap veremedi 5xx hatamızı yedik ve bir süreliğine göçtü.


    Bu şekilde bir durumunuz olduğunu varsayıyorum. Şu şekilde bir işlem yapmaya karar veriyorum; öncelikle bir ajax_request.php adında bir dosya oluşturuyorum.

    <?php
    /* ajax_request.php */
    
    $count = 0;
    foreach ( $id_data as $id ) {
    $count += 10000;
    ?>
    setTimeout(function(){
    $.ajax({
    url: "http://vindicta.com/api_post.php",
    type: "post",
    data: {"id":<?=$id?>}
    });
    }, <?=$count;?>);
    <?php } ?>
    üstteki ajax_request.php dosyamız api_post.php dosyasına id adında post gönderecek 10 saniyede bir, farklı idlerle. (array içindeki idleri yani)

    <?php
    /* api_post.php {tekil işlem yapan hali} */
    
    if ( isset ( $_POST["id"] ) ) {
    
    //curl ile bağlandık varsayalım, postfields true olarak ayarladık ve post data olarak post[id] verimizi id olarak apiye gönderdik. çıktımızı json_decode ile object olarak aldık. çıktımızın adı $output; olsun.
    
    // $output->ad , $output->soyad vs. olarak erişimimizi sağlıyoruz varsayalım. sonrasındada veritabanıma gerekli bilgileri gönderiyorum.
    
    /*
    $sql = "INSERT INTO users (ad, soyad, yas) VALUES ($output->ad,$output->soyad,$output->yas)";
    $pdo->prepare($sql)->execute($data);
    gibisinden.
    */
    } else {
    die();
    }
    ?>
    Bu şekilde bir yapı kullanabilirsiniz hocam. Herhangi bir sonuca ulaşamazsanız teamviewer ile yardımcı olmaya çalışırım.
  • 12-09-2020, 22:39:49
    #9
    Vindicta adlı üyeden alıntı: mesajı görüntüle
    Şu şekilde bir senaryo izleyebilirsiniz hocam;


    Yapınız nasıl tam bilmesemde, vereceğim örnekte yapı şu şekilde olacak:

    Bir api kullanıyorum ve verileri çekmek için bu apiye "id" adında bir post atıyorum. Bu apide bana geri dönüş olarak ad,soyad,yaş,telefon şeklinde verilerle json çıktısı veriyor. Bense 100.000 kişinin id bilgisine sahibim. api adresim: myapi.com/id_api.php benim sitem vindicta.com ve api işlemlerimi vindicta.com/api_post.php adresinde yapıyorum. api_post.php adresinde dönen işlemde şu; myapi.com/id_api.php adresine id adında post gönderdikten sonra dönen çıktıdaki bilgileri veritabanına insert ediyorum. Yani api_post.php adresine id adında bir post geldiğinde, bu post verisini alarak apiye post gönderiyorum.

    Buraya kadar gayet güzel. Ortak sorunumuz şu ki: 100.000 adet istek göndereceğim.

    $id_data = array(
    "3","5","12",79"....,"96532"...,"106598"
    );
    Üstteki değişkeni sürekli kullanacağım için üstte dursun. $id_data dizisinde 100k veri var (varsayalım yani ).

    api_post.php sayfamda şu şekilde bir kod kullandığımı varsayalım:

    <?php
    /* api_post.php {5xx hatalarına yol açan versiyon} */
    foreach ( $id_data as $id ) {
    // her döngüde öncelikle curl işlemleri çalıştırıyorum, idleri post olarak gönderiyorum ve çıktıları kullanarak crud işlemleri yapıyorum var sayalım bu kod bloğunda
    }
    ?>
    İyi güzel, 10 tanesi tamamlandı, 20si tamamlandı.. sonrasında sunucumuz isteklere cevap veremedi 5xx hatamızı yedik ve bir süreliğine göçtü.


    Bu şekilde bir durumunuz olduğunu varsayıyorum. Şu şekilde bir işlem yapmaya karar veriyorum; öncelikle bir ajax_request.php adında bir dosya oluşturuyorum.

    <?php
    /* ajax_request.php */
    
    $count = 0;
    foreach ( $id_data as $id ) {
    $count += 10000;
    ?>
    setTimeout(function(){
    $.ajax({
    url: "http://vindicta.com/api_post.php",
    type: "post",
    data: {"id":<?=$id?>}
    });
    }, <?=$count;?>);
    <?php } ?>
    üstteki ajax_request.php dosyamız api_post.php dosyasına id adında post gönderecek 10 saniyede bir, farklı idlerle. (array içindeki idleri yani)

    <?php
    /* api_post.php {tekil işlem yapan hali} */
    
    if ( isset ( $_POST["id"] ) ) {
    
    //curl ile bağlandık varsayalım, postfields true olarak ayarladık ve post data olarak post[id] verimizi id olarak apiye gönderdik. çıktımızı json_decode ile object olarak aldık. çıktımızın adı $output; olsun.
    
    // $output->ad , $output->soyad vs. olarak erişimimizi sağlıyoruz varsayalım. sonrasındada veritabanıma gerekli bilgileri gönderiyorum.
    
    /*
    $sql = "INSERT INTO users (ad, soyad, yas) VALUES ($output->ad,$output->soyad,$output->yas)";
    $pdo->prepare($sql)->execute($data);
    gibisinden.
    */
    } else {
    die();
    }
    ?>
    Bu şekilde bir yapı kullanabilirsiniz hocam. Herhangi bir sonuca ulaşamazsanız teamviewer ile yardımcı olmaya çalışırım.
    Deneyecegim hocam