タイトルのとおり
concrete5をMAMPローカルにDLして
インストール作業に入ろうと
http://localhost
にアクセスしたところ
500エラーが返ってきてしまいましたので
その解決方法とプロセスをメモ書きします。
(インストール後にもかかわらず、同様の現象になる方もいると思います。)
目次
500エラーは多くの場合は記述ミス
まず、500エラーとは
500番台のエラーはサーバー側に問題があるエラーです。
HTTP500エラーはperlやphpなどのCGIの記述ミスが殆どで、簡単に言うと「ホームページの作り方(書き方)に問題があって表示できません」という事です。サーバのダウンが原因と回答されている方がいますが、そもそもサーバがダウンすれば500エラーを返すことができないので、ありえない話です。
500エラーが返るのは、サーバが正しく動いている(ダウンしていない)証拠です。
ホームページを見ている時によく、「HTTP 500 – 内部サーバー エラー ページを… – Yahoo!知恵袋
なるほどなるほど。分かりやすい。
さらにこれをMAMPの話に置き換えると
HTTP ERROR 500 が出るということは、Apache以下、正常に動作しています。
HTTP ERROR 500という応答は、Apacheが返すものだからです。500番台のエラーは、サーバーサイドのエラーを表すもので、スクリプトに文法的なエラーや処理続行が不能であるときに表示されるものです。
login.php に何らかの文法エラーなどがある可能性があります。
error_log に何らかのヒントがあるはずです。
PHP – MAMPでPHPを動かしたいが動かない|teratail
ふむふむ。
つまり、サーバー側(MAMP, Apache)には問題がなく
あくまでプログラムコードの文法エラーということ。
コンソールでlogからエラーを追ってみる
MAMPフォルダ内の
error_logファイルからエラーを追ってみます。
コンソールでtail -fコマンドにより
エラーを追ってみると、下記の表示が
PHP Fatal error: Cannot use Concrete\Core\Foundation\Object as Object because ‘Object’ is a special class name
どうやら、Objectという名前でクラス指定をしているファイルがあるらしく
それはダメだよ、と言われているようです。
こちらのエラーで検索してみると
同様の現象が発生している人がいました。
concrete5 8.4.1 がリリースされたのでアップデートを行い、そのついでにPHPも7.2にしてみました。
その後にサイトを確認すると、下記のエラーが。Cannot use Concrete\Core\Foundation\Object as Object because ‘Object’ is a special class name
サイトを2つ運営しているのでまとめてアップデートしたのですが、片方だけエラーが出てしまいました。
エラーが出た方もPHPを7.1にすると問題なく動きます。
concrete5 8.4.1をPHP7.2でエラー :: concrete5 Japan 日本語公式サイト
さらに↑のページのコメントから引用
object は(PHP 7.2 以降)予約語になったものです。
「予約語」とは、コンピュータの世界では昔からあったもので、
予め、プログラミング言語などを制作する場合に、他と被らないように、
予約して、「他では使わないように」と宣言する(した)ものです。object以外にも、PHPでも沢山の予約語があります。
これらの名前は、クラスやインターフェイスそしてトレイトの名前として使えません(別の用途・別の宣言など)。 名前空間の中であっても使うことはできません。
どうやら、PHPのバージョンが7.2になったことにより
使用してはいけない(予約語)である「Object」クラスを
concrete5のコアファイルが指定しているようなのです。
MAMPのPHPバージョンを変更して解決
コアファイルをいじるのは面倒かつ不安があるので
MAMPのPHPバージョンを変更します。
MAMPメニュー > 設定 > PHP より
Standard Versionを 7.2.8から
7.1.20へ変更。
再びMAMPルートからconcrete5のページを見ると
無事にサイトが表示されました。
Leave a Reply