[email protected]:~/php$ ls
a.php data include
[email protected]:~/php$ tree
.
├── a.php
├── data
│ └── d.php
└── include
├── b.php
└── c.php
2 directories, 4 files
[email protected]:~/php$ cat a.php
a.php is including include/b.php ...
<?php include "include/b.php" ?>
[email protected]:~/php$ cat include/b.php
b.php is including c.php and ../data/d.php ...
<?php include "c.php" ?>
<?php include "../data/d.php" ?>
[email protected]:~/php$ cat include/c.php
c.php
[email protected]:~/php$ cat data/d.php
d.php
[email protected]:~/php$ php a.php
a.php is including include/b.php ...
b.php is including c.php and ../data/d.php ...
c.php
PHP Warning: include(../data/d.php): failed to open stream: No
such file or directory in /home/disc/php/include/b.php on line 3
PHP Warning: include(): Failed opening '../data/d.php' for
inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /home/
disc/php/include/b.php on line 3
[email protected]:~/php$
なぜinclude "c.php"
は成功しますが、include "../data/d.php"
は失敗しますか?このPHP相対インクルードが失敗するのはなぜですか?
http://www.php.net/manual/en/function.include.phpは言及:「パス が定義されている場合は - 絶対かどうか( Windows上のドライブ文字または\で始まる、または/ UNIX/Linuxシステム上で)、または現在の ディレクトリからの相対(で始まりますか。 。) - のinclude_pathは全く を無視されるファイル名が../で始まる場合たとえば、パーサ は、要求されたファイルを見つけるために、親ディレクトリになります」何の
親ディレクトリを。。?
をしかしでc.phpではありませんカレントディレクトリ。現在のディレクトリは '/ disc/php'です.c.phpは'/disc/php/include'にあります。 –
私の質問では、a.phpが呼び出され、すべてのパスがa.phpに相対的なスクリプトになりますか? –
c.phpはインクルードファイルを呼び出すファイルのカレントディレクトリにあります。 (b.php) – Rufinus