2017-12-31 113 views
0

ich einen Cron-Job in meinem cPanel mit dem Befehl unten erstellt haben:Cron Job ausgeführt wird nicht das PHP-Skript

/usr/bin/php -q /home/user/public_html/folder/subfolder/sync.php

Der Inhalt von syns.php ist fast so. Es funktioniert ohne Fehler, wenn ich es mit der Domäne wie domain.com/folder/subfolder/sync.php ausführe, aber ich kann das erwartete Ergebnis nicht sehen, wenn der Cron-Job ausgeführt werden soll, was bedeutet, dass Cron-Job das Skript nicht ausführt. Kann mir jemand sagen, was das Problem sein könnte?

<?php 

$dir = str_replace("public_html","", $_SERVER["DOCUMENT_ROOT"]); 
$dir = $dir . "configuration.php"; 

if (file_exists($dir)) 
{ 
    require_once($dir); 
    sync(); 
} 
else 
{ 
    // echo ("Can't find the access data."); 
} 

function sync() 
{ 
    $connection = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE); 
    if(mysqli_connect_errno()) 
    { 
     // echo ("Failed to connect the database."); 
     exit(); 
    } 
    else 
    { 
     if(mysqli_ping($connection)) 
     { 
      $query = "SELECT OR UPDATE WHATEAVER FROM TABLE;"; 
      $result = mysqli_multi_query($connection, $query); 
      if($result) 
      { 
       // Do stuff 
      } 
      else 
      { 
       // echo("Failed to excute the query."); 
      } 
     } 
     else 
     { 
      // echo("Failed to ping the connection."); 
     } 
    } 
    mysqli_close($connection); 
} 

?> 

Antwort

1

$_SERVER['DOCUMENT_ROOT'] wird von Ihrem Webserver erstellt (zum Beispiel Apache), bevor PHP aufruft. Wenn Sie Ihr Skript über einen Cronjob ausführen, umgehen Sie Ihren Webserver und die DOCUMENT_ROOT wird nicht existieren.

Sie sollten den Speicherort Ihrer Konfigurationsdatei auf andere Weise bestimmen. Eine Möglichkeit ist, PHP integrierte Konstanten für Dateispeicherorte zu verwenden, wie __FILE__ oder __DIR__:

$dir = __DIR__ . "/configuration.php"; 

__DIR__ auf den Ordner bezieht sich die aktuelle Datei enthält, so wird diese /home/user/public_html/folder/subfolder/configuration.php werden.

Von dem, was Sie mit $_SERVER['DOCUMENT_ROOT'] tun Ich gehe davon aus Ihrer Konfigurationsdatei von public_html bis ein Ordner, so dass Sie so etwas tun könnten:

$dir = __DIR__ . "/../../../configuration.php"; 
+0

ich die $ dir geändert, aber immer noch nichts. Aber es wird mir jedes Mal eine E-Mail senden, wenn es versucht zu laufen und die E-Mail sagt "Konnte Eingabedatei nicht öffnen". Irgendein Rat? – John

+0

Das klingt wie ein Bash-Fehler, nicht ein PHP-Fehler. Stellen Sie sicher, dass sich PHP tatsächlich in '/ usr/bin/php' befindet, und überprüfen Sie den vollständigen Pfad zu Ihrer Datei' sync.php' in Ihren Cron-Einstellungen. Sind Sie auch in der Lage, SSH in den Server und versuchen, den vollständigen Befehl von dort auszuführen? – rickdenhaan