【问题标题】:jimport not working in Joomla 1.5jimport 在 Joomla 1.5 中不起作用
【发布时间】:2011-04-21 18:29:48
【问题描述】:

我已经在 J​​oomla 1.5 中下载了一些 openId 的示例代码。我正在学习这个 Joomla 的东西并重新学习一些 PHP 的东西。所以我对整个内容管理器世界基本上是非常陌生的。我正在尝试使用 openid 制作一个用于身份验证的小插件,但这似乎是错误的。

我在eclipse中成功调试了项目,发现错误来自我的jimport。

class plgAuthenticationOpenId extends JPlugin{
    /**
     * OpenId Atributes.
     */
    private static $attribute;

    private static $proxyHost;
    private static $proxyPort;
    private static $proxyUser;
    private static $proxyPassword;
    private static $appId;
    private static $appPassword;


function plgAuthenticationOpenId(& $subject, $config){
        parent::__construct($subject, $config);


         plgAuthenticationOpenId::$appId=$this->params->get('userKey', '');
         plgAuthenticationOpenId::$appPassword = $this->params->get('apiKey', '');

        define('Auth_OpenID_RAND_SOURCE', null);

        jimport('openid.consumer'); 
        jimport('openid.Auth.OpenID.AX');

        //Basic Attributes
        plgAuthenticationOpenId::$attribute = array();

        //more code messing with plgAuthenticationOpenId [...]

我试图将库放在 php 包含路径中,将它放在 PEAR 路径中,我尝试了 required_once(它在那里而不是在 jimport 中刹车),我试图 jimport 整个路径并尝试直接使用包含。我还定义了目录分隔符和 JPATH_BASE。似乎没有任何效果。

我认为这应该有一个非常简单的解决方案,因为我已经复制/粘贴了代码(不是我自己创建的)并且是一个简单的 jimport。但是,尽管如此,我还是新手并且卡住了。所以请帮忙。

非常感谢。

【问题讨论】:

    标签: php joomla joomla1.5


    【解决方案1】:

    问题是jimport('openid.consumer'); 改变了include_path

    这是一个证明它的测试。

    <?php
    // I executed code below in the view to obtain output
    var_dump(ini_get('include_path'));
    jimport('openid.consumer');
    jimport('openid.Auth.OpenID.AX');
    var_dump(ini_get('include_path'));
    
    // OUTPUT
    string '.:/opt/lampp/lib/php' (length=20)
    string '/opt/lampp/htdocs/promark_eblaster/libraries/openid/.:/opt/lampp/lib/php' (length=72)
    ?>
    

    如您所见,include_path 已更改。

    您可以尝试以下解决方法。

    <?php 
    // Remember the Original Path
    $oldPath = ini_get('include_path');
    
    // Include OpenID Stuff
    jimport('openid.consumer');
    jimport('openid.Auth.OpenID.AX');
    
    // Set back the include_path so Joomla can import files with old include path
    ini_set('include_path', $oldPath);
    
    // Check if Success
    JFactory::getApplication()->enqueueMessage("Hellow World");
    
    // The rest of your code...
    ?>
    

    【讨论】:

    • 感谢您的回复。但是我看不到如何更改代码以使其正常工作。我已经输出了 include_path(它在我的 xampp 中的 php/PEAR 中),我已经在我的 php.ini 中将它更改为项目的 Joomla 库文件夹。我已将 openid 文件夹复制/粘贴到 PEAR 路径,它位于我的 Joomla 库文件夹中。两者都不起作用。谢谢你的帮助! :)
    • 在第一次包含路径更改后,因为jimport('openid.cunsumer') 这对 Joomla 不利。解决方案很简单,在jimport('openid.consumer');jimport('openid.Auth.OpenID.AX'); 之后将包含路径更改为旧路径。基本上重复使用我发布的代码。
    • 我必须道歉。我没有正确解释自己。我的问题是,当它执行指令 jimport('openid.consumer') 时,代码会中断。它不会改变我的 include_path,因为它在该指令之后根本没有做任何事情。
    • 真的很奇怪。我测试了这段代码,在jimport('openid.******') 常规jimport('joomla.***') 崩溃后出现许多无法打开流错误。包括 openid 改变你的路径,看libraries/openid/consumer.php。尝试按照我在解决方法中建议的方式包装 jimport('openid.***'),它对我有用...如果由于某种原因它不起作用,请尝试将 jimport 移出类(有和没有 include_path 解决方法)跨度>
    • 所以我又调试了一点,我的错,应该先做这个,然后找到了一个很长的路。首先,我查看 consuer.php 女巫将我引导到 Consumer.php(在 required_once 指令中),这样我已经经历了 OpenId、PlainHTTPFetcher、HTTPFetcher,最后是 BigMath.php,我有这个小 if (@dl( $module . "." . PHP_SHLIB_SUFFIX)) (第 383 行)。
    猜你喜欢
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多