回答編集履歴

1 エラーになる箇所を修正

kunai

kunai score 5194

2017/01/24 13:37  投稿

色々突っ込みどころがありそうですが、シンプルに解決するならば、
1.up.phpにerrorという変数が送られたら、エラー扱いとしてエラー処理を開始する
2.errorという変数は配列になっており、resize.phpからはそのエラーコードのみを返答する
3.エラーメッセージ自体はup.phpで表示する
という形にするとよいのではないでしょうか。
(配列にせず、error_1とかでも出来はしますが、配列の方がスマートに書けると思います)
上記の仕様で書いてみると、以下のようなものでどうでしょうか。
errorCode.php
```PHP
define('ERROR_CODE_FILE_SIZE',  1);
define('ERROR_CODE_FILE_TYPE',  2);
define('ERROR_CODE_FILE_WIDTH', 3);
define('ERROR_CODE_FILE_HEIGHT', 4);
```
resize.php
```PHP
require_once('errorCode.php');
$error = array();
if ($filesize > 5242880) {
   $error[] = ERROR_CODE_FILE_SIZE;
}
$finfo = new finfo(FILEINFO_MIME_TYPE);
if (!preg_match('/\.jpg$|\.jpeg$/i', $file['name'])
       || $finfo->file($tmp_name) !== 'image/jpeg') {
   $error[] = ERROR_CODE_FILE_TYPE;
}
if ($get["0"]>1000) {
   $error[] = ERROR_CODE_FILE_WIDTH;
}
if ($get["1"]>1000) {
   $error[] = ERROR_CODE_FILE_HEIGHT;
}
if(!empty($error)) {
   header('location:http://localhost/up/up.php?error[]='.implode('&error[]=', $error);
   $url = 'http://localhost/up/up.php?error[]='.implode('&error[]=', $error);
   header('Location: '.$url);
} else {
   echo '送信完了';
}
```
up.php
```PHP
require_once('errorCode.php');
$errorMessage = array(
   ERROR_CODE_FILE_SIZE => '5M以下のファイルを選択して下さい!',
   ERROR_CODE_FILE_TYPE => 'JPEGファイルを選択してください!',
   ERROR_CODE_FILE_WIDTH => '横幅を小さくしてください!',
   ERROR_CODE_FILE_HEIGHT => '縦幅を小さくしてください!',
);
if(!empty($_GET['error']) && is_array($_GET['error'])) {
   foreach($_GET['error'] as $error) {
       if(isset($errorMessage[$error])) {
       echo '<span style="color: #ee0000">';
       echo $errorMessage[$error];
       echo '</span>';
   }
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る