2

您好,我正在使用以下代码将文件从一个目录复制到另一个目录,它的工作原理就像一个魅力这是我的代码:

<?php
function recurse_copy($src,$dst) {
    $dir = opendir($src);
    @mkdir($dst);
    while(false !== ( $file = readdir($dir)) ) {
        if (( $file != '.' ) && ( $file != '..' )) {
            if ( is_dir($src . '/' . $file) ) {
                recurse_copy($src . '/' . $file,$dst . '/' . $file);
            }
            else {
                copy($src . '/' . $file,$dst . '/' . $file);
            }
        }
    }
    closedir($dir);
}  if(isset($_POST["source"]) && isset($_POST["destination"])){

$src = $_POST["source"];

$dst = $_POST["destination" ];
recurse_copy($src,$dst);
}
?>

现在我只想从源文件夹中复制图像文件。我该怎么做?

4

2 回答 2

4

Getimagesize可以帮助您。出错时返回 false。文件不是图像是错误的。

<?php
function recurse_copy($src,$dst) {
    $dir = opendir($src);
    @mkdir($dst);
    while(false !== ( $file = readdir($dir)) ) {
        if (( $file != '.' ) && ( $file != '..' )) {
            if ( is_dir($src . '/' . $file) ) {
                recurse_copy($src . '/' . $file,$dst . '/' . $file);
            }
            else {
                /////
                if(!getimagesize($src . '/' . $file,$dst . '/' . $file)) continue;
                /////
                copy($src . '/' . $file,$dst . '/' . $file);
            }
        }
    }
    closedir($dir);
}  if(isset($_POST["source"]) && isset($_POST["destination"])){

$src = $_POST["source"];

$dst = $_POST["destination" ];
recurse_copy($src,$dst);
}
?>

或者

您只需检查文件扩展名:

$ext = end(explode('.',$file));

但它可以说谎。

于 2013-04-03T06:52:19.910 回答
3

我看到了两种方式:

  • 您制作一个可能的文件扩展名数组,并检查 $file每个文件的 var 结尾。
  • 或者您使用exif_imagetype()函数和 Imagetype 内容来从签名中确定文件类型。文档在这里。但是,对此存在依赖关系,有关详细信息,请参阅第一个用户提供的注释。
于 2013-04-03T06:56:19.170 回答