Utføre PHP-script remote

Bjørnar

Gründer
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);

?>
 
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?
 

Bjørnar

Gründer
Det er korrekt oppdattet! :) Beklager forsøk på forklaring, dette er ikke min sterkeste side.
 

Bjørnar

Gründer
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
}
 

Bjørnar

Gründer
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:
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

Gründer
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!
 

Bjørnar

Gründer
(to timers jobb sparer meg nå for sikkert 10 timer i året). Det er bare å finne flere slike tidstyver, og få driten automatisert.
 

Bjørnar

Gründer
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.
 

peder1963

New Member
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);

?>
Kode:
<?php

$urls = array(
    "https://domene1.no",
    "https://domene2.no",
    "https://domene3.no",
    "https://domene4.no"
);

$file = '/filen.php';  // Legg til skråstrek foran filnavnet
$results = array();    // Array for å lagre resultater

foreach ($urls as $baseUrl) {
    $fullUrl = $baseUrl . $file;
    
    // Initialiser curl for hver request
    $ch = curl_init();
    
    // Sett curl-alternativer
    curl_setopt($ch, CURLOPT_URL, $fullUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);        // Timeout etter 30 sekunder
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Hopp over SSL-verifisering hvis nødvendig
    
    // Utfør request
    $result = curl_exec($ch);
    
    if (curl_errno($ch)) {
        $results[$baseUrl] = 'Error: ' . curl_error($ch);
    } else {
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if ($httpCode == 200) {
            $results[$baseUrl] = 'OK (200)';
        } else {
            $results[$baseUrl] = 'Error: HTTP code ' . $httpCode;
        }
    }
    
    curl_close($ch);
}

// Skriv ut resultater
foreach ($results as $url => $status) {
    echo $url . ': ' . $status . "\n";
}

// Valgfritt: Logg resultater til fil
$logFile = 'curl_log.txt';
$logEntry = date('Y-m-d H:i:s') . "\n";
foreach ($results as $url => $status) {
    $logEntry .= "$url: $status\n";
}
$logEntry .= "------------------------\n";
file_put_contents($logFile, $logEntry, FILE_APPEND);

?>
 
Topp