1

我在这里遇到了一个奇怪的问题

我正在尝试将文件复制到文件夹

 if ($folder) {
        codes.....
    } else if (!copy($filename, $root.$file['dest']) && !copy($Image, $root.$imagePath)){
             throw new Exception('Unable to copy file');
    }

我的问题是$image文件永远不会被复制到目的地

但是,如果我这样做

if ($folder) {
        codes.....
    } else if (!copy($Image, $root.$imagePath)){
             throw new Exception('Unable to copy file');
    }

有用。

编辑:

我知道第一个文件名声明是正确的。

谁能帮我解决这个奇怪的问题?非常感谢!!!

4

3 回答 3

4

这都是优化的一部分。

因为只有在两个&&条件都为真时才评价为真,所以没有意义评价(即执行)

copy($Image, $root.$imagePath)

什么时候

!copy($filename, $root.$file['dest']) 

已经返回false。

因此:

如果第一次复制成功,则不会执行第二次复制,因为!copy(…)将被评估为 false。

建议:

// Perform the first copy
$copy1 = copy($filename, $root.$file['dest']);

// Perform the second copy (conditionally… or not)
$copy2 = false;        
if ($copy1) {
    $copy2 = copy($Image, $root.$imagePath);
}

// Throw an exception if BOTH copy operations failed
if ((!$copy1) && (!$copy2)){
    throw new Exception('Unable to copy file');
}

// OR throw an exception if one or the other failed (you choose)
if ((!$copy1) || (!$copy2)){
    throw new Exception('Unable to copy file');
}
于 2013-04-26T22:17:38.413 回答
2

你可能想说

else if (!copy($filename, $root.$file['dest']) || !copy($Image, $root.$imagePath))

(注意||代替&&

照原样,一旦复制成功,&&永远不会为真,因此 PHP 停止计算表达式。

换句话说,

$a = false;
$b = true;
if ($a && $b) {
  // $b doesn't matter
}
于 2013-04-26T22:20:22.140 回答
2

如果 !copy($filename, $root.$file['dest']) 评估为 false,则 php 没有理由尝试评估 !copy($Image, $root.$imagePath) 因为整个 xxx && yyy 表达式无论如何都会是假的。

于 2013-04-26T22:21:13.663 回答