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

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

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

Q&A

1回答

1321閲覧

mysqlとPHPで画像アップロード機能を作ってるのですがエラーが出ます。

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

0グッド

0クリップ

投稿2019/09/04 13:50

[PHP]ファイルアップロードサンプル(PHP → DB → HTML)を参考に画像をアップロードする機能を作ったのですがコピペして記事通りに書いてもエラーが出ます。
原因と対処法をご教授していただければ幸いです。

###common.php

PHP

1<?php 2 3/** 4 * common.php 5 */ 6 7/** 8 * connect_db 9 * @return \PDO 10 */ 11function connect_db() 12{ 13 $dataSourceName = 'mysql:host=localhost;dbname=shop;charset=utf8'; 14 $user = 'staff'; 15 $dbPassword = 'password'; 16 $options = [ 17 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 18 , PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC 19 ]; 20 return new PDO($dsn, $username, $password, $options); 21} 22 23/** 24 * insert 25 * @param string $sql 26 * @param array $arr 27 * @return int lastInsertId 28 */ 29function insert($sql, $arr = []) 30{ 31 $pdo = connect_db(); 32 $stmt = $pdo->prepare($sql); 33 $stmt->execute($arr); 34 return $pdo->lastInsertId(); 35} 36 37/** 38 * select 39 * @param string $sql 40 * @param array $arr 41 * @return array $rows 42 */ 43function select($sql, $arr = []) 44{ 45 $pdo = connect_db(); 46 $stmt = $pdo->prepare($sql); 47 $stmt->execute($arr); 48 return $stmt->fetchAll(); 49} 50 51/** 52 * htmlspecialchars 53 * @param string $string 54 * @return $string 55 */ 56function h($string) 57{ 58 return htmlspecialchars($string, ENT_QUOTES, 'utf-8'); 59}

###index.php

PHP

1<?php 2/** 3 * index.php 4 */ 5/** 6 * 共通関数読み込み 7 */ 8require 'common.php'; 9 10/** 11 * file_upload 12 */ 13function file_upload() 14{ 15 // POSTではないとき何もしない 16 if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') !== 'POST') { 17 return; 18 } 19 20 // タイトル 21 $title = filter_input(INPUT_POST, 'title'); 22 if ('' === $title) { 23 throw new Exception('タイトルは入力必須です。'); 24 } 25 26 // アップロードファイル 27 $upfile = $_FILES['upfile']; 28 29 /** 30 * @see http://php.net/manual/ja/features.file-upload.post-method.php 31 */ 32 if ($upfile['error'] > 0) { 33 throw new Exception('ファイルアップロードに失敗しました。'); 34 } 35 36 $tmp_name = $upfile['tmp_name']; 37 38 // ファイルタイプチェック 39 $finfo = finfo_open(FILEINFO_MIME_TYPE); 40 $mimetype = finfo_file($finfo, $tmp_name); 41 42 // 許可するMIMETYPE 43 $allowed_types = [ 44 'jpg' => 'image/jpeg' 45 , 'png' => 'image/png' 46 , 'gif' => 'image/gif' 47 ]; 48 if (!in_array($mimetype, $allowed_types)) { 49 throw new Exception('許可されていないファイルタイプです。'); 50 } 51 52 // ファイル名(ハッシュ値でファイル名を決定するため、同一ファイルは同盟で上書きされる) 53 $filename = sha1_file($tmp_name); 54 55 // 拡張子 56 $ext = array_search($mimetype, $allowed_types); 57 58 // 保存作ファイルパス 59 $destination = sprintf('%s/%s.%s' 60 , 'upfiles' 61 , $filename 62 , $ext 63 ); 64 65 // アップロードディレクトリに移動 66 if (!move_uploaded_file($tmp_name, $destination)) { 67 throw new Exception('ファイルの保存に失敗しました。'); 68 } 69 70 // Exif 情報の削除 71 $imagick = new Imagick($destination); 72 $imagick->stripimage(); 73 $imagick->writeimage($destination); 74 75 // データベースに登録 76 $sql = 'INSERT INTO `images` (`id`, `title`, `path`) VALUES (NULL, :title, :path) '; 77 $arr = []; 78 $arr[':title'] = $title; 79 $arr[':path'] = $destination; 80 $lastInsertId = insert($sql, $arr); 81 82 // 成功時にページを移動する 83 header(sprintf('Location: image.php?id=%d', $lastInsertId)); 84} 85 86try { 87 // ファイルアップロード 88 file_upload(); 89} catch (Exception $e) { 90 $error = $e->getMessage(); 91} 92?> 93<!DOCTYPE HTML> 94<html lang="ja"> 95 <head> 96 <meta charset="UTF-8"> 97 <title></title> 98 <style type="text/css"> 99 .error { 100 color: red; 101 } 102 </style> 103 </head> 104 <body> 105 <div id="wrap"> 106 <?php if (isset($error)) : ?> 107 <p class="error"><?= h($error); ?></p> 108 <?php endif; ?> 109 <form action="" method="post" enctype="multipart/form-data"> 110 <p> 111 <label for="title">タイトル</label> 112 <input type="text" name="title" id="title" /> 113 </p> 114 <p> 115 <label for="upfile">画像ファイル</label> 116 <input type="file" name="upfile" id="upfile" /> 117 </p> 118 <p> 119 <button type="submit">送信</button> 120 </p> 121 </form> 122 </div> 123 </body> 124</html>

###image.php

PHP

1<?php 2/** 3 * image.php 4 */ 5require 'common.php'; 6 7try { 8 $id = filter_input(INPUT_GET, 'id'); 9 10 // データベースからレコードを取得 11 $sql = 'SELECT `id`, `title`, `path` FROM `images` WHERE `id` = :id'; 12 $arr = []; 13 $arr[':id'] = $id; 14 $rows = select($sql, $arr); 15 $row = reset($rows); 16} catch (Exception $e) { 17 $error = $e->getMessage(); 18} 19?> 20<!DOCTYPE HTML> 21<html lang="ja"> 22 <head> 23 <meta charset="UTF-8"> 24 <title></title> 25 <style type="text/css"> 26 .error { 27 color: red; 28 } 29 </style> 30 </head> 31 <body> 32 <div id="wrap"> 33 <?php if (isset($error)) : ?> 34 <p class="error"><?= h($error); ?></p> 35 <?php endif; ?> 36 37 <p><?= h($row['title']); ?></p> 38 <p> 39 <img src="<?= h($row['path']); ?>" alt="<?= h($row['title']); ?>" /> 40 </p> 41 </div> 42 </body> 43</html>

###エラー

Fatal error: Uncaught Error: Class 'Imagick' not found in C:\xampp\htdocs\php\img\image\index.php:71 Stack trace: #0 C:\xampp\htdocs\php\img\image\index.php(88): file_upload() #1 {main} thrown in C:\xampp\htdocs\php\img\image\index.php on line 71

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

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

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

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

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

guest

回答1

0

Class 'Imagick' not found

メッセージそのままです。
このメッセージで検索すると嫌ほど情報がヒットします。

PHPの公式マニュアルでは以下のページが該当します。
(www.php.net)画像処理 (ImageMagick)

これらの情報を参照してImagickをインストールしてください。

投稿2019/09/04 14:23

Y.H.

総合スコア7914

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問