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);
}

不知道我在做什么,我需要做的就是将文件传递给类函数$mug->images->upload。它可以根据$_POST请求工作,但我需要将已上传的文件移动到文件夹中。

4

3 回答 3

0

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

  1. $mug 获取上传的文件并将其放到目标位置。
  2. 您创建一个新函数来实现您希望在此处和 $mug 中使用的处理。
  3. 从这里调用此函数,并使用适当的文件名从 $mug 调用。
于 2012-11-17T21:29:46.833 回答
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);
}
  • 冲突变量。

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

  • 路径不正确fopen()

    给定$folderimage = "images"and $entry = "photo.jpg",那么该fopen()行将尝试在photo.jpg而不是打开图像../uploads/images/photo.jpg。您可能想使用类似的东西$dir . $entry,但请继续阅读,因为您根本不应该使用fopen()

  • phpSmug 库的错误使用

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

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

    在 PHP 中有更好的方法来遍历目录内容。正如劳伦斯的回答中提到的,glob()可能有用。

    我还提倡使用SPL中的文件系统迭代器。

    $dir = "../uploads/$folderimage/";
    foreach (new FilesystemIterator($dir) as $fileinfo) {
        $image_pathname = $fileinfo->getPathname();
        $mug->images_upload("AlbumID=#####", "File=$image_pathname");
    }
    
于 2012-11-18T00:29:01.350 回答
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));
}
?>
于 2012-11-17T21:40:59.150 回答