PHP5 CLI Base Directory formüle için en iyi yolu?

2 Cevap php

Tamam ben bir klasör / MyProgram bulunan ve / gibi / MyProgram / lib /, / MyProgram / docs / ve benzeri gibi çeşitli klasörler vardır bir kod tabanı var ki ...

Nasıl, PHP, benim ev, benim içerir yani / MyProgram / önce herhangi bir klasör tespit ve bir taban değişken oluşturma hakkında gitmek ve en bana böyle kökü gibi bir şey MyProgram yerleştirmek için izin / baz dizin / MyProgram göreli yazılmış olabilir gerektirebilir dir, / yol / / MyProgram / ve böylece için?

Pencereler, sadece bir * nix ortamda çalışmak gerekmez. Bu, tüm komut satırı çözümleyici veya yürütülebilir komut değil.

2 Cevap

İşte ben Tam olarak ne istediğini ... bunu nasıl olduğunu! Bazıları benim Programı etrafında oynadıktan sonra anladım.

// START Directory Bootstrap
$location = dirname(__FILE__);
$rootLoc = strpos($location, "myProgram");
if($rootLoc === FALSE)
    die("WARNING! myProgram Root Directory Not Found!\n");
$root = substr($location, 0, $rootLoc);
$root .= "myProgram";
// Change Directory for working includes and requires.
chdir($root);

Başlatma komut ve sonra temel dizin bulmaya çalışır bu nerede bulur. Bu temel "MyProgram" bulamazsanız ben komut yanlış yere yerleştirilmiş ve dışarı başarısız ihtiyacı olduğunu varsayalım. Aksi takdirde MyProgram kadar her şeyi bir alt dize oluşturur, sonra sonunda MyProgram üzerinde çiviler. Nihayet biz içerir ve bu gibi gerektirir izin dizinleri değiştirmek ...

include_once("config/serverSettings.php");
require_once("config/mySQLSettings.php");

Yasal komutlar. Bu benim aradığım budur, ve ben başkalarının görmesi için upload karar sona erdi.

Ben bu yüzden gibi mevcut dosyadan göreli yollar kullanarak öneririm:

include (dirname(__FILE__).'/../includes/something.inc.php');

Bu zor etrafında değişebilir bir dizin adı kodlama olsun. Bir yararı da, bu herhangi bir sistem üzerinde çalışması gerekir.

Ayrıca buna benzer bir şey yapabilirsiniz:

 // In MyProgram/includes/config.php for instance:
 define("BASE_DIR", realpath(dirname(__FILE__).'/../..');

Ve sonra aşağıdaki kullanabilirsiniz:

 include(BASE_DIR.'/includes/class.php');

Ben kuvvetle uygulama içinde bulunduğu dizinin adını hardcoding içeren herhangi bir çözüme karşı tavsiye ediyorum