2011-08-06 5 views
0

이 PHP 코드는 x 일 이후의 모든 PHP 파일을 무작위로 선택하여 포함시켜야합니다. 왼쪽으로 코드는이 부분과 함께 완벽하게 작동합니다 :
& & filectime ($ 경로 $ 파일.)> 시간() - 나는 코드에서 그 부분을 수행 할 때 60 * 60 * 24 * 4PHP "random include"코드가 예상대로 작동하지 않습니다.

그것은 나를 준다 이 두 가지 오류는 파일 중 NONE이 요구 사항을 충족시키는 경우에만 발생합니다. 적어도 하나 개의 파일이 한 요구 사항을 충족하는 경우는 normaly 기능 :

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"가없는 파일이 없으면 정상적으로 작동합니다.
무슨 일이 일어나는지 아는 사람 있습니까? 배열에 요소가없는 경우

$file = $files[ rand(0, count($files)-1) ]; 

, 이것은 정의되지 않은 인덱스가 발생합니다 :

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

답변

2

문제는이 라인 : 여기에 표시된 라인 (15)과 코드가 루크
, 감사합니다. 따라서 $file이 비어 있습니다 ...

그래서 배열이 먼저 비어 있는지 확인해야합니다. Btw, 배열을 셔플하고 첫 번째 요소를 가져 가려고 할 수 있습니다. 훨씬 간단 :

if (count($files)) 
{ 
    shuffle($files); 
    $file = $files[0]; // your random element, have some fun with it! 
} 
else 
{ 
    // Handle edge case 
} 
+0

고정 함수 이름. – Franz

+0

그리고 지금이 사실을 진짜 해답으로 만들었습니다. – Franz

+0

감사합니다, 당신의 도움이 도와 줬어! 무작위 대신 셔플을 사용하는 것이 좋습니다. 스택 오버 플로우를 사용한 것은 이번이 처음이었고 ... 좋은 경험이있었습니다. – MindMaster

관련 문제