ECCUBEの新規追加ページがInternal Server Error・Not Foundに
2017/03/12
ECCUBEの新規追加ページがInternal Server Errorに
ECCUBEのページがInternal Server Errorはパーミッションが原因
ECCUBEには、オリジナルのページを追加する機能が用意されてします。
「デザイン」-「PC」-「ページ詳細設定」で遷移する画面から新しいページを追加することができます。
ここから追加した新しいページにアクセスしてみたところ、「『Internal Server Error』が出て動かない!」ということがありました。
原因を調べて見るとファイルのパーミッション(ファイルの属性)が適切でないことが原因でした。
Internal Server Errorにはパーミッションを変更
下記の中に生成される PHPファイルのパーミッションを確認しましょう。
{ECCUBEのルート}/user_data/******.php
PHPのファイルのパーミッションが「644」であれば「666」に、「666」であれば「644」などに変更して見ましょう。「604」「606」などの可能性もあります。
ここの設定はサーバによって正しい設定が違いますので、一概に「“666”にしましょう!」と言えないのが心苦しいところですが、正しく表示されているページのパーミッションにあわせるとエラーが解消されて正しく表示されることでしょう。
私が遭遇した場合の「Internal Server Error」は、上記のとおり管理画面からのファイルの作成の際に発生したものでしたが、FTPでファイルをアップロードした場合も「Internal Server Error」が出る場合は、ファイルのパーミッションを変更して見ましょう。
パーミッションを変更する処理を追加
前項の通りパーミッションを変更することで正しく表示されるようになった場合は、今後作成されるファイルのパーミッションが正しいものになるようにプログラムの修正も行っておく方がいいでしょう。
対応するファイルは下記になります。
{ECCUBEのルート}/data/class/helper/SC_Helper_FileManager.php
※「data」フォルダはドキュメントルートより上位にある場合もあります。
322行目辺りからのソースコードです。
14行目~16行目が追加された部分です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public function sfWriteFile($filename, $value) { if (!is_dir(dirname($filename))) { SC_Utils_Ex::recursiveMkdir(dirname($filename), 0777); } $fp = fopen($filename, 'w'); if ($fp === false) { return false; } if (fwrite($fp, $value) === false) { return false; } if ( ( pathinfo ( $filename, PATHINFO_EXTENSION) ) == "php" ) { chmod($filename, 0644); } return fclose($fp);; } |
作成するファイルの拡張子が「php」の場合は、ファイルのパーミッションを「644」に設定します。
という処理を追加しています。
これで今後新しく作成されるページも「Internal Server Error」にならずに生成されるようになります。
ファイルに設定するパーミッションは、サーバに合わせて変更してください。
※ECCUBE 2.13.3、2.13.4で検証をしています。
ECCUBEの新規追加ページが Not Foundに
新規作成したページが「Internal Server Error」になる場合はファイルが作成されるものの、ファイルのパーミッションが違う場合に起こる現象でした。
ですが、新規作成したページが「Not Found」のエラーになる場合もあります。
これは、ファイルが生成されるフォルダのパーミッションが正しくなく、ファイルが生成されない場合に起こる不具合の一つです。
新規追加ページが Not Foundの場合はフォルダのパーミッション
管理画面からページを新規追加した場合は、下記のフォルダにファイルが生成されます。
{ECCUBEのルート}/user_data/
{ECCUBEのルート}/data/Smarty/templates/{テーマ}/user_data/
※「data」フォルダはドキュメントルートより上位にある場合もあります。
これらのフォルダに書き込み権限が付与されていない場合は、ファイルを生成することができないため、「Not Found」の原因になります。
上記のフォルダのパーミッションを「777」「755」などに変えてみて、ファイルが生成され、エラーが解消されるかを確認してみてください。
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
路線・駅検索をPHPで実装する方法解説。GoogleMapsの緯度経度から計算し検索
路線・駅検索の仕組みの構築は大変。登録する側も最寄り駅が多い場合は大変。なので簡易に実装するため緯度経度に基づき直線距離を計算する処理を考案して実装して、その処理を解説。
-
-
フォルダを指定してファイルのパーミッションを変更するプログラム
フォームからフォルダ、パーミッションを指定しパーミッションを変更するサンプルプログラムの解説です。
-
-
PHPで APIにアクセスする際などに使用する cURLのサンプルプログラム
PHPのcURLを使用して各種APIにアクセスするサンプルプログラムを作成し、その処理を解説。カオナビAPIのみならず、他の多くのAPIにアクセスする際にも使用できる。
-
-
ECCUBEのポイント設定、ポイント付与率を一括で変更する方法解説
ECCUBEの商品個別に設定してあるポイントを一括で変更する方法を解説。ECCUBEには商品個別のポイントを一括して変更する機能がありません。SQLを作成して一括置換!
-
-
PHPのソースで見慣れない記号が出てきた・アロー演算子(->)、ダブルアロー演算子(=>)
PHPのプログラムソースには見慣れない記号が出てきます。その意味や調べ方です。
-
-
配列の値をテキスト表示する際に「、」でつなげるときの処理方法の一例
配列の値を「、」でつないで出力する際、単純にforeachで繰り返し処理をすると「イヌ、サル、キジ、」となるが文字列最後の「、」を出力しない方法を3つ解説している。
-
-
ECCUBEを開発環境から本番ドメインに変更でエラーが・パス変更について
レンタルサーバでサーバ会社から割り当てられたURLで開発し、本番公開時にドメインを当てたらエラーが!そんな場合の対処方法の解説。対処方法は簡単ですが管理画面からは対応不可。
-
-
ECCUBEの注文完了画面注文番号と商品情報を編集するCRITEO(クリテオ)タグを編集
ECCUBEの注文完了画面にクリテオのタグを編集する方法を紹介。標準機能では完了画面に注文IDや購入商品の情報を渡さないため改修が必要です。
-
-
WindowsのXAMPPのPHPではstrptimeは使用不可。代替はdate_parse_from_formatを使う
strptimeはWindowsのPHPには未実装。LinuxとMacで挙動が異なる。PHP8.1で非推奨になる。なので日付のチェックはdate_parse_from_formatを使おう。使い方を詳細解説。
-
-
PHPのデバッグで使う print_r、var_dump、var_exportの動作の違い
PHPのデバッグ等で変数や配列の中身を確認するために使用する関数print_r、var_dump、var_exportの動作の違い、仕様の違いについて確認した。var_exportがオススメ。