我正在使用PHP和Cron作业定期动态更新样式表(由于各种原因,Javascript不是一个选项)。这是我作为Cron Job运行的脚本:
<?php
$colorstack = json_decode(file_get_contents("colors.txt"));
$color = array_shift($colorstack);
file_put_contents("color.txt",$color);
array_push($colorstack, $color);
$colors = json_encode($colorstack);
file_put_contents("colors.txt", $colors);
$iconstack = json_decode(file_get_contents("icons.txt"));
$icon = array_shift($iconstack);
file_put_contents("icon.txt",$icon);
array_push($iconstack, $icon);
$icons = json_encode($iconstack);
file_put_contents("icons.txt", $icons);
print_r ($colorstack);
print_r ($iconstack);
?>
它从两个文本文件(一组十六进制代码和一组图像文件名)返回字符串并将它们放入数组中。然后它从每个数组中获取第一个值,将它们写入第二组文本文件(由css.php读取),然后将这些值粘贴到数组的末尾并将它们写回到它们的文本文件中。 / p>
每次执行脚本时,它会为样式表吐出一个新的颜色十六进制代码和图像文件名,并将之前的颜色发送到循环的后面。我已经测试了它,它在浏览器中运行良好。
问题是Cron Job不会执行脚本。相反,我继续得到以下内容:
警告:array_shift()期望参数1为数组,在第3行的/path/to/file.php中给出null
警告:array_push()期望参数1为数组,在第5行的/path/to/file.php中给出null
等等。显然问题是Cron Job没有将$_____stack = json_decode(file_get_contents("_____.txt"));
解析为数组 - 我假设它会对explode()做同样的事情。或类似的代替JSON。
是否有另一种相对简洁的方法可以将这些文本文件的内容放入不会遇到同样问题的数组中?
答案 0 :(得分:1)
这似乎是一个路径问题。 cronjob作为系统进程运行,因此无法找到文件“colors.txt”和“icons.txt”。
但是当您在浏览器中执行脚本时,它会自动从当前文件夹中读取文件。
解决方案是为cronjob中的文件提供完整的系统路径。通常在cron脚本中执行任何文件读写时总是使用完整路径。
以下是示例代码:
$filePath = ''; // set it to full-path of the directory that contains the .txt files and terminate with a "/" (slash)
....
$colorstack = json_decode(file_get_contents($filePath . "colors.txt"));
....
$iconstack = json_decode(file_get_contents($filePath . "icons.txt"));
希望它有所帮助!