デバッグはちょっとした技術ですが、簡単な方法で簡単に習得できます。
最終的に解決策に達するまで、各ポイントに従ってください。
PHPエラーを有効にする
これはほとんどの問題の鍵です。セキュリティまたはその他の理由により、PHPエラー表示は、PHP設定によりデフォルトで無効になっている可能性があります。
より永続的な解決策、または単により一時的なものでエラーを有効にできます。
永続的なソリューション
Apache / mod_phpユーザーの場合
ドキュメントルートの.htaccess
ファイルに-これを一番上にドロップしてください。
php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
php_flag log_errors on
php_value error_log /home/path/public_html/var/log/system.log
Nginx / FastCGIユーザーの場合
Nginx仮想ホストの設定、最終的なlocation .php {
ディレクティブ、またはfastcgi_params
ファイル(指定されている場合)
fastcgi_param PHP_VALUE display_startup_errors=on;
fastcgi_param PHP_VALUE display_errors=on;
fastcgi_param PHP_VALUE html_errors=on;
fastcgi_param PHP_VALUE log_errors=on;
fastcgi_param PHP_VALUE error_log=/home/path/public_html/var/log/system.log;
一時的/普遍的なソリューション
あらゆるプラットフォーム向け
index.php
ドキュメントルートでMagentoブートストラップを編集し、次の行のコメントを解除します。
#ini_set('display_errors', 1);
開発者モードを有効にする
エラーが発生し、突然「エラーレポート」ページにアクセスし、一見役に立たないようなエラー文字列が表示された1184257287824
場合-いくつかのオプションがあります。
永続的なソリューション
Apache / mod_phpユーザーの場合
ドキュメントのルート.htaccess
ファイルで、これを一番上にドロップします。
SetEnv MAGE_IS_DEVELOPER_MODE true
Nginx / fastcgiユーザーの場合
Nginx仮想ホストの設定、最終的なlocation .php {
ディレクティブ、またはfastcgi_params
ファイル(指定されている場合)
fastcgi_param MAGE_IS_DEVELOPER_MODE true;
一時的/普遍的なソリューション
index.php
ドキュメントルートでMagentoブートストラップを編集し、if
ステートメントを常にtrueにするか、特定のIPに対して有効にします。
if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE']) || true) {
Mage::setIsDeveloperMode(true);
}
または
if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE']) || $_SERVER['REMOTE_ADDR'] == 'my.ip.add.ress') {
Mage::setIsDeveloperMode(true);
}
許可を確認してください
不正なアクセス許可は多くの問題を引き起こしますが、その多くは一見簡単に見つけることはできません。
例えば。
PHPが./media
ディレクトリに書き込めず、JSコンバインが有効になっている場合-Magentoは、メディアの結合ファイルと関連する一意のURIを生成できません。その代わり、ブラウザのソースコードにあるのは、メディアファイルへの完全なサーバーパスです。
/home/path/public_html/media/xxx
それ以外の場合、サイトは正常に機能しているように見える場合があり、重大なエラーは実際には表示されません。
この方法は専用ホスティングでは安全ですが、Apacheプロセスがユーザーごとにchrootされていない場合、共有ホスティングでセキュリティの問題が発生する可能性があることに注意してください。
この例では、SSH / FTPユーザーはsonassi
、Apacheユーザーはapache
、グループはapache
FTP / SSHユーザーをApacheグループに追加します
最も重要なことは、FTP / SSHユーザーがApacheグループの一部であることを確認する必要があることです。この例では、そのグループapache
は(しかし一般的にはwww-data
)
usermod -a -G apache sonassi
FTP / SSHの場合と同じ数のユーザーをグループに追加し続けます。
元の権限をリセット
そのため、開始する前に、すべての権限が正しいことを確認してください。
chown -R sonassi:apache /home/path/public_html/
find /home/path/public_html/ -type d -exec chmod 775 {} \;
find /home/path/public_html/ -type f -exec chmod 664 {} \;
変更を永続的にする
ACLとスティッキービット
LinuxのACLを使用すると、特定のルール、この場合は作成時にどのパーミッションファイルを継承するかを定義できます。スティッキービット(後述)は、グループ継承の世話をするが、私たちはACLを使用する理由である権限、と助けにはなりません。
アクティブパーティションでACLサポートを有効にすることから始めます。カーネルがACLサポートでコンパイルされていることを確認してください。
あなたのパーティションであってもよい/
、/home
、/var
または何か他のものは、適宜交換してください。
mount -o remount,acl /home
ACLが有効になったので、ACLルールとグループスティッキビットを設定できます。
setfacl -d -m u::rwx,g::rwx,o::rx /home/path/public_html/
chmod g+s /home/path/public_html/
しかし、私はACLをサポートしていません
カーネルがACLをサポートしていない場合umask
は、デフォルトのファイル許可を設定するために(BASH、FTP、およびPHPの実行時設定)を使用することもできます。Magentoは通常に設定umask(0)
さindex.php
れますが、これを変更することはあなたの利益になります。
あなたにindex.php
変更umask
行がなければ
umask(022);
そして、SSHのBASH環境で、これをあなた.bashrc
または.bash_profile
umask 022
FTPサーバーについては、そのドキュメントを読む必要がありますが、原則は同じです。
テーマをデフォルトに戻す
テーマまたはパッケージがこの問題の原因である可能性があります。バニラマジェントのテーマに戻すことで、簡単に見つけることができます。
**これには、一部のモジュールが特定のテーマ機能に依存している可能性があるという警告があります*
管理パネルで何かを変更するのではなく、問題のディレクトリの名前を変更する方がはるかに簡単です。
SSH経由
mv ./app/design/frontend/myBrokenTheme{,.tmp}
mv ./skin/frontend/myBrokenTheme{,.tmp}
または、FTPクライアントを介して、パッケージをトラバースし、別の名前に変更します。例えば。myBrokenTheme.tmp
これで問題が解決した場合
次に、テンプレートのどの部分に問題があるかについて、もう少し詳しく調べる必要があります。そのため、パッケージを復元し、それぞれをテストしながら次のことを試みます。
基本的に、プロセスは、問題のあるファイルが見つかるまで、ファイルツリーをたどってディレクトリを徐々に有効にします。
- レイアウトディレクトリの名前を
.tmp
- テンプレートディレクトリの名前を
.tmp
次に、どちらかが修正された場合、レイアウトディレクトリ内のすべてのファイルの名前を.tmp
-(SSHユーザーls | xargs -I {} mv {} {}.tmp
またはrename 's/^/.tmp/' *
)に変更します
その後、解決されるまで、各ファイルを1つずつ徐々に有効にします。
これで問題が解決しない場合
base/default
またはenterprise/default
ディレクトリが汚染されている可能性があります-既知のクリーンバージョンに置き換えるのが最適です。
これを行うには、Magentoのクリーンビルドをダウンロードし、必要に応じてディレクトリを置き換えます。SSHでこれを行うことができます:
cd /home/path/public_html/
mkdir clean_mage
cd clean_mage
MAGENTO_VERSION=1.7.0.0
wget -O magento.tgz http://www.magentocommerce.com/downloads/assets/$MAGENTO_VERSION/magento-$MAGENTO_VERSION.tar.gz
tar xvfz magento.tgz
cd /home/path/public_html/app/design/frontend
mv base{,.tmp}
cp -par /home/path/public_html/clean_mage/magento/app/design/frontend/base .
cd /home/path/public_html/skin/frontend
mv base{,.tmp}
cp -par /home/path/public_html/clean_mage/magento/skin/frontend/base .
diff
変更を確認する場合は、2つのディレクトリにアクセスすることもできます。
diff -r base base.tmp
NB。モジュールの依存関係は特定のファイルの存在を指示するため、このメソッドはプロセス中により多くのエラーを引き起こします。残念ながら、コースのパー。
ローカルモジュールを無効にする
デフォルトでは、Magentoは、次の順序でクラスをロードするPHPインクルードパスを定義します
Local > Community > Core
ファイルがローカルにある場合-それをロードして、それ以上はしません。
ファイルがコミュニティにある場合-それをロードして、それ以上はしません。
他の場所でファイルが見つからない場合-コアからロードします。
繰り返しになりますが、Magento管理パネルでモジュールを無効にするよりも、ファイルレベルでこれを行う方が実用的です。
通常、モジュールを「適切な」方法で無効にするには、それぞれの./app/etc/modules/MyModule.xml
ファイルを編集して設定します。<active>false</active>
ただし、これは実際にはクラスのロードを妨げません。
別のクラスがモジュール内の特定のクラスを拡張する場合(Magento依存関係宣言を無視する場合)、拡張機能が無効かどうかに関係なく、引き続きロードされます。
繰り返しになりますが、拡張機能を無効にする最良の方法は、ディレクトリの名前を変更することです。
ローカルを無効にすることから始めます
FTP経由でディレクトリの名前を変更するか、次のSSHコマンドを使用します
mv ./app/code/local{,.tmp}
次に、コミュニティを無効にします
mv ./app/code/community{,.tmp}
いずれかから問題が解決した場合
次に、特にエラーの原因となったモジュールを理解する場合です。上記のパッケージ診断の例と同様に、同じプロセスが適用されます。
そのため、Xディレクトリを復元し、それぞれをテストしながら次のことを試みます。
基本的に、エラーが再発するまで、ディレクトリ(モジュール)を1つずつ段階的に有効にします。
- ディレクトリ内のすべてのモジュールの名前を変更します
.tmp
(SSHユーザーls | xargs -I {} mv {} {}.tmp
またはrename 's/^/.tmp/' *
)
.tmp
ファイル名から削除することにより、各モジュールを徐々に有効にします
問題が解決しない場合
その後、コア自体が汚染される可能性があります。メインのMagento PHPコアは、
./app/code/core
./lib
繰り返しますが、これらのディレクトリの名前を変更し、クリーンなバリアントでコピーします。上記のように、Magentoのクリーンバージョンを既にSSH経由でダウンロードしていると仮定すると、これを行うことができます。
cd /home/path/public_html/app/code
mv core{,.tmp}
cp -par /home/path/public_html/clean_mage/magento/app/code/core .
それでも問題が解決しない場合は、lib
ディレクトリも置き換えます
cd /home/path/public_html
mv lib{,.tmp}
cp -par /home/path/public_html/clean_mage/magento/lib .
この時点で、Magentoストアは、変更されたデータベースを備えた通常のインストールにすぎません。
一部のモデルは実際にはまだデータベースに保存されています(たとえば、注文の増分)。したがって、この時点で、それらの編集を手動で行う場合になります。これまでのところ、上記のすべての手順は永続的な損傷なしで可逆的です。ただし、クリーンなMagentoデータベースもインポートしている場合は、元に戻せないことが判明する可能性があります(バックアップの復元以外)。
上記のガイドは、エラーを特定する方法を説明しています。結果のエラーを修正することではありません。
www.sonassi.com/knowledge-base/magento-debug-processおよびwww.sonassi.com/knowledge-base/stop-magento-permissions-errors-permanentlyから提供されるコンテンツ