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行目が追加された部分です。
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」などに変えてみて、ファイルが生成され、エラーが解消されるかを確認してみてください。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
PHPでスクレイピング。phpQueryとphp-simple-html-dom-parserの比較と設置方法
「PHP スクレイピング」で検索すると「phpQuery」ばかりヒットするが、10年以上も放置されている。なので今も開発が続いている「PHP Simple HTML DOM Parser」をオススメする。
-
-
PHPパーミッション変更のchmod関数・モードを変数で指定する方法
パーミッション変更関数であるchmod関数の第二引数、ファイルモードの指定に変数を使う場合は8進数に変換するoctdec関数を使って変換します。
-
-
路線・駅検索のために緯度経度からPHPで2点間の距離を計算する処理解説
路線・駅検索の仕組みの構築は大変。それを簡易に実装するために緯度経度を元に距離計算をする仕組みを考案。まずは2点間の距離を計算する仕組みを解説し、距離計算にまつわる関連技術も紹介。
-
-
PHP画面が真っ白 header(“Location: $url”);
PHPの開発で header(“Location: $url”);を使うと画面が真っ白になる不具合が出る場合もあります。
-
-
指定した数で文字列を丸める(n文字目で…にする)関数substr、mb_substr、mb_strimwidthの違い
文字列を指定された数で抜き出すPHPの関数、substr、mb_substr、mb_strimwidthについての解説。似た関数だが引数の指定方法が違ったり、文字数がバイト数か文字数かも違ったり、注意が必要だ。
-
-
Smartyの修飾子regex_replaceで正規表現の後方参照・PHPではpreg_replace
ECCUBEで使われているSmartyで文字列を正規表現で置換し後方参照で値を利用する装飾子regex_replaceの解説です。細かな条件がありますので注意が必要です。
-
-
Smartyのテンプレート内の処理で計算、加工をする方法
Smartyのテンプレート上で変数を計算する、加工する方法を解説します。
-
-
PHP range関数を使って階乗と重複組み合わせを計算
PHPの range関数を使って階乗と重複組み合わせを計算し、それを元に乱数発生器を作成しました。
-
-
PHPで月末から1ヶ月後「+1 month」を算出すると想定する日付にならない場合がある
PHPでは月末の1ヶ月後が想定した日付にならない場合がある。原因はバグではなくPHPの1ヶ月後の定義によるもの。なので必要とする日付を定義しそれに合わせてDateTime、modifyを使用して算出方法を解説している。
-
-
PHPのcURLでAPIやWebサイトへのアクセス方法。file_get_contentsとの比較
PHPからWebサイトにアクセスしてHTMLを取得、APIにアクセスして情報を取得する場合は、cURLがオススメ。file_get_contentsでも可能だがエラー制御に難がありトラブルのもとになる。
