PHP "random include"代码无法按预期工作



我有这个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
}

最新更新