jobo: Codeausschnittverständnis in Fuel/Kohana-Framework

Hallo,

aus der index.php bei Fuel-Framework:

  
// Use an anonymous function to keep the global namespace clean  
call_user_func(function() {  
  
	/**  
	 * Set all the paths here  
	 */  
	$app_path		= '../fuel/app/';  
	$package_path	= '../fuel/packages/';  
	$core_path		= '../fuel/core/';  
  
  
	/**  
	 * Website docroot  
	 */  
	define('DOCROOT', __DIR__.DIRECTORY_SEPARATOR);  
  
	( ! is_dir($app_path) and is_dir(DOCROOT.$app_path)) and $app_path = DOCROOT.$app_path;  
	( ! is_dir($core_path) and is_dir(DOCROOT.$core_path)) and $core_path = DOCROOT.$core_path;  
	( ! is_dir($package_path) and is_dir(DOCROOT.$package_path)) and $package_path = DOCROOT.$package_path;  
  
	define('APPPATH', realpath($app_path).DIRECTORY_SEPARATOR);  
	define('PKGPATH', realpath($package_path).DIRECTORY_SEPARATOR);  
	define('COREPATH', realpath($core_path).DIRECTORY_SEPARATOR);  
  
});  

Nicht ganz klar ist mir die Zeile:

  
( ! is_dir($app_path) and is_dir(DOCROOT.$app_path)) and $app_path = DOCROOT.$app_path;  

  
Bei Kohana steht da stattdessen:  
  
056	// Set the full path to the docroot  
057	define('DOCROOT', realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR);  
058	  
059	// Make the application relative to the docroot  
060	if ( ! is_dir($application) AND is_dir(DOCROOT.$application))  
061	    $application = DOCROOT.$application;  

Es soll ja der Pfad deklariert werden. Wenn der angegebene Pfad kein Verzeichnis ist aber die Kombination DOCROOT (absoluter Pfad plus Verzeichnistrennzeichen) mit dem Pfad ein Verzeichnis ist, dann setze den absoluten Pfad. Was aber wenn beides nicht zutrifft? Und wie kann es sein, dass der Pfad zwar relativ nicht stimmt aber absolut schon, wo zur absoluten Pfadbestimmung doch die Position des Scriptes selbst herangezogen wird? Irgendein Groschen klemmt da bei mir.

Gruß

