php foreach跳过图像的空路径

时间:2018-03-27 16:43:46

标签: php

我正在尝试使用php回显图像,我的图像存储在数组中,所以我不能跳过空值,我的PHP代码是

 $images = 'imgs/001.jpg,imgs/001.gif,imgs/002.png,imgs/003.jpg,imgs/004.jpg,
imgs/005.jpg,imgs/006.png,imgs/007.png,';
    $expl = explode (',', $images);

    foreach ($expl as $path){

        if (!empty($path) || getimagesize($path)!== false){
            $type = pathinfo($path, PATHINFO_EXTENSION);
            $data = file_get_contents($path);
            $base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);

            echo '<img src="'.$base64.'" width="300" height="300">' . '<br>';

            var_dump (getimagesize($path));
        }

    }

因为我的$ images中的最后一个逗号我收到错误

Warning: getimagesize(): Filename cannot be empty in I:\zzerver\Uwamp -port 84\uw-cms-p8585\www\test\php\images\dataimage-explode1-1.php on line 9

我试过了:if (!empty($path) || getimagesize($path)!== false)

但似乎不起作用,我得到了同样的错误

4 个答案:

答案 0 :(得分:3)

问题在这里

if (!empty($path) || getimagesize($path)!== false) {

$path为空时,php会检查第二个条件getimagesize($path),这会给你一个警告,因为你检查getimagesize('')

所以,正确的规则是:

if (!empty($path) && getimagesize($path) !== false) {

答案 1 :(得分:1)

我可以建议这样做

$expl = preg_split('@,@', $images, null, PREG_SPLIT_NO_EMPTY);

这将自动删除所有空条目

答案 2 :(得分:1)

@u_mulder是对的,但你也应该使用,删除不必要的$expl = explode (',', trim($images,',')); 逗号

            <div class="container-fluid">
            <nav class="navbar navbar-default navbar-fixed-top">
            <div class="navbar-header">
              <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
              </button>
              <a class="navbar-brand" href="#">Patryk Jamróz</a>
            </div>
            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
              <ul class="nav navbar-nav navbar-right">
                <li class="active"><a href="#about">About <span class="sr-only">(current)</span></a></li>
                <li><a href="#projects">Projects</a></li>
                <li><a href="#contact">Contact </a></li>
              </ul>    
          </nav><!-- navbar -->    
            <div data-spy="scroll" data-target="#nav" data-offset="0">        
            <h3 class="text-center" id="about">about</h3>
    <h3 class="text-center" id="projects">projects</h3>
    <h3 class="text-center" id="contact">contact</h3>
</div>

了解trim()one example

答案 3 :(得分:0)

除了修复逻辑错误,您还可以简化条件

if ($path && getimagesize($path) !== false) { ...

empty过分,因为它包含isset检查,考虑$path始终由foreach循环设置,这是不必要的。如果$path为空字符串,则会将其评估为false。