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

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

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

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

XAMPP

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

Amazon EC2

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

Laravel 5

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

1076閲覧

ローカルで表示されるphpページがAWSでは404エラーになる

donut4

総合スコア170

PHP

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

XAMPP

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

Amazon EC2

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

Laravel 5

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/04/07 06:55

Laravelのpublicディレクトリを使ってベタ書きのPHPで簡単なWEBアプリを作ろうとしてますが
表題のエラーが解決できません。

ローカル環境(XAMMP)では正常にPOST通信され、次のページが表示されるのですが、
それをAWS(Apache)にデプロイしたものを操作するとPOST通信するタイミングで404が表示されます。

formタグのaction="xxxxx.php"が環境によって書き方が違うのではないかとも思い
色々試しましたが上手くいきませんでした。

詳しい方がいましたらよろしくお願いします。

=====URL、ディレクトリ状況=====

ローカル環境の初期表示ページ(XAMPP)
http://localhost/laravelapp/public/calculator/calculator.php

AWS環境の初期表示ページ
http://ec2-XX-XXX-XXX-XXX.ap-northeast-1.compute.amazonaws.com/calculator/calculator.php

どちらの環境にもcalculatorフォルダの中に
Calculator.php
Calculate.php
Calcuexe.phpのファイルが構成されている

=====ソースコード=====

