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

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

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

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

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

解決済

1回答

2240閲覧

リダイレクトが上手くいかない

nazo_o

総合スコア99

PHP

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

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

1クリップ

投稿2016/05/23 12:52

ドットインストールというサービスの「PHPで画像アップロード掲示板を作ろう」という動画レクチャーを受講しています。

これに出てくるリダイレクトのコードで、

php

1 header('Location: http://' . $_SERVER['HTTP_HOST']); 2 exit; 3 }

というのが出てきます。

しかし、いざ画像をアップロードするために画像を選択し、uploadボタンをクリックすると、リダイレクトが上手くいかず、代りに、

http://localhost/dashboard/

というページに飛んでしまいます。

これはおそらく、ドットインストールではvagrantを利用してローカル開発環境を構築しているのに対して、私はXAMPPを利用しているからだと思います。

どうすればドットインストールの動画どうりに実行されるのかと考えて、いろいろ試した挙句、

php

1echo $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];

としてみると、ブラウザ側の挙動は同じになりましたが、今度は、(元画像から作成される)サムネイル画像が、サムネイルが入るはずのフォルダに入っていませんでした。

いろいろ調べたのですが、これ以上何をどうすればいいのか検討もつきませんので、ここで質問させていただきます。初歩的な質問なのかもしれませんが、わかる方はお教えください。お願いします。

以下、コードを貼ります。(作成途中のコードですので、画像がアップロードまではされずに、imagesフォルダとthumbsフォルダに画像が入るところまでいくはずの段階です)

index.php

php

1<?php 2ini_set('display_errors', 1); 3define('MAX_FILE_SIZE', 1 * 1024 * 1024); // 1MB 4define('THUMBNAIL_WIDTH', 400); 5define('IMAGES_DIR', __DIR__ . '/images'); 6define('THUMBNAIL_DIR', __DIR__ . '/thumbs'); 7 8if (!function_exists('imagecreatetruecolor')) { 9 echo 'GD not installed'; 10 exit; 11} 12 13function h($s) { 14 return htmlspecialchars($s, ENT_QUOTES, 'UTF-8'); 15} 16 17require 'ImageUploader.php'; 18 19$uploader = new \MyApp\ImageUploader(); 20 21if ($_SERVER['REQUEST_METHOD'] === 'POST') { 22 $uploader->upload(); 23} 24 25?> 26<!DOCTYPE html> 27<html lang="ja"> 28<head> 29 <meta charset="utf-8"> 30 <title>Image Uploader</title> 31 <style> 32 body { 33 text-align: center; 34 font-family: Arial, sans-serif; 35 } 36 </style> 37</head> 38<body> 39 40 <form action="" method="post" enctype="multipart/form-data"> 41 <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo h(MAX_FILE_SIZE); ?>"> 42 <input type="file" name="image"> 43 <input type="submit" value="upload"> 44 </form> 45 46</body> 47</html> 48

ImageUploader.php

php

1<?php 2 3namespace MyApp; 4 5class ImageUploader { 6 7 private $_imageFileName; 8 private $_imageType; 9 10 public function upload() { 11 try { 12 // error check 13 $this->_validateUpload(); 14 15 // type check 16 $ext = $this->_validateImageType(); 17 // var_dump($ext); 18 // exit; 19 20 // save 21 $savePath = $this->_save($ext); 22 23 // create thumbnail 24 $this->_createThumbnail($savePath); 25 26 } catch (\Exception $e) { 27 echo $e->getMessage(); 28 exit; 29 } 30 // redirect 31 header('Location: http://' . $_SERVER["HTTP_HOST"]); 32 exit; 33 } 34 35 private function _createThumbnail($savePath) { 36 $imageSize = getimagesize($savePath); 37 $width = $imageSize[0]; 38 $height = $imageSize[1]; 39 if ($width > THUMBNAIL_WIDTH) { 40 $this->_createThumbnailMain($savePath, $width, $height); 41 } 42 } 43 44 private function _createThumbnailMain($savePath, $width, $height) { 45 switch($this->_imageType) { 46 case IMAGETYPE_GIF: 47 $srcImage = imagecreatefromgif($savePath); 48 break; 49 case IMAGETYPE_JPEG: 50 $srcImage = imagecreatefromjpeg($savePath); 51 break; 52 case IMAGETYPE_PNG: 53 $srcImage = imagecreatefrompng($savePath); 54 break; 55 } 56 $thumbHeight = round($height * THUMBNAIL_WIDTH / $width); 57 $thumbImage = imagecreatetruecolor(THUMBNAIL_WIDTH, $thumbHeight); 58 imagecopyresampled($thumbImage, $srcImage, 0, 0, 0, 0, THUMBNAIL_WIDTH, $thumbHeight, $width, $height); 59 60 switch($this->_imageType) { 61 case IMAGETYPE_GIF: 62 imagegif($thumbImage, THUMBNAIL_DIR . '/' . $this->_imageFileName); 63 break; 64 case IMAGETYPE_JPEG: 65 imagejpeg($thumbImage, THUMBNAIL_DIR . '/' . $this->_imageFileName); 66 break; 67 case IMAGETYPE_PNG: 68 imagepng($thumbImage, THUMBNAIL_DIR . '/' . $this->_imageFileName); 69 break; 70 } 71 72 } 73 74 private function _save($ext) { 75 $this->_imageFileName = sprintf( 76 '%s_%s.%s', 77 time(), 78 sha1(uniqid(mt_rand(), true)), 79 $ext 80 ); 81 $savePath = IMAGES_DIR . '/' . $this->_imageFileName; 82 $res = move_uploaded_file($_FILES['image']['tmp_name'], $savePath); 83 if ($res === false) { 84 throw new \Exception('Could not upload!'); 85 } 86 return $savePath; 87 } 88 89 private function _validateImageType() { 90 $this->_imageType = exif_imagetype($_FILES['image']['tmp_name']); 91 switch($this->_imageType) { 92 case IMAGETYPE_GIF: 93 return 'gif'; 94 case IMAGETYPE_JPEG: 95 return 'jpg'; 96 case IMAGETYPE_PNG: 97 return 'png'; 98 default: 99 throw new \Exception('PNG/JPEG/GIF only!'); 100 } 101 } 102 103 private function _validateUpload() { 104 // var_dump($_FILES); 105 // exit; 106 107 if (!isset($_FILES['image']) || !isset($_FILES['image']['error'])) { 108 throw new \Exception('Upload Error!'); 109 } 110 111 switch($_FILES['image']['error']) { 112 case UPLOAD_ERR_OK: 113 return true; 114 case UPLOAD_ERR_INI_SIZE: 115 case UPLOAD_ERR_FORM_SIZE: 116 throw new \Exception('File too large!'); 117 default: 118 throw new \Exception('Err: ' . $_FILES['image']['error']); 119 } 120 121 } 122}

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

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

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

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

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

guest

回答1

0

ベストアンサー

上記2ファイルをコピーし、リダイレクトの箇所だけ変更し試してみました(環境はWindows7・xamppです)
結果、オリジナル・サムネイルともに適切なディレクトリにアップロードされ、
元のページに戻ってこれました。サムネイルもリサイズされています。
もしかしたら、修正を繰り返しているうちにいつの間にか直っていた可能性が?

php

1header('Location: http://' . $_SERVER["HTTP_HOST"]); //before 2header('Location: http://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]); //after

投稿2016/05/23 15:13

nnssn

総合スコア1221

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問