디버깅은 약간의 기술이지만 간단한 요법을 따르면 쉽게 마스터 할 수 있습니다.
솔루션에 도달 할 때까지 각 포인트를 따르십시오.
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
명령문을 항상 참으로 설정하거나 특정 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 사용자 추가
가장 중요한 것은 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의 런타임 설정 인 기본 파일 권한을 설정할 수도 있습니다. 마 젠토는 일반적으로 설정 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 씩 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
변경 사항을 확인하려는 경우 두 디렉토리 를 사용할 수도 있습니다 .
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 디렉토리를 복원하고 각각을 테스트하여 다음을 시도하십시오.
본질적으로 프로세스는 오류가 다시 발생할 때까지 디렉토리 (모듈)를 하나씩 차례로 활성화하는 것입니다.
- 로 디렉토리에있는 모든 모듈의 이름을 변경
.tmp
합니다 (SSH 사용자를위한 ls | xargs -I {} mv {} {}.tmp
또는 rename 's/^/.tmp/' *
)
.tmp
파일 이름에서 제거하여 각 모듈을 하나씩 차례로 활성화
문제가 해결되지 않은 경우
그러면 코어 자체가 오염 될 수 있습니다. 메인 마 젠토 PHP 코어는
./app/code/core
./lib
다시이 디렉토리의 이름을 바꾸고 깔끔한 변형으로 복사하십시오. SSH를 통해 위와 같이 Magento의 클린 버전을 이미 다운로드했다고 가정하면 다음을 수행 할 수 있습니다.
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 에서 기꺼이 제공 한 콘텐츠