rmdir/unlink 无法通过 cron 工作
rmdir/unlink not working through cron
我写了一个 cron 作业,它将使用 DateTime
.
删除日期早于 today - 14 days
的文件夹(及其中的文件)
在我的服务器上,如果我在网络浏览器中浏览到文件 (cleanup.php),它会正常删除文件夹和文件。
cron 作业运行是因为我得到了第一个 mail
。我在想这是一个权限问题?谁能建议?
CRON 命令是 运行:
php /home/myUserName/public_html/file-transfer/uploads/cleanup.php
<?php
mail('myEmail@gmail.com','cron bon', 'cleanup starting');
date_default_timezone_set('America/Los_Angeles');
$ignore = array(
'.',
'..',
'.htaccess',
'cleanup.php'
);
function rrmdir($dir)
{
if (is_dir($dir))
{
$objects = scandir($dir);
foreach ($objects as $object)
{
if ($object != "." && $object != "..")
{
if (filetype($dir . "/" . $object) == "dir") rrmdir($dir . "/" . $object); else unlink($dir . "/" . $object);
}
}
reset($objects);
rmdir($dir);
}
}
$today = DateTime::createFromFormat('m-d-Y', date('m-d-Y', strtotime('today')));
$dirs = scandir('./');
foreach ($dirs as $dir)
{
if (!in_array($dir, $ignore))
{
$dirDate = DateTime::createFromFormat('m-d-Y', $dir);
$interval = $dirDate->diff($today);
if ($interval->format('%r%a') > 14)
{
rrmdir($dir);
}
}
}
mail('myEmail@gmail.com','cron bon', 'cleanup has ran');
?>
我不知道如何调试它,因为 cron 正在启动它
编辑
@SuperJer 最初在与 ./
有关的问题上是正确的,我已经更新了我的代码,现在它正在作为 cron 作业工作。
<?php
date_default_timezone_set('America/Los_Angeles');
$ignore = array(
'.',
'..',
'.htaccess',
'cleanup.php'
);
$fullPath = dirname(__FILE__) . '/'; //-- Added this line and added it to my rrmdir function
function rrmdir($dir)
{
if (is_dir($dir))
{
$objects = scandir($dir);
foreach ($objects as $object)
{
if ($object != "." && $object != "..")
{
if (filetype($dir . "/" . $object) == "dir") rrmdir($dir . "/" . $object); else unlink($dir . "/" . $object);
}
}
reset($objects);
rmdir($dir);
}
}
$today = DateTime::createFromFormat('m-d-Y', date('m-d-Y', strtotime('today')));
$dirs = scandir($fullPath);
$msg = '';
foreach ($dirs as $dir)
{
if (!in_array($dir, $ignore))
{
$dirDate = DateTime::createFromFormat('m-d-Y', $dir);
$interval = $dirDate->diff($today);
if ($interval->format('%r%a') > 14) rrmdir($fullPath . $dir);
}
}
?>
我认为问题可能是 php 在 apache 下和命令行(或 cron)下 运行 解析文件路径的方式不同。
如果您的应用程序允许,请不要使用 ./
,而是使用完整路径,例如 /home/myUserName/public_html/file-transfer/uploads/
您还可以使用 dirname(__FILE__)
获取当前 运行 脚本的完整系统路径,这将使它更便携。
此外,这种差异也会影响 include
和 require
路径。
我写了一个 cron 作业,它将使用 DateTime
.
today - 14 days
的文件夹(及其中的文件)
在我的服务器上,如果我在网络浏览器中浏览到文件 (cleanup.php),它会正常删除文件夹和文件。
cron 作业运行是因为我得到了第一个 mail
。我在想这是一个权限问题?谁能建议?
CRON 命令是 运行:
php /home/myUserName/public_html/file-transfer/uploads/cleanup.php
<?php
mail('myEmail@gmail.com','cron bon', 'cleanup starting');
date_default_timezone_set('America/Los_Angeles');
$ignore = array(
'.',
'..',
'.htaccess',
'cleanup.php'
);
function rrmdir($dir)
{
if (is_dir($dir))
{
$objects = scandir($dir);
foreach ($objects as $object)
{
if ($object != "." && $object != "..")
{
if (filetype($dir . "/" . $object) == "dir") rrmdir($dir . "/" . $object); else unlink($dir . "/" . $object);
}
}
reset($objects);
rmdir($dir);
}
}
$today = DateTime::createFromFormat('m-d-Y', date('m-d-Y', strtotime('today')));
$dirs = scandir('./');
foreach ($dirs as $dir)
{
if (!in_array($dir, $ignore))
{
$dirDate = DateTime::createFromFormat('m-d-Y', $dir);
$interval = $dirDate->diff($today);
if ($interval->format('%r%a') > 14)
{
rrmdir($dir);
}
}
}
mail('myEmail@gmail.com','cron bon', 'cleanup has ran');
?>
我不知道如何调试它,因为 cron 正在启动它
编辑
@SuperJer 最初在与 ./
有关的问题上是正确的,我已经更新了我的代码,现在它正在作为 cron 作业工作。
<?php
date_default_timezone_set('America/Los_Angeles');
$ignore = array(
'.',
'..',
'.htaccess',
'cleanup.php'
);
$fullPath = dirname(__FILE__) . '/'; //-- Added this line and added it to my rrmdir function
function rrmdir($dir)
{
if (is_dir($dir))
{
$objects = scandir($dir);
foreach ($objects as $object)
{
if ($object != "." && $object != "..")
{
if (filetype($dir . "/" . $object) == "dir") rrmdir($dir . "/" . $object); else unlink($dir . "/" . $object);
}
}
reset($objects);
rmdir($dir);
}
}
$today = DateTime::createFromFormat('m-d-Y', date('m-d-Y', strtotime('today')));
$dirs = scandir($fullPath);
$msg = '';
foreach ($dirs as $dir)
{
if (!in_array($dir, $ignore))
{
$dirDate = DateTime::createFromFormat('m-d-Y', $dir);
$interval = $dirDate->diff($today);
if ($interval->format('%r%a') > 14) rrmdir($fullPath . $dir);
}
}
?>
我认为问题可能是 php 在 apache 下和命令行(或 cron)下 运行 解析文件路径的方式不同。
如果您的应用程序允许,请不要使用 ./
,而是使用完整路径,例如 /home/myUserName/public_html/file-transfer/uploads/
您还可以使用 dirname(__FILE__)
获取当前 运行 脚本的完整系统路径,这将使它更便携。
此外,这种差异也会影响 include
和 require
路径。