・Calculator.php

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <title>電卓</title> <link rel="stylesheet" type="text/css" href="../css/calculator.css"> </head> <body> <form action="Calcuexe.php" method="POST"> ←★★★actionの書き方が原因?★★★ <input type="text" name="value1" id="value1" class="CalcArea" value="<?php if(isset($calcu))echo($calcu->getVal1()) ?>" size="10" maxlengh="10" > <select name="operand" class="SymbolArea"> <option value=""></option> <option <?php if(isset($calcu) && $calcu->getOperand() == 'add')echo("selected") ?> value="add">+</option> <option <?php if(isset($calcu) && $calcu->getOperand() == 'subtract')echo("selected") ?> value="subtract">-</option> </select> <input type="text" name="value2" id="value2" class="CalcArea" value="<?php if(isset($calcu))echo($calcu->getVal2()) ?>" size="10" maxlengh="10" > = <input type="text" name="result" id="result" class="CalcArea" value="<?php if(isset($calcu))echo($calcu->getResult()) ?>" size="10" maxlengh="10" > <table border="0" class="ButtonArea"> <tr> <td><button class="Button" type="button" onclick="setNum(7)" value="7">7</button></td> <td><button class="Button" type="button" onclick="setNum(8)" value="8">8</button></td> <td><button class="Button" type="button" onclick="setNum(9)" value="9">9</button></td> </tr> <tr> <td><button class="Button" type="button" onclick="setNum(4)" value="4">4</button></td> <td><button class="Button" type="button" onclick="setNum(5)" value="5">5</button></td> <td><button class="Button" type="button" onclick="setNum(6)" value="6">6</button></td> </tr> <tr> <td><button class="Button" type="button" onclick="setNum('1')" value="1">1</button></td> <td><button class="Button" type="button" onclick="setNum(2)" value="2">2</button></td> <td><button class="Button" type="button" onclick="setNum(3)" value="3">3</button></td> </tr> <tr> <td></td> <td><button class="Button" type="button" onclick="setNum()" value="0">0</button></td> <td><input class="Button" type="submit" value="="></td> </tr> </table> </form> </body> <script> function setNum(val){ //入力エリアには2桁まで入力可能にさせる if( $("#value1").val().length < 2 ) { var dispval = $("#value1").val() + val; $("#value1").val(dispval); }else if( $("#value2").val().length < 2 ){ var dispval = $("#value2").val() + val; $("#value2").val(dispval); } } </script> </html>

・Calculate.php

<?php class Calculate { private $val1;//値1 private $val2;//値2 private $operand;//演算記号 private $result;//計算結果 //演算記号の定数 const ADD = 'add'; const SUBTRACT = 'subtract'; //コンストラクタ public function __construct($val1, $operand, $val2) { $this->val1 = $val1; $this->operand = $operand; $this->val2 = $val2; } //値1 public function getVal1() { return $this->val1; } //演算記号 public function getOperand() { return $this->operand; } //値2 public function getVal2() { return $this->val2; } //計算結果 public function getResult() { return $this->result; } //実際に計算処理をする public function calcuexe(){ if(is_numeric($this->val1) && is_numeric($this->val2)){ switch ($this->operand) { case self::ADD: $this->result = $this->val1 + $this->val2; break; case self::SUBTRACT: $this->result = $this->val1 - $this->val2; break; } } } } ?>

・Calcuexe.php

<?php require_once('Calculate.php'); $val1=$_POST['value1']; $operand=$_POST['operand']; $val2=$_POST['value2']; //画面から受け取った値をインスタンス化 $calcu = new calculate($val1, $operand, $val2); //計算実行 $calcu->calcuexe(); require_once('Calculator.php'); ?>

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

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

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

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

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

yoorwm

2020/04/07 07:08

これ、どの辺りにLaravel使っているんですか?
mackintosh

2020/04/07 07:43

見逃していましたが、public配下にレガシーで書いているのだと思われます。 > Laravelのpublicディレクトリを使って
tabuu

2020/04/07 07:50

ファイル名の一文字目の「C」は大文字、小文字どちらが正解ですか?
donut4

2020/04/10 03:33

git側でCalcuexe.phpがCalcuExe.phpになってました。 おそらくファイル名をエクスプローラー上で直接CalcuExe.php⇒Calcuexe.phpに変更したのが 原因のような気がします。 git mv CalcuExe.php Calcuexe.php で確実にファイル名を変更してあげたら404にならず想定通り表示されました。
guest

回答3

0

エラーの理由はよくわかりませんでしたが、以下のように変更してはどうでしょうか。

  • Calculator.php は自身へPOSTする
  • Calculator.php が Calcuexe.php を読み込む
  • Calcuexe.php が Calculator.php を読み込むのはやめる

Calculator.php

php

1<?php 2if (count($_POST)) { // POSTリクエストの場合 3 require_once('Calcuexe.php'); 4} 5?> 6<!DOCTYPE html> 7 8... 9 10 <form method="POST"><!-- 自身へPOST -->

Calcuexe.php

php

1<?php 2require_once('Calculate.php'); 3 4 5$val1=$_POST['value1']; 6$operand=$_POST['operand']; 7$val2=$_POST['value2']; 8 9//画面から受け取った値をインスタンス化 10$calcu = new calculate($val1, $operand, $val2); 11//計算実行 12$calcu->calcuexe(); 13?>

投稿2020/04/08 12:43

Lulucom

総合スコア1899

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

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

donut4

2020/04/10 03:34

ありがとうございます。落ち着いたら参考にさせていただきます。
guest

0

自己解決

git側でCalcuexe.phpがCalcuExe.phpになってました。
おそらくファイル名をエクスプローラー上で直接CalcuExe.php⇒Calcuexe.phpに変更したのが
原因のような気がします。

git mv CalcuExe.php Calcuexe.php
で確実にファイル名を変更してあげたら404にならず想定通り表示されました。

投稿2020/04/23 07:55

donut4

総合スコア170

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

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

0

aws側では一部のページだけ404なのですか?全体ですか?

全体ならLaravel関係なく、apcheのドキュメントルートあたりの設定漏れが濃厚です。

投稿2020/04/07 07:00

mackintosh

総合スコア228

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

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

mackintosh

2020/04/07 07:53

> http://localhost/laravelapp/public/calculator/calculator.php > http://ec2-XX-XXX-XXX-XXX.ap-northeast-1.compute.amazonaws.com/calculator/calculator.php これ、ローカルとawsでドキュメントルートの最終地点異なっていませんか? awsではpublicまでをhttp://ec2-XX-XXX-XXX-XXX.ap-northeast-1.compute.amazonaws.comとしているが ローカルではhttp://localhost/laravelappもしくはhttp://localhostまでしか指せていないような気がします。
mackintosh

2020/04/07 07:56

ルートドメインとドキュメントルートと対応パスについて知らないと解決できないと思います。
donut4

2020/04/10 03:32

git側でCalcuexe.phpがCalcuExe.phpになってました。 おそらくファイル名をエクスプローラー上で直接CalcuExe.php⇒Calcuexe.phpに変更したのが 原因のような気がします。 git mv CalcuExe.php Calcuexe.php で確実にファイル名を変更してあげたら404にならず想定通り表示されました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問