Выберите правильный каталог, используя set_include_path в PHP (Amazon MWS Api).

используя файл .config.inc.php в моей библиотеке Amazon API. Когда я работал с каталогом образцов, который находится в следующем месте..

/var/www/libraries/amazonfba/FBAOutboundServiceMWS/Samples

Он использовал текущую конфигурацию в файле (которая работала нормально).

/************************************************************************ 
    * OPTIONAL ON SOME INSTALLATIONS
    *
    * Set include path to root of library, relative to Samples directory.
    * Only needed when running library from local directory.
    * If library is installed in PHP include path, this is not needed
    ***********************************************************************/   
    set_include_path(get_include_path() . PATH_SEPARATOR . '../../.');    
    
   /************************************************************************ 
    * OPTIONAL ON SOME INSTALLATIONS  
    * 
    * Autoload function is reponsible for loading classes of the library on demand
    * 
    * NOTE: Only one __autoload function is allowed by PHP per each PHP installation,
    * and this function may need to be replaced with individual require_once statements
    * in case where other framework that define an __autoload already loaded.
    * 
    * However, since this library follow common naming convention for PHP classes it
    * may be possible to simply re-use an autoload mechanism defined by other frameworks
    * (provided library is installed in the PHP include path), and so classes may just 
    * be loaded even when this function is removed
    ***********************************************************************/   
     function __autoload($className){
        $filePath = str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
        $includePaths = explode(PATH_SEPARATOR, get_include_path());
        foreach($includePaths as $includePath){
            if(file_exists($includePath . DIRECTORY_SEPARATOR . $filePath)){
                require_once $filePath;
                return;
            }
        }
    }

Теперь я не хотел хранить свой код в «образцах», думая, что это будет легко. Мой файл .config.inc.php теперь находится по адресу

/var/www/integrations

Я получаю ошибки о классах, потому что я предполагаю, что он пытается ссылаться на них в неправильном месте.

Я думаю, что это связано с этой строкой...

 set_include_path(get_include_path() . PATH_SEPARATOR . '../../.');    

Но как бы я ни изменил, что это не работает? Кто-нибудь укажет мне направление, чтобы правильно указать его на мой каталог или несколько указателей о том, как это работает? Я также заметил, что состояние комментирования будет игнорироваться на PHP, и в этом случае как я могу указать ему правильное направление?

Обновление: я попытался добавить каталог в массив следующим образом:

        $includePaths[4] ='/var/www/libraries/amazonfba';

который на var_dump дает правильное местоположение, но затем дает мне это...

Warning: require_once(FBAOutboundServiceMWS/Client.php): failed to open stream: No such file or directory in /var/www/integrations/AmazonFBA/.config.inc.php on line 78

Это потому, что эти файлы, такие как client.php, я думаю, ссылаются на набор местоположений включения. Я не могу получить мою головную боль местоположение и просто не могу сделать это правильно! Любые указатели, поэтому мой файл php + файл конфигурации (в той же папке) могут быть в отдельной папке для библиотеки, это будет туз!


person Matt The Ninja    schedule 03.03.2014    source источник


Ответы (1)


Путь, указанный для '../../.', выглядит как относительный путь относительно каталога Samples. Если вы переместите код, этот относительный путь также должен измениться соответствующим образом.

В своем PHP-коде вы можете добавить библиотеку в путь включения PHP как описано здесь, чтобы сделать ее видимой.

Кроме того, убедитесь, что вы включили src/MarketplaceWebService/Client.php в свой файл PHP.

person Cosmo Harrigan    schedule 08.03.2014
comment
Конечно, но что именно делает '../../.' иметь в виду? Я знаю, что могу указать путь включения, и я пытался с ним поиграть - не очень повезло, могу ли я жестко запрограммировать каталог для этого? Можете ли вы предоставить примеры кода? - person Matt The Ninja; 08.03.2014
comment
'../../.' означает две папки над текущей папкой, которая была задана в контексте структуры папок для образца. Можете ли вы попробовать использовать полный путь? - person Cosmo Harrigan; 08.03.2014
comment
Могу ли я просто var_dumped 'get_include_path' до и после этого изменения и получить следующие результаты. строка(13) .;C:\php\pear строка(21) .;C:\php\pear;../../. - person Matt The Ninja; 08.03.2014
comment
Почему это относится к c php pear? это временное местоположение, в котором хранится мой php-код? - person Matt The Ninja; 08.03.2014
comment
Я не уверен в этом. Вы уже пытались указать полный путь и файл Client.php? - person Cosmo Harrigan; 08.03.2014