PHP ayarlamak için doğru yolu * Nix ve Windows için yolu dahil

3 Cevap php

Bu doğru define yolu bir yolu için include both *nix and Windows?

define( 'INCPATH', realpath( dirname( __FILE__ ) ) . '/' );

Yukarıda dahil sondaki eğik çizgi unutmayın. Için ileri eğik çizgi / hem de OS yıllardan için aynı gerektirir, hem de içerir?

EDIT (UPDATED WITH ANSWER):

Ben kimden ne toplayabilir, aşağıda benim kod evrensel * nix ve Windows işletim sistemleri her ikisi için bir ihtiyaç / include yolunu tanımlamak için uygun bir yoldur. Aşağıdaki yorumların şey düzeltmek için çekinmeyin.

Beni karıştı şey forward-slashes(/) içine back-slashes (\) değiştirilmesini gösteren gördüğümüz birçok örnek vardı. Aşağıda bazı yanıtları dayanarak, bu gereksizdir.

Yani (purist için) nihai doğru kod:

define( 'INCPATH', realpath( dirname( __FILE__ ) ) . DIRECTORY_SEPARATOR );

Bu kod aşağıdaki sonuçlar üretir:

*nix: /path/to/the/file/

Windows: C:\Path To\the\file\

Kısa bir açıklaması, içeriden yolumuza çalışma (__FILE__) üzerinden (realpath()):

FILE tam yolu ve dosya ismi. Her zaman sembolik bağları çözümlenmiş mutlak bir yolunu içerir.

dirname() döndürülen dize kaldırıldı sonlayan / bileşeni path olduğunu. Dosya çıkarmadan sorumludur.

realpath() başarı canonicalized (normalize / standardize) mutlak yoludur döndürür. Çıkan yol yok sembolik bağ, '/./' veya '/../' bileşenleri olacaktır. I __FILE__ zaten sembolik giderir, çünkü bu titizlik dahil varsayalım. Ya da belki de göreli yolları çözmek için dahil? Her iki durumda da, bu amacımızı katılaşmaya görünüyor.

3 Cevap

Öne doğru eğik, OS yıllardan için çalışacak, ve gitmek için yoludur.

Ben bu mutlak bir başvuru bulamadık, ama here ve here gibi PHP kılavuzunda çeşitli yerlerde, belirtilen bulunuyor. Ve, bir Windows &, benim için çalışıyor Linux kullanıcısı.

Son olarak, Windows üzerinde karışık yolları belirtirken sona erebilir gibi c:\\apache\\htdocs\\myapp/index.php, and that all works fine.

Alternatif olarak size OS özgü dizin sınırlayıcı verecek olan, PHP'nin önceden tanımlanmış sabiti DIRECTORY_SEPARATOR kullanabilirsiniz. Ayrıca http://www.php.net/manual/en/dir.constants.php bakın.

Birçok insan için sürpriz, / Windows ve MSDOS üzerinde çalışıyor. Pathnames içinde, OpenVMS bile çalışır.

Eğer yollar için PHP içinde bir şeyler yapıyor Ancak, bir dizi bir dize daha uygun bir yapı olacaktır.

$MYPATH = array ('.', '/usr/lib/', '/usr/share/lib');