Zend/Loader.php 로드에 실패했습니다.이유를 알아내려고 노력 중인가요?

StackOverflow https://stackoverflow.com/questions/39364

  •  09-06-2019
  •  | 
  •  

문제

저는 3~4일마다 충돌이 발생하는 클라이언트 사이트를 물려받았습니다.그것은 내가 알지 못하는 zend 프레임워크를 사용하여 구축되었습니다.

다음 코드:

<?php
    // Make sure classes are in the include path.
   ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . 'lib' . PATH_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'classes');

    // Use autoload so include or require statements are not needed.
    require_once 'Zend/Loader.php';
    Zend_Loader::registerAutoload();

    // Run the application.
    App_Main::run('production');

다음 오류가 발생합니다.

[Tue Sep 02 12:58:45 2008] [error] [client 78.***.***.32] PHP Warning: require_once(Zend/Loader.php) [function.require-once]: failed to open stream: No such file or directory in /srv/www/vhosts/example.co.uk/httpdocs/bootstrap.php on line 6 
[Tue Sep 02 12:58:45 2008] [error] [client 78.***.***.32] PHP Fatal error: require_once() [function.require]: Failed opening required 'Zend/Loader.php' (include_path='.:.:/usr/share/php5:/usr/share/php5/PEAR') in /srv/www/vhosts/example.co.uk/httpdocs/bootstrap.php on line 6 

이 문제를 해결하기 위해 어디서부터 시작해야 할지조차 모르겠습니다.PHP에 대한 나의 지식 수준은 중간 수준이지만 앞서 말했듯이 Zend에 대한 경험이 없습니다.또한 원래 개발자에게 문의하는 것은 옵션이 아닙니다.

흥미로운 점은 사이트 페이지에 접속할 때마다 코드가 실행되더라도 오류가 가끔 발생한다는 것입니다.

나는 그것이 include_path와 관련이 있을 것이라고 생각하지만 확실하지 않습니다.

도움이 되었습니까?

해결책

처음에는 포함 경로에 슬래시가 있어야 한다고 생각합니다.내 예는 다음과 같습니다.

    set_include_path('../library/ZendFramework-1.5.2/library/:../application/classes/:../application/classes/excpetions/:../application/forms/'); 

부트스트랩 파일은 다른 파일(아마도 index.php 파일)에 포함됩니다.즉, 포함 경로가 절대 경로가 아닌 상대 경로인 경우 bootstrap.php를 포함하는 파일이 변경되면 Loader.php가 검색되는 경로도 변경됩니다.

예를 들어, 내 Zend 앱에는 두 개의 index.php 파일이 있습니다. 하나는 프런트 엔드용이고 다른 하나는 관리 영역용입니다.이러한 인덱스 파일은 서로 다른 인덱스 파일에 포함되어 있으므로 서로 다른 상대 경로를 가진 자체 bootstrap.php가 필요합니다. 정의된 부트스트랩 파일이 아니라 원래 요청된 인덱스 파일에 상대적이어야 합니다..

이는 문제가 간헐적으로 발생하는 이유를 설명할 수 있으며, 가끔씩만 사용되는 부트스트랩을 포함하는 다른 파일이 있을 수 있습니다.나는 'bootstrap.php'에 대한 모든 사이트 파일을 검색하고 이 파일을 포함하거나 요구하는 모든 장소를 볼 것입니다.

다른 팁

산발적으로 발생한다는 사실은 이것이 프로그래밍 문제가 아니라 시스템 관리자 문제에 더 가깝다고 생각하게 만듭니다. 구현의 결함인 경우 "해당 파일이 없습니다"라는 오류를 고려하면 지속적으로 실패할 것으로 예상할 수 있습니다. 또는 디렉토리".두 가지 추측

  • 프런트엔드 웹 서버가 여러 개 있는데 그 중 하나가 잘못 구성되었습니다(Zend Framework 누락).

  • PEAR 포함 디렉토리는 네트워크에 마운트되어 있으며 가끔 짧은 시간 동안 사라지는 경우가 있습니다.

이는 보다 교묘한 파일 시스템 문제일 수 있지만 이것이 단지 하나의 파일 이상에 영향을 미칠 것이라고 생각할 수도 있습니다.

나는 같은 문제가 있었지만 파일에 대한 권한에 문제가있었습니다.모든 RWX에 대해 chmod를 제공했는데 이제는 모든 것이 정상입니다.

어쩌면 다른 사람도 나와 같은 문제를 겪게 될 수도 있습니다. 그러면 이것이 해결책이었습니다.

문안 인사

때로는 작동하므로 PHP 측면에서 본질적으로 잘못된 것은 없습니다(경로가 잘못된 경우 절대 작동하지 않습니다...).하지만 그렇죠?)그러면 Loader.php에 주기적으로 액세스할 수 없게 되는 원인은 무엇입니까?권한 문제가 의심됩니다.Loader.php 또는 Loader.php가 있는 디렉토리를 액세스할 수 없게 만드는 것입니다.크론 작업이 권한을 설정/재설정하고 있는 것일까요?먼저 확인해 보세요.작동 중일 때는 어떤 권한이 있고 작동하지 않을 때는 어떤 권한이 있는지 확인하세요.

내 경우에는 Zend/Loader.php가 PEAR 디렉토리에 없었습니다.거기에 있어야 하는데 내 웹서버가 약간 원시적이었습니다.그러나 library/Zend 디렉토리에도 삽입할 수 있습니다.

그러나 실제로 이것은 문제가 가끔 발생하는 이유에 대한 답은 아닙니다.

PHPUnit 3.5.5로 작업할 때도 이 오류가 발생했습니다.내 기본 애플리케이션 스크립트는 zend 프레임워크를 정상적으로 로드했지만 테스트 클래스에서 오류가 발생했습니다.

내 솔루션은 테스트 클래스에 다음을 추가하는 것이었습니다.

   ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . 'lib' . PATH_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'classes');

    require_once 'ThemeWidgets.php';
    require_once 'PHPUnit/Framework.php';

    require_once '../../library/Zend/Loader/AutoLoader.php';


    class ThemeWidgetsTest extends PHPUnit_Framework_TestCase
    {

        public function setUp() {
            Zend_Loader_Autoloader::getInstance();
        }
...
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top