çiftleşmiş ile require_once sorun

4 Cevap php

MVC yeni Im ve ben bir sürü kod yeniden yapıyorum.

Ben var master.php (indeks) var:

<?php require_once("header.php"); ?>

Her iki master.php ve header.php ben aşağıdaki hatayı alıyorum ama aynı klasörde:

Uyarı: require_once (1) [function.require-once]: 15 hattı üzerinde / Users / Kimimben / Siteler / Sitem / Views / master.php Böyle bir dosya ya da dizin: failed to open stream

Ölümcül hata: require_once () [function.require]: Başarısız açılış gerekli '1 '(include_pathdaki =':. ') In / 15 hattı üzerinde Users / Kimimben / Siteler / Sitem / Views / master.php

Bu daha önce olmadı. (Dosyalar kök klasördeki tüm idi). Ben onlar aynı klasörde olduğundan sorun olsa ne olduğunu göremiyorum - Ben geri gitmek zorunda '../' veya başka klasörleri başvuru yok. Ben burada ne eksik?

Teşekkürler.

4 Cevap

Yorumunuzda size kodu olduğunu söylüyorlar:

<?php require_once("header.php") or die; ?>

"ya da öl" dışında bırakarak deneyin -> dosya bulunamadı değilse Require_once bir ölümcül hatayı tetikler çünkü ist, gerekli değildir.

Edit: I tested it, leave out the "or die" and it will work.

Edit 2: Explanation why this happened: The above code can also be written like this:

require_once ( ("header.php") or die() );

Require_once bir fonksiyon, ancak php bir açıklama değil, çünkü parantez php dize "header.php" boolean "true" değerlendirilen alır bir boolean ifadesi olarak yukarıdaki yorumlar, isteğe bağlıdır. Gerçek ("1" ile sonuçlanan) bir dizeye döküm alır ve bu dize kez gerektiren geri iletilir.

Yani yukarıdaki kodu olarak yorumlanır alır

require_once("1")

İşte adım adım yorumlanır alır nasıl:

(("header.php") or die()) = (TRUE or die())
(TRUE or die()) = TRUE 
(string) TRUE = '1';

Bu yardımcı olur umarım ;)

PHP kök klasöründe 'header.php' arıyor başlar ve onu bulamıyorum. Bu betik ile aynı dizinde ise, yerine sihirli sabit kullanmanız gerekir __DIR__ :

<?php require_once __DIR__ . '/header.php'; ?>

master.php dahil veya another script file that is not in the same directory header.php olarak tarafından gerekli ediliyor çünkü olabilir. Yani endeksi ziyaret ettiğinizde, hangi dosya ayrıştırıldı / çağrılan ediliyor biliyor musunuz, nedir?

Için de geçerlidir include() için documentation bir göz, atın require():

Files for including are first looked for in each include_path entry relative to the current working directory, and then in the directory of current script. E.g. if your include_path is libraries, current working directory is /www/, you included include/a.php and there is include "b.php" in that file, b.php is first looked in /www/libraries/ and then in /www/include/

Update

Bazı yorumlar çözmek için: I (dahil söylemedim) CWD değiştirmek istiyorsunuz. Ben CWD hem ana / header.php bulunan biri değilse, bu sorun olabilir diyorum.

Örneğin, master.php ve header.php farklı bir klasöre index.php söylüyorlar; bu içerir ya da master.php bunun için uygun bir yol kullanılarak gerektirir. Şimdi, master.php deyimi vardır:

<?php require_once("header.php"); ?>

Ancak bu noktada does not contain header.php CWD de, CWD tarihi index.php olmasıdır.

Bunu düzeltmek için, master.php den header.php, DEĞİL yolu betik CWD'sindeki gelen uygun yolu ile require_once aramak gerekir.

Bu gibi hat 15 olması gerekir:

<?php (require_once("header.php")) veya die(); ?>

Ancak header.php ölümcül olan ihtiyaç olmadığı zaman o zamandan beri sahip olmalıdır:

<?php (include_once("header.php")) veya die(); ?>

veya

<?php require_once("header.php"); ?>