Utføre PHP-script remote

En tråd i 'PHP, SQL og databaser' startet av Bjørnar, 8 Feb 2019.

  1. Bjørnar

    Bjørnar Gründer

    Innlegg:
    1.766
    Hei,

    Jeg har en haug med domener, som alle har en fil liggende slik:

    domene.no/filen.php

    Den filen utfører en spesiell oppgave, og vha cron og curl besøkes den en gang i døgnet.

    Men, for hvert nye domene, må jeg opprette en ny cron-jobb, og det er bare en del arbeid. Så da tenkte jeg kunne gjøre det noe enklere.

    Jeg har en liste over alle domener, la oss si
    Kode:
    $urls = array(
    
    "https://domene1.no",
    "https://domene2.no",
    "https://domene3.no",
    "https://domene4.no",
    );
    
    Vil noe slikt som dette fungere, og gjøre jobben? Jeg er ikke stødig i curl, whatsoever:

    Kode:
    <?php
    
    $file = 'filen.php';
    
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, $urls.$file);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    
    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    } else { echo 'ok'; }
    curl_close ($ch);
    
    ?>
    
     
  2. Daniel Johnsrud

    Daniel Johnsrud Medlem

    Innlegg:
    83
    Hei,
    Forstår jeg riktig at du har en cronjob for hver enkelt fil på hver enkelt domene slik det er i dag. Men ønsker å endre det til å ha en "master" fil og 1 cronjob til den hver dag og så tar "masterfilen" og foretar kjøring\kontroll av alle filene i arrayet?
     
  3. Bjørnar

    Bjørnar Gründer

    Innlegg:
    1.766
    Det er korrekt oppdattet! :) Beklager forsøk på forklaring, dette er ikke min sterkeste side.
     
  4. Daniel Johnsrud

    Daniel Johnsrud Medlem

    Innlegg:
    83
    Da er du på rett spor :)
    Vanskelig å si noe mer uten å vite hva\hvordan noe kjøres fra mål-filene.

    Se litt på curl_multi_init for async handing av flere mål.
     
    Pong og Bjørnar liker dette.
  5. Bjørnar

    Bjørnar Gründer

    Innlegg:
    1.766
    På målfilene kjøres et enkelt PHP-script som fjerner noen filer på det aktuelle domenet (type opprydning av midlertidige filer som blir generert). Det ryddes opp, rett og slett fordi det genererer så sinnsyke mengder filer og størrelse.

    Kode:
    $files = glob($newpath.'*'); // get all file names
    foreach($files as $file){ // iterate files
      if(is_file($file))
        unlink($file); // delete file
    }
     
  6. Bjørnar

    Bjørnar Gründer

    Innlegg:
    1.766
    Takk for å ha dyttet meg i riktig retning!

    Jeg endte opp med følgende, og det ser ut til at det virker ganske greit:

    Kode:
    <?php
    function get_data($url) {
        $ch = curl_init();
        $timeout = 5;
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
      }
    
    $sites = array(
        "https://qtmedia.no/test1.php",
        "https://conversionrate.no/test1.php",
        "https://dagensside.no/test1.php",
      );
    
    foreach($sites as $site){
        $returned_content = get_data($site);
      }
    ?>
    
     
    Sist redigert: 8 Feb 2019
  7. Oscar Member

    Innlegg:
    141
    Bjørnar liker dette.
  8. Oscar Member

    Innlegg:
    141
    Well, du løste det mens jeg skrev. Tydelig at vi tenkte samme bane!
     
    Bjørnar liker dette.
  9. Daniel Johnsrud

    Daniel Johnsrud Medlem

    Innlegg:
    83
    Fikk noen telefoner. Supert det løste seg! Her var mitt forslag.

    Kode:
    <?php
    $nodes = array(
       "https://qtmedia.no/test1.php",
       "https://conversionrate.no/test1.php",
       "https://dagensside.no/test1.php"
    );
    
    $options = array(
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CONNECTTIMEOUT => 10
    );
    
    $curl_arr = [];
    $master = curl_multi_init();
    foreach($nodes as $node) {
    $url = $node;
    $curl_arr[$node] = curl_init($url);
    curl_setopt_array($curl_arr[$node], $options);
    curl_multi_add_handle($master, $curl_arr[$node]);
    }
    
    do {
    curl_multi_exec($master,$running);
    } while($running > 0);
    ?>
    Tror jeg ville lagt inn en form for validering i filene som kjøres om jeg skulle hatt det på min server, meen. Det det funker som du har gjort så :)
     
    Bjørnar liker dette.
  10. Bjørnar

    Bjørnar Gründer

    Innlegg:
    1.766
    Takk for innspill!

    Jeg har tatt det noen steg videre, og henter nå ut full liste fra serveren med domener, og slipper da å behandle arrayet med domener manuelt. Dette fungerer helt brillefint. Takk for hjelpa!
     
    Oscar og Daniel Johnsrud liker dette.
  11. Bjørnar

    Bjørnar Gründer

    Innlegg:
    1.766
    (to timers jobb sparer meg nå for sikkert 10 timer i året). Det er bare å finne flere slike tidstyver, og få driten automatisert.
     
    rune69 liker dette.
  12. JudeQuinn

    JudeQuinn Medlem

    Innlegg:
    151
    Kan jeg spoerre hva denne filen gjoer (siden du har den paa alle nettsider)? Bare nysgjerrig.
     
  13. Bjørnar

    Bjørnar Gründer

    Innlegg:
    1.766
    InfiniteWP tar backup av alle sidene, og lagret til dropbox. Men noen ganger feiler det, og da blir de liggende på webhotellet. Disse filene vil jeg da ha bort, for det blir noen GB i løpet av et år.
     
  14. JudeQuinn

    JudeQuinn Medlem

    Innlegg:
    151
    Ah ok :) Smart loesning
     

Del denne siden