jobo

  1. Hi,

    Nicht ganz klar ist mir die Zeile:

    ( ! is_dir($app_path) and is_dir(DOCROOT.$app_path)) and $app_path = DOCROOT.$app_path;

      
    Wenn $app\_path kein existierendes Verzeichnis ist, mit DOCROOT davor gesetzt aber schon - dann wird $app\_path auf DOCROOT.$app\_path gesetzt.  
      
    Die Verknüpfung mit and sorgt dafür, dass abgebrochen wird, sobald die erste Bedingung erfüllt ist (ausgewertet wird von links).  
    Ist also $app\_path bereits ein existierendes Verzeichnis, dann wird der Rest nicht mehr ausgewertet - und damit insb. $app\_path auch nicht überschrieben.  
      
    
    > Es soll ja der Pfad deklariert werden. Wenn der angegebene Pfad kein Verzeichnis ist aber die Kombination DOCROOT (absoluter Pfad plus Verzeichnistrennzeichen) mit dem Pfad ein Verzeichnis ist, dann setze den absoluten Pfad. Was aber wenn beides nicht zutrifft?  
      
    Dann wird's im weiteren Scriptverlauf vermutlich irgendwann hübsch krachen.  
      
    
    > Und wie kann es sein, dass der Pfad zwar relativ nicht stimmt aber absolut schon, wo zur absoluten Pfadbestimmung doch die Position des Scriptes selbst herangezogen wird?  
      
    \_\_FILE\_\_ muss nicht die eigentliche „Haupt“-Scriptdatei sein; innerhalb eines includes enthält es dessen Pfad/Namen.  
      
    MfG ChrisB  
      
    
    -- 
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    
    1. Hallo,

      Hi,

      Nicht ganz klar ist mir die Zeile:

      ( ! is_dir($app_path) and is_dir(DOCROOT.$app_path)) and $app_path = DOCROOT.$app_path;

      
      >   
      > Wenn $app\_path kein existierendes Verzeichnis ist, mit DOCROOT davor gesetzt aber schon - dann wird $app\_path auf DOCROOT.$app\_path gesetzt.  
      >   
      > Die Verknüpfung mit and sorgt dafür, dass abgebrochen wird, sobald die erste Bedingung erfüllt ist (ausgewertet wird von links).  
        
                     ^^^^  
        
      ich hätte jetzt gedacht NICHT erfüllt ist.  
        
      
      > Ist also $app\_path bereits ein existierendes Verzeichnis, dann wird der Rest nicht mehr ausgewertet - und damit insb. $app\_path auch nicht überschrieben.  
        
      Es heißt also: wenn der Pfad nicht stimmt, bau ihn neu zusammen im Verhältnis zum eventuell includierten (NICHT inkludiereden) Script (\_\_DIR\_\_).  
        
        
      
      > > Es soll ja der Pfad deklariert werden. Wenn der angegebene Pfad kein Verzeichnis ist aber die Kombination DOCROOT (absoluter Pfad plus Verzeichnistrennzeichen) mit dem Pfad ein Verzeichnis ist, dann setze den absoluten Pfad. Was aber wenn beides nicht zutrifft?  
      >   
      > Dann wird's im weiteren Scriptverlauf vermutlich irgendwann hübsch krachen.  
        
      "Fatal error: require\_once(): Failed opening required '\bootstrap.php' (include\_path='.;D:\xampplite\php\PEAR') in C:\Users\rob\Desktop\fuel-1.0-rc2.1\fuel-1.0-rc2.1\public\index.php on line 39"  
        
      Muss es dann aber nicht heißen:  
        
      ~~~php
        
      if (! is_dir($app_path)) {  
      	if ( ! is_dir($app_path = DOCROOT . $app_path ) ){  
      		throw new Exception("Application Path not correct - Script Termination at line " . __LINE__ );  
      	}  
      }  
      
      

      Gruß

      jobo

      1. Hallo,

        "Fatal error: require_once(): Failed opening required '\bootstrap.php' (include_path='.;D:\xampplite\php\PEAR') in C:\Users\rob\Desktop\fuel-1.0-rc2.1\fuel-1.0-rc2.1\public\index.php on line 39"

        Muss es dann aber nicht heißen:

        if (! is_dir($app_path)) {
        if ( ! is_dir($app_path = DOCROOT . $app_path ) ){
        throw new Exception("Application Path not correct - Script Termination at line " . LINE );
        }
        }

          
          
        was bei CodeIgniter ja gemacht wird:  
          
        ~~~php
          
        	// The path to the "application" folder  
        	if (is_dir($application_folder))  
        	{  
        		define('APPPATH', $application_folder.'/');  
        	}  
        	else  
        	{  
        		if ( ! is_dir(BASEPATH.$application_folder.'/'))  
        		{  
        			exit("Your application folder path does not appear to be set correctly. Please open the following file and correct this: ".SELF);  
        		}  
          
        		define('APPPATH', BASEPATH.$application_folder.'/');  
        	}  
        
        

        allerdings mit ."/" statt . DIRECTORY_SEPARATOR;

        Gruß

        jobo

      2. Hi,

        Die Verknüpfung mit and sorgt dafür, dass abgebrochen wird, sobald die erste Bedingung erfüllt ist (ausgewertet wird von links).

        ^^^^

        ich hätte jetzt gedacht NICHT erfüllt ist.

        Ja, logisch - meinte ich doch auch :-)

        Damit ein Ausdruck aus mit and verknüpften Teilausdrücken wahr ist, müssen alle Teilausdrücke wahr sein - also kann beim ersten falschen abgebrochen werden.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?