2014-01-30 16 views
0

我只是不能得到这个工作什么是错的?PHP循环低谷文件夹和HTML错误中的回声图像

$files = scandir('gallery/'); 
if ($files !== false) 
{ 
    foreach($files as $f) { 
     if ($f == '..' || $f == '.') 
      continue;  
     echo '<li><img src="gallery/'.$f.'" alt="'.$f.'" title=""></li>'."\n"; 
    } 
} 

的文件夹在我命名为“画廊”根文件夹。这些图像都在里面..

我总是得到这个错误:

Warning: Invalid argument supplied for foreach() in "MYDOCUMENT.PHP" on line 101.

+0

var_dump($ files);''的输出是什么? –

+0

'var_dump($ files);'? – czachor

+0

你能更具体吗?我有什么做?我刚接触php ... –

回答

2
<?php 
$files = scandir('gallery/'); 
if ($files !== false) 
{ 
    foreach(is_array($files) as $f) { 
    if ($f == '..' || $f == '.') 
?> 
    <li><img src="<?php echo 'gallery/'.$f ?>" alt="<?php echo $f ?>" title=""> 
<?php 
    } 
} 
?> 
+1

它是如何工作的?如果$ files是一个数组,则函数[is_array](http://php.net/is_array)将返回“true”,否则返回false。你如何迭代一个布尔值与[foreach](http://php.net/foreach)循环? –

1

变化的foreach到:

foreach((array)$files as $f) 

代码可能是:

$files = scandir('gallery/'); 
if ($files !== false) 
{ 
    foreach((array)$files as $f) { 
     if ($f == '..' || $f == '.') 
      continue;  
     echo '<li><img src="gallery/'.$f.'" alt="'.$f.'" title=""></li>'."\n"; 
    } 
} 
+0

没有改变任何东西 –

1

你不应该验证阵列:

if ($files !== false) 

但是这样做:

if (is_array($files) && count($files) > 0) { 

否则你会得到这样一个警告。

[编辑] 并考虑使用像一个男人说的glob。 这将使用该功能。

例子:

if (is_array($files) && count($files) > 0) { 
    foreach(glob('gallery/*.{jpeg,gif,png}', GLOB_BRACE)) { 
     // code here 
    } 
} 
2

这工作,对我来说...:

<?php 
    $files = scandir('gallery/'); 
    if ($files !== false) { 
     foreach($files as $f) { 
      if ($f == '..' || $f == '.') continue; 
      echo $f . "<br>\n"; 
     } 
    } 
?> 

这是很相同的代码,你......所以检查 “画廊/” 目录下的内容..

+0

ok回声图像的名称。我怎么能回应图像本身? –

+0

好的..你的代码打印的HTML正确引用图像标签...所以你应该检查图像是可读的网络服务器用户... – MarcoS

+0

嗯,他们应该是可读的,他们为什么不应该像我说的代码打印图像的名称,但不显示图像 –