On Tue, Aug 11, 2009 at 10:59 AM, dan nessett<dness...@yahoo.com> wrote:
> --- On Mon, 8/10/09, Tim Starling <tstarl...@wikimedia.org> wrote:
>
>> No, the reason is because LocalSettings.php is in the
>> directory
>> pointed to by $IP, so you have to work out what $IP is
>> before you can
>> include it.
>>
>> Web entry points need to locate WebStart.php, and command
>> line scripts
>> need to locate maintenance/commandLine.inc. Then either of
>> those two
>> entry scripts can locate the rest of MediaWiki.
>
> Fair enough, but consider the following.
>
> I did a global search over the phase3 directory and got these hits for the 
> string "$IP =" :
>
> .../phase3/config/index.php:30:  $IP = dirname( dirname( __FILE__ ) );
> .../phase3/config/index.php:1876:       \$IP = MW_INSTALL_PATH;
> .../phase3/config/index.php:1878:       \$IP = dirname( __FILE__ );
> .../phase3/includes/WebStart.php:61:  $IP = getenv( 'MW_INSTALL_PATH' );
> .../phase3/includes/WebStart.php:63:    $IP = realpath( '.' );
> .../phase3/js2/mwEmbed/php/noMediaWikiConfig.php:11:  $IP = 
> realpath(dirname(__FILE__).'/../');
> .../phase3/LocalSettings.php:17:        $IP = MW_INSTALL_PATH;
> .../phase3/LocalSettings.php:19:        $IP = dirname( __FILE__ );
> .../phase3/maintenance/language/validate.php:16:  $IP = dirname( __FILE__ ) . 
> '/../..';
> .../phase3/maintenance/Maintenance.php:336:             $IP = strval( 
> getenv('MW_INSTALL_PATH') ) !== ''
>
> So, it appears that $IP computation is occurring in 6 files. In addition, $IP 
> is adjusted by the relative place of the file in the MW source tree (e.g., in 
> validate.php, $IP is set to dirname( __FILE__ ) . '/../..';) Adjusting paths 
> according to where a file exists in a source tree is fraught with danger. If 
> you ever move the file for some reason, the code breaks.
>
> Why not isolate at least $IP computation in a single function? (Perhaps 
> breaking up LocalSettings.php into two parts is overkill, but certainly 
> cleaning up $IP computation isn't too radical an idea.) Of course, there is 
> the problem of locating the file of the function that does this. One approach 
> is to recognize that php.ini already requires potential modification for MW 
> use. Specifically, the path to PEAR must occur in 'include_path'. It would be 
> a simple matter to add another search directory for locating the 
> initialization code.
>
> Or maybe there is a better way of locating MW initialization code. How its 
> done is an open issue. I am simply arguing that computing the value of $IP by 
> relying on the position of the php file in a source tree is not good software 
> architecture. Experience shows that this kind of thing almost always leads to 
> bugs.
>
>
>
>
> _______________________________________________
> Wikitech-l mailing list
> Wikitech-l@lists.wikimedia.org
> https://lists.wikimedia.org/mailman/listinfo/wikitech-l
>

The problem with "putting it in a single function" is you still have
to find where that function is to begin with (I'd assume either
GlobalFunctions or install-utils would define this). At which point
you're back to the original problem: defining $IP yourself so you
can find this.

Yes, we should probably do this all a little more cleanly (at least
one unified style would be nice), but constructing it manually is
pretty much a given for anything trying to find an entry point, as
Tim points out.

-Chad

_______________________________________________
Wikitech-l mailing list
Wikitech-l@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/wikitech-l

Reply via email to