从服务器上的目录中获取图像文件以进行进一步处

时间:2012-11-17 21:23:29

标签: php image file-upload upload readdir

我在服务器上有包含图像文件的文件夹。我正在尝试获取这些文件,然后进一步上传,但我认为我使用的是错误的功能。

我的代码:

$dir = "../uploads/".$folderimage."/";
if ($handle = opendir($dir)) {
  while (false !== ($entry = readdir($handle))) {
    if ($entry != "." && $entry != "..") {
      echo "$entry\n";
      $handle =  fopen($entry,"wb");
      $mug->images_upload(array( "AlbumID" => "#####", "File" =>   $handle));
    }
  }
  closedir($handle);
}

不确定我在做什么,我需要做的就是将文件传递给类函数$mug->images->upload。它适用于$_POST请求,但我需要将已上传的文件移动到该文件夹​​。

3 个答案:

答案 0 :(得分:0)

模拟$ mug对象的文件上传POST请求有点棘手。如果您可以在$ mug中重构代码,那将会更好:

  1. $ mug获取上传的文件并将其放到目的地。
  2. 您创建了一个新函数,用于实现您希望在此处和$ mug中使用的处理。
  3. 从此处调用此函数,并使用相应的文件名从$ mug调用此函数。

答案 1 :(得分:0)

如果$mug->images_upload期待文件路径,则将$dir.$entry传递给它

<?php 
$dir = "../uploads/".$folderimage."/";

if ($handle = opendir($dir)) {
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
            echo $entry.PHP_EOL;
            $mug->images_upload(array( "AlbumID"=>"#####", "File"=>$dir.$entry));
        }
    }
    closedir($handle);
}


//Or simpler way but slightly slower
foreach (glob($dir."*.{png,jpg,gif}", GLOB_BRACE) as $file) {
    echo $file.PHP_EOL;
    $mug->images_upload(array( "AlbumID"=>"#####", "File" =>$dir.$file));
}
?>

答案 2 :(得分:0)

您发布的代码存在许多明显的问题。

$dir = "../uploads/".$folderimage."/";
if ($handle = opendir($dir)) {
  while (false !== ($entry = readdir($handle))) {
    if ($entry != "." && $entry != "..") {
      echo "$entry\n";
      $handle =  fopen($entry,"wb");
      $mug->images_upload(array( "AlbumID" => "#####", "File" =>   $handle));
    }
  }
  closedir($handle);
}
  • 冲突变量。

    您已使用$handle vairable存储目录句柄,以后稍后使用循环内的文件资源覆盖它。一旦你在循环中覆盖它,下一次调用readdir($handle)没有任何意义,你是在文件资源上调用该函数。这可能很容易导致无限循环,因为当给readdir()垃圾时,它可能会返回NULL

  • fopen()

    的路径不正确

    鉴于$folderimage = "images"$entry = "photo.jpg"fopen()行会尝试在photo.jpg而不是../uploads/images/photo.jpg打开图片。您可能希望使用$dir . $entry之类的内容,但请继续阅读,因为您根本不应该使用fopen()

  • phpSmug库的使用不正确

    File参数必须是字符串,其中包含“正在上传的本地文件的路径”(source)。您尝试将文件资源fopen()传递给它。

  • 目录迭代的
  • opendir()/readdir()是古老的

    有更好的方法来遍历PHP中的目录内容。如Lawrence's answer中所述,glob()可能很有用。

    我还提倡使用filesystem iterator中的SPL

    $dir = "../uploads/$folderimage/";
    foreach (new FilesystemIterator($dir) as $fileinfo) {
        $image_pathname = $fileinfo->getPathname();
        $mug->images_upload("AlbumID=#####", "File=$image_pathname");
    }