好的,我会尽可能简单地解释这一点。
我正在尝试修改一个名为smart-lencioni-image-resizer v2。0。用于WP Multisite。
我正在尝试使用以下URL通过SLIR显示图像:
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\');
我收到以下错误消息:
*Warning: require_once(translation_entry.class.php) [function.require-once]: failed to open stream: No such file or directory in I:\\Development\\wamp\\www\\mysite\\wp-content\\plugins\\wp-filebrowser\\slir\\index.php on line 43*
中的第43行index.php
是:
require_once strtolower($className) . \'.class.php\';
由于某种原因
__autoload
函数使WP在SLIR目录中查找文件。这当然是错误的:(
UPDATE我在网上找到了一种解决方案,这种方法很有效:
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头文件时,它忽略了。来自SLIR的htaccess文件?
SO网友:hakre
丹尼斯指出了正确的方向,但仅仅寻找文件是否存在并不是全部工作。
我通过示例来实现这一点,但您需要对每个无法加载的文件执行此操作:
无法自动加载的类,请找到它。类别为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);
}
}
}
SO网友:Teno
我在编写自己的插件时也遇到了同样的错误。我用以下代码解决了这个问题。
$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
并且仅当解析类名与现有文件名匹配时才使用include()。