这是脚本:
<?php
//Create back files?
define('CREATE_BACKUPS', FALSE);
if (!is_dir($argv[1]))
{
echo "You must enter a valid path such as /home/apresv/public_html or apresv/public_html for this script to function.\n";
exit;
}
//Search the path for all php files, opening each one, and checking to see if it's infected
//First, get an array list of all valid .php files.
$files = listdir($argv[1]);
foreach ($files as $filename)
{
//We only need to check php files, so we add that here
if (file_extension($filename) == 'php')
{
//This is a php file so lets check it to see if it's infected.
$contents = file_get_contents($filename);
$backup = $contents;
//There will always be 2 opening tags in an infected file and since the hack is always at the top, it's easiest to test for this right away.
$test = between('<?php', '<?php', $contents);
//This particular hack likes to use toolbarqueries so we test to see if our chunk is an infected chunk. If your website uses this url somehow, then add extra if statements as necessary.
if (after('toolbarqueries', $test))
{
//This chunk is infected. So lets replace it and resave the file.
$contents = str_replace('<?php'.$test.'<?php', '<?php', $contents);
//Now save it! Woohoo!
file_put_contents($filename, $contents);
if (CREATE_BACKUPS)
{
file_put_contents($filename.'.orig', $backup);
}
echo "$filename has been cleaned.\n";
}
}
}
function after ($this, $inthat)
{
if (!is_bool(strpos($inthat, $this)))
return substr($inthat, strpos($inthat,$this)+strlen($this));
};
function after_last ($this, $inthat)
{
if (!is_bool(strrevpos($inthat, $this)))
return substr($inthat, strrevpos($inthat, $this)+strlen($this));
};
function before ($this, $inthat)
{
return substr($inthat, 0, strpos($inthat, $this));
};
function before_last ($this, $inthat)
{
return substr($inthat, 0, strrevpos($inthat, $this));
};
function between ($this, $that, $inthat)
{
return before($that, after($this, $inthat));
};
function between_last ($this, $that, $inthat)
{
return after_last($this, before_last($that, $inthat));
};
// USES
function strrevpos($instr, $needle)
{
$rev_pos = strpos (strrev($instr), strrev($needle));
if ($rev_pos===false) return false;
else return strlen($instr) - $rev_pos - strlen($needle);
};
function listdir($dir='.') {
if (!is_dir($dir)) {
return false;
}
$files = array();
listdiraux($dir, $files);
return $files;
}
function listdiraux($dir, &$files) {
$handle = opendir($dir);
while (($file = readdir($handle)) !== false) {
if ($file == '.' || $file == '..') {
continue;
}
$filepath = $dir == '.' ? $file : $dir . '/' . $file;
if (is_link($filepath))
continue;
if (is_file($filepath))
$files[] = $filepath;
else if (is_dir($filepath))
listdiraux($filepath, $files);
}
closedir($handle);
}
function file_extension($filename)
{
$info = pathinfo($filename);
return $info['extension'];
}
?>
当我尝试通过 cron 运行此脚本时,我得到输出“您必须输入有效路径,例如 /home/apresv/public_html 或 apresv/public_html 才能使该脚本运行。
我需要做什么才能让它通过 CRON 作业运行?
谢谢!
答案1
使用 CRON 执行脚本的基础是使文件可执行,谈论一个php
文件时,您必须为该文件提供解释器命令的路径,这称为shebang
(了解更多信息这里)并且必须放置在脚本的最顶部。
所以你必须执行以下操作
$ chmod +x script.php
$ sed -i '1 i\#!/usr/bin/php' script.php #This is to insert the shebang
这样就可以配置CRON了
$ crontab -e
* * * * * /path/to/script.php
笔记:当然,您必须确保您的脚本有效。