Saya memiliki struktur berikut
otsg
> class
> authentication.php
> database.php
> user.php
> include
> config.inc.php
> encryption.php
> include.php
> session.php
> index.php
> registration.php
file include.php memiliki yang berikut ini
ini_set('display_errors', 1);
error_reporting(E_ALL);
ini_set('include_path',ini_get('include_path').':/Applications/MAMP/htdocs/otsg/:');
require_once 'config.inc.php';
require_once '../class/database.php';
require_once '../class/user.php';
require_once 'encryption.php';
require_once 'session.php';
require_once '../class/authentication.php';
dan di halaman index.php telah saya sertakan
require_once 'include/include.php';
Ketika saya membuka halaman index.php saya mendapatkan peringatan berikut dan kesalahan fatal. Saya tidak mengerti apa yang menyebabkan kesalahan ini. Ketika saya memberikan jalur absolut, itu berhasil. Tapi jalan absolut bukanlah ide yang bagus, saya percaya.
Warning: require_once(../class/database.php) [function.require-once]: failed to open stream: No such file or directory in /Applications/MAMP/htdocs/otsg/include/include.php on line 9
Fatal error: require_once() [function.require]: Failed opening required '../class/database.php' (include_path='.:/Applications/MAMP/bin/php5.3/lib/php:/Applications/MAMP/htdocs/otsg/include/:') in /Applications/MAMP/htdocs/otsg/include/include.php on line 9
Terima kasih sebelumnya
php
warnings
fatal-error
require-once
pengguna525146
sumber
sumber
Jawaban:
Menggunakan
untuk mendapatkan jalur skrip saat ini dan ini akan memperbaiki masalah Anda.
Begitu:
Ini akan mencegah kasus di mana Anda dapat menjalankan skrip PHP dari folder yang berbeda dan oleh karena itu jalur kerabat tidak akan berfungsi.
Edit: masalah garis miring diperbaiki
sumber
__DIR__
baru di PHP 5.3. Jika Anda membutuhkan skrip ini untuk dijalankan pada versi PHP sebelumnya, Anda harus menggunakandirname(__FILE__)
.__DIR__
. Jadi:require_once(__DIR__.'/../class/user.php');
Sesuai dokumentasi , garis miring di akhir dihilangkan kecuali untuk direktori root.__DIR__
perlu. Dokumen PHP tampaknya mengatakan bahwa PHP akan mencari direktori skrip saat ini secara default. Adakah yang bisa menjelaskan?require "../a.php"
. Jika file ini diimpor dari file lain (x)dir1/dir2/x.php
maka file yang akan disertakandir1/a.php
, tetapi jika x adadir1/dir2/dir3/x.php
, file yang disertakan akandir1/dir2/a.php
, dll. Ataukah saya salah?untuk php versi 5.2.17
__DIR__
tidak akan bekerja itu hanya akan bekerja dengan php 5.3Tapi untuk versi php yang lebih lama
dirname(__FILE__)
dengan sempurnaMisalnya tulis seperti ini
sumber
Dalam kasus saya itu tidak berfungsi, bahkan dengan
__DIR__
ataugetcwd()
terus memilih jalur yang salah, saya menyelesaikannya dengan menentukan costant di setiap file yang saya butuhkan dengan jalur dasar absolut proyek:Saya memiliki MAMP dengan php 5.4.10 dan hierarki folder saya adalah basilar:
....
sumber
Saya baru saja menemukan masalah yang sama ini, di mana semuanya berfungsi dengan baik, sampai saya memiliki masukan di bagian lain.
Solusi 1. (hardcode yang tidak diinginkan dari nama folder html publik saya, tetapi berhasil):
Solusi 2. (komentar yang tidak diinginkan di atas tentang DIR hanya berfungsi sejak php 5.3, tetapi berhasil):
Solusi 3. (Saya tidak dapat melihat kerugian apa pun, dan ini berfungsi dengan sempurna di php 5.3 saya):
sumber