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

私が何をしているのかわかりません。私がする必要があるのは、ファイルをクラス function に渡すことだけです$mug->images->upload。リクエストから機能し$_POSTますが、既にアップロードされているファイルをフォルダーに移動する必要があります。

4

3 に答える 3

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);
}
  • 変数の衝突。

    vairable を使用し$handleてディレクトリ ハンドルを格納しましたが、後でループ内のファイル リソースで上書きするだけです。ループ内で上書きするとすぐreaddir($handle)に、ファイルリソースで関数を呼び出しているため、次の呼び出しは意味がありません。これは非常に簡単に無限ループにつながるreaddir()可能性がありNULLます。

  • の間違ったパスfopen()

    とを指定する$folderimage = "images"$entry = "photo.jpg"、行はではなく でfopen()画像を開こうとします。のようなものを使いたいと思うかもしれませんが、まったく使用すべきではないので読み進めてください。photo.jpg../uploads/images/photo.jpg$dir . $entryfopen()

  • 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 に答える
0

$mug オブジェクトのファイル アップロード POST リクエストをエミュレートするのは少し難しいです。次のように $mug のコードをリファクタリングできれば、より良い結果が得られます。

  1. $mug は、アップロードされたファイルを取得し、目的の場所に配置します。
  2. ここと $mug で使用したい処理を実装する新しい関数を作成します。
  3. ここから、適切なファイル名で $mug からこの関数を呼び出します。
于 2012-11-17T21:29:46.833 に答える