[Solar-talk] Error with Solar 0.28 and Text_Wiki 0.1.0

Andreas Ravnestad andreas.ravnestad at gmail.com
Sun Aug 26 18:09:19 CDT 2007


Paul M Jones wrote:
>
> On Aug 26, 2007, at 10:08 AM, Andreas Ravnestad wrote:
>
>> Paul M Jones wrote:
>>> On Aug 26, 2007, at 9:52 AM, Andreas Ravnestad wrote:
>>>
>>>> Rodrigo Moraes wrote:
>>>>> On 8/22/07, Andreas Ravnestad wrote:
>>>>>
>>>>>> Now, Solar is looking for a file "Text\Wiki\Parse\Prefilter.php" 
>>>>>> which
>>>>>> doesn't exist. However, there is a class named
>>>>>> Text_Wiki_Parse_Prefilter, but it resides in
>>>>>> "Text\Wiki\Parse\Default\Prefilter.php" (difference being the 
>>>>>> Default
>>>>>> folder). As far as I can tell, this used to work with Solar 0.27. 
>>>>>> Any
>>>>>> ideas how to fix?
>>>>>>
>>>>
>>>> This problem is still persistent and is plaguing one of my 
>>>> production servers. I currently must choose between downgrading to 
>>>> solar 0.27 (and rolling back *alot* of code), and displaying flat 
>>>> wiki text (no formatting). Paul, it would be really nice if you 
>>>> could take a look at this --  I will be very happy to help out in 
>>>> any way I can!
>>>
>>> Will do so today -- need to install Text_Wiki and the MediaWiki 
>>> parse/render set, yes?
>>>
>>
>> Great! Yes, those are the packages I am using :) You are likely to 
>> see that a test case will work fine in "vanilla" PHP (no Solar), but 
>> will fail with the error detailed earlier when running a test case on 
>> top of Solar.
>
> Test code is this:
>
>     <?php
>     error_reporting(E_ALL|E_STRICT);
>     ini_set('display_errors', true);
>     set_include_path('/path/to/pear');
>
>     // include 'Solar.php';
>
>     include 'Text/Wiki/Mediawiki.php';
>
>     $wiki = new Text_Wiki_Mediawiki();
>     $text = "\n== Title ==\n\nHi there!\n";
>     $html = $wiki->transform($text);
>
>     var_dump($html);
>
> It works (albeit with lots of E_STRICT notices) when you set the path 
> to PEAR and leave the Solar include line commented out.  The text is 
> converted to HTML with H2 and a paragraph markup.
>
>
> The Problem
> -----------
>
> The code fails when you un-comment the Solar include line, throwing 
> this exception:
>
>     Fatal error: Uncaught exception 'Solar_Exception_FileNotReadable'
>     class::code 'Solar::ERR_FILE_NOT_READABLE'
>     with message 'File does not exist or is not readable'
>     information array (
>       'file' => 'Text/Wiki/Parse/Prefilter.php',
>     )
>     Stack trace:
>       #0 /Users/pmjones/Sites/dev/solar/trunk/Solar.php(895):
>          Solar::factory('Solar_Exception...', Array)
>       #1 /Users/pmjones/Sites/dev/solar/trunk/Solar.php(481):
>          Solar::exception('Solar', 'ERR_FILE_NOT_RE...', 'File does 
> not e...', Array)
>       #2 /Users/pmjones/Sites/dev/solar/trunk/Solar.php(397):
>          Solar::run('Text/Wiki/Parse...')
>       #3 [internal function]: Solar::loadClass('Text_Wiki_Parse...')
>       #4 [internal function]: spl_autoload_call('Text_Wiki_Parse...')
>       #5 /Users/pmjones/pear/php/Text/Wiki.php(1317): 
> class_exists('Text_Wiki_Parse...')
>       #6 /Users/pmjones/pear/php/Text/Wiki.php(952): 
> Text_Wiki->loadParseObj('Prefilter')
>       #7 /Users/pmjones/pear/php/Text/Wiki.php(917): 
> Text_Wiki->parse('?== Title ==??H...')
>       #8 
> /Users/pmjones/Sites/pmjones.dnsalias.net/test/test-wiki.php(11):
>          Te in /Users/pmjones/Sites/dev/solar/trunk/Solar.php on line 605
>
> So the problem is with class_exists($class) in Text/Wiki.php on line 
> 1317.  As noted earlier, it is related to spl_autoload().
>
>
> The Fix
> -------
>
> Change line 1317 to "class_exists($class, false)" ... the second 
> "false" param tells it not to use autoload.  Do that, and the test 
> code works, so it should work on your production machines as well.
>
> FYI, the full list of class_exists() calls for the whole Text_Wiki 
> project is (line numbers) 472, 474, 1317, 1354, 1388, 1526.  These 
> other lines did not cause exceptions, but they might in the future, so 
> you may want to apply the "false" param fix on them as well.
>
> I will continue researching a bit and see why it's not finding the 
> Prefilter rule.
>
> Hope this helps, please let me know if it does not.
>


Yep, that fixes it, and I'm not seeing any other exceptions after doing 
a quick crawl :) Thanks a bunch, you saved the day! Maybe the current 
Text_Wiki maintainer is interested in fixing this permanently?

-Andreas


More information about the Solar-talk mailing list