Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用readdir时_Php_Mysqli_While Loop - Fatal编程技术网

Php 使用readdir时

Php 使用readdir时,php,mysqli,while-loop,Php,Mysqli,While Loop,我有一个项目清单,我必须显示每个项目3 img。我的代码: $path = "works/"; $dont_show = Array("", "php", ".", ".."); $dir_handle = @opendir($path) or die("Error"); while($row = mysqli_fetch_array($results)){ echo '<li> <span>'.utf8_encode($row["client"

我有一个项目清单,我必须显示每个项目3 img。我的代码:

$path = "works/";
$dont_show = Array("", "php", ".", "..");
$dir_handle = @opendir($path) or die("Error");

while($row = mysqli_fetch_array($results)){
    echo '<li>
        <span>'.utf8_encode($row["client"]).'</span>
        <ol>';
            while ($file = readdir($dir_handle)){
                $pos = strrpos($file,".");
                $extension = substr($file, $pos);

                if (!in_array($extension, $dont_show)) {
                    echo '<li><img src="'.$path . $file.'" /></li>';
                }
            }

            closedir($dir_handle);
        echo '</ol>
    </li>';
}
因此,我试图垂直显示我的项目,水平显示每个项目的图像。但是我找不到解决办法,第二个虽然不起作用。。。谢谢,我为我的英语道歉

  /* This is the correct way to loop over the directory. */
    while (false !== ($file = readdir($dir_handle))) {

    }

    /* This is the WRONG way to loop over the directory. */
    while ($file = readdir($dir_handle)) {

    }
为什么?? 我们正在显式测试返回值是否与FALSE相同,因为否则,任何名称计算为FALSE的目录条目都将停止循环,例如名为0的目录

请参见

您最好这样做:

<?php
    $path = "works/";
    $dont_show = array("", "php", ".", "..");
    $dir_handle = @opendir($path) or die("Error");

    // Store the file list from folder (but only the accepted ones)
    $file_list = array();
    while (($file = readdir($dir_handle)) !== false) {
        $ext = pathinfo($file, PATHINFO_EXTENSION);
        if (!in_array($ext, $dont_show)) array_push($file_list, $file);
    }
    closedir($dir_handle);

    // Now do your while loops
    while($row = mysqli_fetch_array($results)){
        echo "<li><span>" . utf8_encode($row['client']) . "</span><ol>";

        foreach ($file_list AS $file) { // Loop stored values
            echo "<li><img src=\"{$path}{$file}\" alt=\"\" /></li>";
        }

        echo "</ol>";
    }
?>

请注意,使用echo text{$variable}text与使用echo text相同$变量文本。

由于某种未知原因,您一直试图显示单个目录中的文件,而您显然需要不同的目录


因此,您必须在循环中移动opendir,并每次为相应的project images目录动态创建$path。

这只是一个样式问题吗?如果不是,你的PHP问题是什么?如果您只是想让图像水平显示而不是垂直显示,那么您需要将的设置为display:inline,例如,您可以给自己一个ID,然后使用CSS myList li{display:inline;}CSS就可以了!第二个不工作时。。。感谢您在内部循环的第一次迭代之后关闭目录句柄。尝试移动closedir$dir\u句柄;外部循环结束后。谢谢,但不起作用:/噢,readdir在到达给定目录中的最后一个文件后不会返回到第一个文件。因此,您需要在内部循环中使用opendir,或者使用scandir提前将目录内容存储在数组中,而不是存储在任何循环中,然后再进行循环。说得好,但它仍然不能回答他/她的问题。santyas在第二个while循环中遇到问题。如果他能列出目录的内容就好了。无论如何,问题不在于readdir函数,而是将返回值计算为false。此处给定文件存在于目录中的原因可能是文件名计算为false的第一个原因之一。这就是为什么最好使用“价值和实物”比较进行检查。我发现了两个选项,您的解决方案和while进入全局while和pass$\u使用select*from获取表的所有id。。完成了!谢谢