PHP garip davranışlar içerir?

6 Cevap php

Nedense eğer i inlcude() include() çağrı dosyası dosya çalışır, ya da, nereye derin dosya yapısında bir dosya i aynı düzeyde bir dosyayı eklerseniz.

I gitmeye çalışırsanız include('../backFile.php') hiçbir dosya yoktu söylüyor?

Herhangi bir yardım: (

6 Cevap

Sen belki de geçerli dizindeki dayandırarak denemelisiniz:

include(getcwd() . '../backFile.php');

Senin durumun kesin ne tam olarak emin değilim. Işlerini kapsayacak emin olmak için basit bir düzeltme muhtemelen vardır. Bu düzeltme muhtemelen başka bir cevap verilecektir.

Bunun yerine, sana bir best-practice (Evet, belki değil, 'iyi', ama iyi bir uygulama) sunmak için gidiyorum:

İlk dosyada arayın veya yapılandırma dosyası, dosyaları içeri bulunan ilk dizin yolunu bir sabit tanımlamak

Yani çalışıyorsanız /home/user/domains/test.com/:

DEFINE('SITE_PATH', '/home/user/domains/test.com/');

Eğer bir şey de zaman sonra, bir başlangıç ​​yeri olarak kullanmak

include(SITE_PATH . "lib/test.class.php");

Bu PHP dosyanın tam yolunu kullanır ve nispeten dosyayı dahil endişelenmenize gerek yok emin olacaktır.

Eğer her şey dahil bir dosyayı taşıdığınızda içerir değiştirmek zorunda değilsiniz gibi, dosyaların konumları değişiyor bu çok yararlıdır.

Diğerleri, örneğin i realpath herşey ... ne dedi ek olarak:

include(realpath(dirname(__FILE__).'/../myFile.php'));

Bu deneyin:

include('./../backFile.php');

include . Varsayılan (mevcut yürütme yazısıdır dizin) tarafından PHP'nin include_path direktifi bağlıdır.

ini_set veya set_include_path kendi include_path ayarlamak için kullanın.

Sana include için parametresinde (mutlak veya göreceli) bir yol belirtirseniz, genellikle {olduğu, bu yol dahil sistemi kullanmak değil, bunun yerine yol relative to the "main" file giderir [(2)]} çeşit.

Örneğin, üç dosya var, /www/index.php ettik:

<?php
include('libs/init.php');

/www/test.php:

I was included!    

ve /www/libs/init.php:

<?php
include('../test.php');

include('../test.php') çağrı /www/test.php aslında sensin /www, bu nedenle yerine index.php 's dizini bağlamı kullanarak çözülecek eklemek için çalışıyorum /test.php.

Dürüst olmak gerekirse, ben bu şekilde çalışır neden hiçbir fikrim yok. Benim libs/init.php bunu şöyle çözer:

define('DIR_ROOT', str_replace('\\', '/', dirname(dirname(__FILE__))));

Ve sonra onunla tüm yolları Önlerine. str_replace çağrı daha sorunsuz Windows yolları ele almaktır.