__ автозагрузка в плагине бросает ошибку в WP - не способный определить местоположение translation_entry.class.php

Хорошо, я собираюсь попытаться объяснить это максимально простое.

Я пытаюсь изменить плагин, названный smart-lencioni-image-resizer v2.0. использоваться в WP-Multisite.

Я пытаюсь отобразить изображение через SLIR использование следующего URL:

http://subsite.mainsite.no/wp-content/plugins/wp-filebrowser/slir/?w=90&h=90&c=1:1&i=http://bekkelaget.stiengenterprises.no/files/seniorsenter/DSC_3535.jpg

Я сделал это успешно в v.1.4.2. Но v2.0 использует другой метод для включения файлов. index.php файл похож на это:

function __autoload($className)
{
  var_dump($className);  
    require_once strtolower($className) . '.class.php';
}

new SLIR();

Теперь, где когда-либо я пытаюсь включать заголовок WP:

require_once($_SERVER['DOCUMENT_ROOT'].'/wp-blog-header.php');

Я получаю следующее сообщение об ошибке:

*Предупреждение: require_once (translation_entry.class.php) [function.require-после-того-как]: не удалось открыть поток: Никакой такой файл или каталог в I:\Development\wamp\www\mysite\wp-content\plugins\wp-filebrowser\slir\index.php на строке 43*

Строка 43 в index.php :

require_once strtolower($className) . '.class.php';

По некоторым причинам __autoload функция заставляет WP искать файлы в каталоге SLIR. Это имеет курс неправильно :(

ОБНОВИТЕ я нашел одно решение в сети такими работами:

function __autoload($className)
{
  if(file_exists(strtolower($className) . '.class.php')) {
    require_once strtolower($className) . '.class.php';
  }
}

Это позволяет заголовочному файлу WP быть загруженным. Но по некоторым причинам это загружается mainsite.no и отбрасывания, выполняющие URL, я добавил наверху.

Есть ли какой-либо другой способ, которым я могу решить эту проблему?

UPDATE2

В папке SLIR существует .htaccess файл. Файл похож на это:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule . index.php [L]
</IfModule>

# Prevent viewing of the error log file in its default location
<Files slir-error-log>
Order Deny,Allow
Deny from All
</Files>

Это могло быть это, когда я включаю заголовочный файл WP, это ignors .htaccess файл от SLIR?

3
08.01.2011, 14:54
3 ответа

Denis указывал на правильное направление, но просто искал, если файл существует, не целое задание.

Я делаю это примером, но необходимо сделать это для каждого файла, который не может загрузиться:

  • Класс, который не может быть автоматически загруженным, определяет местоположение его. Класс Translation_Entry и это расположено в /wp-includes/pomo/entry.php. Это - некоторая другая библиотека и не базовый класс.
  • Необходимо расширить автопогрузчик до любого соглашения со всеми случаями - или для обеспечения этого wp-load.php был включен прежде или в то время как Вы регистрируете свой автопогрузчик.
  • Ваш автопогрузчик разработан для загрузки только оснований классов на определенной схеме. И Ваш автопогрузчик является полностью несовместимым с любым другим автопогрузчиком. Вместо этого используйте spl_autoload_register() и зарегистрируйте свой автопогрузчик базового класса. Затем можно добавить другой заранее, который имеет дело с другими классами.

Я написал некоторый код кода, который не мог бы работать, он не тестируется. Вы даже не могли бы зарегистрировать несколько автопогрузчиков в конце, но всего одном (который называет различные подпрограммы вместо этого), таким образом, это - просто быстрый записанный макет:

class MyAutoloader {
    public static function bootstrap() {
        spl_autoload_register(__CLASS__.'::loaderPomo');
        spl_autoload_register(__CLASS__.'::loaderWpClasses');
    }
    public static function getWpClassFile($name) {
        return sprintf('%s.class.php', strtolower($name));
    }
    public static function isWpClass($name) {
        $file = self::getWpClassFile($name);
        return (bool) file_exists($file);
    }
    public static function require($file) {
        require $file;
    }
    // standard wordpress .class.php file loader
    public static function loaderWpClasses($name) {
        if (self::isWpClass($name) {
            $file = self::getWpClassFile($name);
            self::require($file);
        }
    }
    // [...] write any code you need to handle other cases.
    // loader for pomo classes
    public static function loaderPomo($name) {
        if (self::isPomoClass($name)) {
            $file = self::getPomoFile($name);
            self::require($file);
        }
    }
}
3
19.02.2020, 22:17

автозагрузка запущена каждый раз, когда class_exists () называют. В Вашем автопогрузчике добавьте проверку, чтобы проверить, что файл существует прежде включая его.

1
19.02.2020, 22:17
  • 1
    Как Вы видите моего обновления, я попробовал это. Это вид работ, но это повреждает плагин. –  Steven 08.01.2011, 16:56

Я получил ту же ошибку при записи моего собственного плагина. Я решил эту проблему со следующим кодом.

$strDirPath = dirname(__FILE__) . '\\classes\\';
$arrPHPfiles = array_map(create_function( '$a', 'return basename($a, ".php");' ), glob($strDirPath . '*.php'));
spl_autoload_register(
    create_function('$class_name', '
        global $arrPHPfiles, $strDirPath;
        if (in_array(strtolower($class_name), $arrPHPfiles)) 
            include($strDirPath . strtolower($class_name) . ".php");' )
);

Это проверяет необходимые файлы класса в соответствии с каталогом classes и использование включает (), только если имя класса парсинга соответствует существующим именам файлов.

0
19.02.2020, 22:17

Теги

Похожие вопросы