我已使用以下命令在我的cpanel中创建了一个cron作业:
/ usr / bin / php -q /home/user/public_html/folder/subfolder/sync.php
syns.php的内容几乎就是这样。当我使用domain.com/folder/subfolder/sync.php这样的域运行它时,它可以正常工作,但是当cron作业应该运行时,我看不到预期的结果,这意味着cron作业没有运行脚本。那么有谁能告诉我可能是什么问题?
<?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);
}
?>
答案 0 :(得分:1)
$_SERVER['DOCUMENT_ROOT']
由您的网络服务器(例如Apache)创建。如果您通过cronjob运行脚本,则会绕过您的网络服务器而DOCUMENT_ROOT
将不存在。
您应该以另一种方式确定配置文件的位置。一种方法是使用PHP的内置常量来处理文件位置,例如__FILE__
或__DIR__
:
$dir = __DIR__ . "/configuration.php";
__DIR__
指的是包含当前文件的文件夹,因此这将成为/home/user/public_html/folder/subfolder/configuration.php
。
从您使用$_SERVER['DOCUMENT_ROOT']
开始,我假设您的配置文件是public_html
以上的一个文件夹,因此您可以执行以下操作:
$dir = __DIR__ . "/../../../configuration.php";