質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

2125閲覧

Laravel5.5 でopendirを使ってフォルダを開く方法

minyuu

総合スコア12

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2018/10/09 03:34

前提・実現したいこと

Laravel5.5で opendir() を使ってフォルダを開きたいです。

発生している問題・エラーメッセージ

ErrorException (E_ERROR) opendir(/home/vagrant/laravel_test/myblog/app/Http/Controllersresources/views/posts/images): failed to open dir: No such file or directory (View: /home/vagrant/laravel_test/myblog/resources/views/posts/index.blade.php)

該当のソースコード

PHP(Laravel) ※

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6 7ini_set('display_errors', 1); 8define('MAX_FILE_SIZE', 1 * 1024 * 1024); 9define('THUMBNAIL_WIDTH', 400); 10define('IMAGES_DIR', __DIR__.'resources/views/posts/images'); 11define('THUMBNAIL_DIR', __DIR__.'posts/thumbs'); 12 13class ImageUploadController extends Controller 14{ 15 private $imageFileName; 16 private $imageType; 17 18 public function index() { 19 return view('posts.index'); 20 } 21 22 public function upload() { 23 try { 24 // エラーチェック 25 $this->validateUpload(); 26 27 // 画像ファイルの種類をチェック 28 $ext = $this->validateImageType(); 29 30 // セーブ 31 $savePath = $this->save($ext); 32 33 // サムネイルを作る 34 $this->createThumbnail($savePath); 35 36 $_SESSION['success'] = 'アップロードしました'; 37 } catch (\Exception $e) { 38 $_SESSION['error'] = $e->getMessage(); 39 } 40 41 header('Location: http://' . $SERVER['HTTP_HOST']); 42 43 } 44 45 public function getResults() { 46 $success = null; 47 $error = null; 48 49 if (isset($_SESSION['success'])) { 50 $success = $_SESSION['success']; 51 unset($_SESSION['success']); 52 } 53 54 if (isset($_SESSION['error'])) { 55 $error = $_SESSION['error']; 56 unset($_SESSION['error']); 57 } 58 return [$success, $error]; 59 } 60 61 public function getImages() { 62 $images = []; 63 $files = []; 64 $imageDir = opendir(IMAGES_DIR); 65 while (false !== ($file = readdir($imageDir))) { 66 if ($file === '.' || $file === '..') { 67 continue; 68 } 69 $files[] = $file; 70 if (file_exists(THUMBNAIL_DIR.'/'.$file)) { 71 $images[] = basename(THUMBNAIL_DIR).'/'.$file; 72 } else { 73 $images[] = basename(IMAGES_DIR).'/'.$file; 74 } 75 } 76 array_multisort($files, SORT_DESC, $images); 77 return $images; 78 } 79 80 private function createThumbnail ($savePath) { 81 $imageSize = getimagesize($savePath); 82 $width = $imageSize[0]; 83 $height = $imageSize[1]; 84 if ($width > THUMBNAIL_WIDTH) { 85 $this->createThumbnailMain($savePath, $width, $height); 86 } 87 } 88 89 private function createThumbnailMain ($savePath, $width, $height) { 90 switch ($this->imageType) { 91 case IMAGETYPE_GIF: 92 $srcImage = imagecreatefromgif($savePath); 93 break; 94 case IMAGETYPE_JPEG: 95 $srcImage = imagecreatefromjpeg($savePath); 96 break; 97 case IMAGETYPE_PNG: 98 $srcImage = imagecreatefrompng($savePath); 99 break; 100 } 101 $thumbHeight = round($height * THUMBNAIL_WIDTH / $width); 102 $thumbImage = imagecreatetruecolor(THUMBNAIL_WIDTH, $thumbHeight); 103 imagecopyresampled($thumbImage, $srcImage, 0, 0, 0, 0, THUMBNAIL_WIDTH, 104 $thumbHeight, $width, $height); 105 switch ($this->imageType) { 106 107 case IMAGETYPE_GIF: 108 imagegif($thumbImage, THUMBNAIL_DIR . '/' . $this->imageFileName); 109 break; 110 111 case IMAGETYPE_JPEG: 112 imagejpeg($thumbImage, THUMBNAIL_DIR . '/' . $this->imageFileName); 113 break; 114 115 case IMAGETYPE_PNG: 116 imagepng($thumbImage, THUMBNAIL_DIR . '/' . $this->imageFileName); 117 break; 118 } 119 } 120 121 private function save($ext) { 122 $this->imageFileName = sprintf( 123 '%s_$s.$s', 124 time(), 125 sha1(uniqid(mt_rand(), true)), 126 $ext 127 ); 128 $savePath = IMAGES_DIR . '/' . $this->imageFileName; 129 $res = move_uploaded_file($_FILES['image']['tmp_name'], $savePath); 130 if ($res === false) { 131 throw new \Exception('アップロードできません'); 132 } 133 return $savePath; 134 } 135 private function validateImageType() { 136 $this->imageType = exif_imagetype($_FILES['image']['tmp_name']); 137 switch ($this->imageType) { 138 case IMAGETYPE_GIF: 139 return 'gif'; 140 case IMAGETYPE_JPEG: 141 return 'jpg'; 142 case IMAGETYPE_PNG: 143 return 'png'; 144 default: 145 throw new \Exception('png, jpeg, gif ファイルを掲載できます'); 146 } 147 } 148 149 private function validateUpload() { 150 if (!isset($_FILES['image']) || !isset($_FILES['image']['error'])) { 151 throw new \Exception('アップロードエラー'); 152 } 153 switch($_FILES['image']['error']) { 154 case UPLOAD_ERR_OK: 155 return true; 156 case UPLOAD_ERR_INI_SIZE: 157 case UPLOAD_ERR_FORM_SIZE: 158 throw new \Exception('ファイルが大きすぎます!'); 159 default: 160 throw new \Exception('Err: ' . $_FILES['image']['error']); 161 } 162 } 163} 164

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/10/09 03:39

フォルダを開いて何をしたいかまでが要件かと。コードとエラーだけ置かれても丸投げに思います。「試したこと」何もないのでしょうか?
guest

回答1

0

ベストアンサー

IMAGES_DIRがNo such file or directoryと言われているので、以下のどちらかの対応をすればいいと思います。

1、IMAGES_DIRで定義してるディレクトリを自分で作成する。
2、file_existsで存在チェックして、なかったらディレクトリを作成するコードを書く。

投稿2018/10/09 03:42

tomoyuki123

総合スコア273

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

minyuu

2018/10/09 03:45

回答ありがとうございます。 とても参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問