PHP“随机包含”代码不能按预期工作

时间:2011-08-06 22:10:27

标签: php random include

我有这个PHP代码,应该把目录中的所有php文件都比x天更新,并随机选择其中一个包含。代码与此部分完美配合:左     &安培;&安培; filectime($ path。$ file)>时间() - 60 * 60 * 24 * 4

当我在代码中有这个部分时它会给我这两个错误但是如果没有文件符合要求的话。如果至少有一个文件满足要求,它就能正常运行:

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”它仍然正常运行。
有谁知道发生了什么?谢谢吕克 以下是标记为第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 }       
?>

1 个答案:

答案 0 :(得分:2)

问题在于这一行:

$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
}