我有这个php代码,应该采取所有的php文件在一个目录中,比x天更新,并有其中一个随机选择的包含。省略这部分代码可以完美地工作:
,,filectime($路径。$file)> time()-60*60*24*4
当我在代码中有那部分,它给了我这2个错误,但只有当没有文件满足要求。如果至少有一个文件满足要求,则正常运行:
Warning: include() [function.include]: Filename cannot be empty in FILEPATH/THISFILE.php on line 15
Warning: include() [function.include]: Failed opening '' for inclusion (include_path='.:/usr/local/lib/php-5.2.17/lib/php') in FILEPATH/THISFILE.php on line 15
我不确定为什么那个"条件"会产生这个问题。如果没有文件满足条件,没有"time If",它仍然正常工作。
有谁知道是怎么回事吗?谢谢,Luc
下面是代码,第15行标记为:
<?php
$files = array();
$path = "nasa-news/";
if( $handle = opendir( $path ) )
{ while (false !== ($file = readdir($handle)))
{ if( $file != "." && $file != ".." && !is_dir( $path.$file ) && strpos($file, '.php',1) && filectime( $path.$file ) > time()-60*60*24*4 ) // Only if it is a .php file that is less than 4 days old.
{ $files[] = $path.$file;
}
}
// You need to populate the $files variable before you count it;)
$file = $files[ rand( 0, count( $files )-1 ) ];
// Now we can include it!
include ("$file");
}
else
{
print "<br />No New News Found!"; // If no files meet the conditions this should print.
LINE 15 }
?>
问题出在这一行:
$file = $files[ rand( 0, count( $files )-1 ) ];
当数组没有元素时,这将导致未定义索引。因此,$file
为空…
所以你需要先检查数组是否为空。顺便说一句,你可以试着对数组进行洗牌,取第一个元素。简单得多:
if (count($files))
{
shuffle($files);
$file = $files[0]; // your random element, have some fun with it!
}
else
{
// Handle edge case
}