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

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

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

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

PHP

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

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Q&A

解決済

1回答

29932閲覧

AWS ec2 上でのXMLエラーについて

iserve

総合スコア7

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

PHP

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

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

0グッド

0クリップ

投稿2016/01/03 07:14

AWS ec2 にて勉強のためPHPとMySQLでシンプルな画像アップロードサービスを開発しております。
enctype="multipart/form-data"フォームでアップロードをするファイルを選択し、submitで送信すると
以下のエラーが表示されてしまいます。

エラー内容
This XML file does not appear to have any style information associated with it. The document tree is shown below.

ec2仮想サーバに何かインストールが足りていないのか、プログラムに不具合があるのか、原因がつかめません。
ご存知の方いらっしゃいましたら、ご教授お願い致します。

バージョン
PHP 5.4.45
mysql Ver 14.14 Distrib 5.5.46, for Linux (x86_64) using deadline 5.1
Server version: Apache/2.4.16 (Amazon)

以下プログラム


<?php header('Content-Type: application/xhtml+xml; charset=utf-8'); try { // データベースに接続 $pdo = connectDb(); /* アップロードがあったとき */ if (isset($_FILES['upfile']['error']) && is_int($_FILES['upfile']['error'])) { // バッファリングを開始 ob_start(); try { // $_FILES['upfile']['error'] の値を確認 switch ($_FILES['upfile']['error']) { case UPLOAD_ERR_OK: // OK break; case UPLOAD_ERR_NO_FILE: // ファイル未選択 throw new RuntimeException('ファイルが選択されていません', 400); case UPLOAD_ERR_INI_SIZE: // php.ini定義の最大サイズ超過 case UPLOAD_ERR_FORM_SIZE: // フォーム定義の最大サイズ超過 throw new RuntimeException('ファイルサイズが大きすぎます', 400); default: throw new RuntimeException('その他のエラーが発生しました', 500); } // $_FILES['upfile']['mime']の値はブラウザ側で偽装可能なので // MIMEタイプを自前でチェックする if (!$info = @getimagesize($_FILES['upfile']['tmp_name'])) { throw new RuntimeException('有効な画像ファイルを指定してください', 400); } if (!in_array($info[2], [IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG], true)) { throw new RuntimeException('未対応の画像形式です', 400); } // サムネイルをバッファに出力 $create = str_replace('/', 'createfrom', $info['mime']); $output = str_replace('/', '', $info['mime']); if ($info[0] >= $info[1]) { $dst_w = 120; $dst_h = ceil(120 * $info[1] / max($info[0], 1)); } else { $dst_w = ceil(120 * $info[0] / max($info[1], 1)); $dst_h = 120; } if (!$src = @$create($_FILES['upfile']['tmp_name'])) { throw new RuntimeException('画像リソースの生成に失敗しました', 500); } $dst = imagecreatetruecolor($dst_w, $dst_h); imagecopyresampled($dst, $src, 0, 0, 0, 0, $dst_w, $dst_h, $info[0], $info[1]); $output($dst); imagedestroy($src); imagedestroy($dst); // INSERT処理 $stmt = $pdo->prepare('INSERT INTO image(name,type,raw_data,thumb_data,date) VALUES(?,?,?,?,?)'); $stmt->execute([ $_FILES['upfile']['name'], $info[2], file_get_contents($_FILES['upfile']['tmp_name']), ob_get_clean(), // バッファからデータを取得してクリア (new DateTime('now', new DateTimeZone('Asia/Tokyo')))->format('Y-m-d H:i:s'), ]); $msgs[] = ['green', 'ファイルは正常にアップロードされました']; } catch (RuntimeException $e) { while (ob_get_level()) { ob_end_clean(); // バッファをクリア } http_response_code($e instanceof PDOException ? 500 : $e->getCode()); $msgs[] = ['red', $e->getMessage()]; } /* ID指定があったとき */ } elseif (isset($_GET['id'])) { try { $stmt = $pdo->prepare('SELECT type, raw_data FROM image WHERE id = ? LIMIT 1'); $stmt->bindValue(1, $_GET['id'], PDO::PARAM_INT); $stmt->execute(); if (!$row = $stmt->fetch()) { throw new RuntimeException('該当する画像は存在しません', 404); } header('X-Content-Type-Options: nosniff'); header('Content-Type: ' . image_type_to_mime_type($row['type'])); echo $row['raw_data']; exit; } catch (RuntimeException $e) { http_response_code($e instanceof PDOException ? 500 : $e->getCode()); $msgs[] = ['red', $e->getMessage()]; } } // サムネイル一覧取得 $rows = $pdo->query('SELECT id,name,type,thumb_data,date FROM image ORDER BY date DESC')->fetchAll(); } catch (PDOException $e) { http_response_code(500); $msgs[] = ['red', $e->getMessage()]; } ?> <!-- 以下はhtml部分 --> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> ・ ・ ・

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

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

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

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

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

guest

回答1

0

ベストアンサー

This XML file does not appear to have any style information associated with it. The document tree is shown below.

これはサーバーサイドのエラーではなく、ブラウザ側でのエラーになります。
エラー内容は超意訳すると「(ブラウザ上で)このXML出力に対する表示スタイルが存在しない」というエラーになります。

ちなみにサーバーからのレスポンスはXMLなのでしょうか。
出力内容がXMLであるなら、xml-stylesheetを設定する必要があります。
HTMLであれば、header の Content-Type は text/html でよいはずです。

PHP

1//header('Content-Type: application/xhtml+xml; charset=utf-8'); 2header('Content-Type: text/html; charset=utf-8');

参考URL:
http://oshiete.goo.ne.jp/qa/7301887.html

投稿2016/01/04 02:29

編集2016/01/04 02:30
usk

総合スコア397

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

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

iserve

2016/01/04 07:31

usk様 ご回答ありがとうございます。 【xml-stylesheetを設定する】とは <?xml-stylesheet type="text/xsl" href="stylesheet1.xsl"?> のように設定ファイルを読み込む、ということでしょうか。 Azure Web Apps ではこのコードのまま問題なく動作しましたので、 Apacheのアクセス権限(ec2-userをapacheグループに加える)などが関係あるのかなと考えておりました。 初心者ですので、間違っているかもしれませんが、サーバーからのレスポンスはxhtmlだと思われます。 以下がhtml出力部分です。 ---------------------------------------------------------------------------- <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>iImageUploader</title> <style><![CDATA[ fieldset { margin: 10px; } legend { font-size: 12pt; } img { border: none; float: left; } body { font-family: Arial, sans-serif; } ]]></style> </head> <body> <p> Logged in as <?php echo h($me['name']); ?> (<?php echo h($me['email']); ?>) <a href="logout.php">ログアウト</a> </p> <form enctype="multipart/form-data" method="post" action=""> <fieldset> <legend>画像ファイルを選択(GIF, JPEG, PNGのみ対応)</legend> <input type="file" name="upfile" /><br /> <input type="submit" value="送信" /> </fieldset> </form> <?php if (!empty($msgs)): ?> <fieldset> <legend>メッセージ</legend> <?php foreach ($msgs as $msg): ?> <ul> <li style="color:<?=h($msg[0])?>;"><?=h($msg[1])?></li> </ul> <?php endforeach; ?> </fieldset> <?php endif; ?> <?php if (!empty($rows)): ?> <fieldset> <legend>サムネイル一覧(クリックすると原寸大表示)</legend> <?php foreach ($rows as $i => $row): ?> <?php if ($i): ?> <hr /> <?php endif; ?> <p> <?=sprintf( '<a href="?id=%d"><img src="data:%s;base64,%s" alt="%s" /></a>', $row['id'], image_type_to_mime_type($row['type']), base64_encode($row['thumb_data']), h($row['name']) )?><br /> ファイル名: <?=h($row['name'])?><br /> 日付: <?=h($row['date'])?><br clear="all" /> </p> <?php endforeach; ?> </fieldset> <?php endif; ?> </body> </html> 何かお気づきの点ございましたら、ご教授お願い致します。
usk

2016/01/05 08:25

ごめんなさい。回答しておいてなんですが、【xml-stylesheetを設定する】については、具体的な方法はちょと把握していないです。。。 ただ、頂いた回答を見てみると、出力内容は HTML になるので、元々のコメントにも書いた通り、header関数のパラメータを「Content-Type: text/html; charset=utf-8」と設定すればよいかと思います。
iserve

2016/01/05 23:21

ご回答、ありがとうございます。 参考にさせて頂き、色々試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問