2016-08-02 2 views
0

複数の画像をアップロードするための簡単なアップローダクラスを作成しようとしています。私は、uploadFilesメソッドからファイル情報を返し、別のメソッド(uploadGalleryImages)内で使用する必要があります。しかし、私がreturn $ resultを使用すると、最初のファイルがアップロードされた後にforeachループが停止します。返信せずにprint_r($ result)を使用すると、すべてのファイルをアップロードしてクロムのネットワークタブにあるオブジェクトを見ることができます。ここに私の簡略化したコードがあります:複数のファイルをアップロードし、オブジェクトとしてファイル情報を返します

public function uploadGalleryImages() { 
    $upload_image = $this->uploadFiles($_FILES['image']); 
} 

private function reArrayFiles($files) { 
    $array = array(); 
    $file_count = count($files['name']); 
    $file_keys = array_keys($files); 
    for ($i=0; $i<$file_count; $i++) { 
     foreach ($file_keys as $key) { 
      $array[$i][$key] = $files[$key][$i]; 
     } 
    } 
    return $array; 
} 


private function uploadFiles($files = array()) { 
    $upload_dir = IMAGE_UPLOAD_DIR; 
    $thumb_dir = $upload_dir . 'thumbnails/'; 

    $file_array = $this->reArrayFiles($files); 

    foreach ($file_array as $file) { 

     $base_name   = pathinfo($file['name'], PATHINFO_FILENAME); 
     $extension   = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); 

     $counter = 1; 
     while(file_exists($upload_dir . $file['name'])) { 
      $file['name'] = $base_name . $counter . '.' . $extension; 
      $counter++; 
     }; 

     if (move_uploaded_file($file['tmp_name'], $upload_dir . $file['name'])) { 
      $result = new \stdClass(); 
      $result->file_name = $file['name']; 
      $result->extension = $extension; 
      //print_r($result); 
      return $result; // Stops after first file uploaded 
     } else { 
      return false; 
     } 

    } 
} 
+2

オブジェクトを配列に保存しますか? –

答えて

3

すべての画像オブジェクトを配列に格納して返します。簡単な例:

$pics = []; 
foreach ($file_array as $file) { 

    if (move_uploaded_file($file['tmp_name'], $upload_dir . $file['name'])) { 
     $result = new \stdClass(); 
     $result->file_name = $file['name']; 
     $result->extension = $extension; 
     $pics[] = $result; 
    } 
} 

return $pics; 
関連する問題