我有一个全局模板页面,/layout_header.php
以及存储在/aFolder/index.php
中的其他一些文件。
在/layout_header.php
,我有:
<?php
// Reference to scripts and other files
echo "<img src='img/lollipop.png'/>";
echo "<script src='js/move.js'/>";
echo "<a href='aFolder/movement.php'>Click here!</a>";
?>
在/aFolder/index.php
,我有:
<?php
include "../layout_header.php";
?>
现在,/aFolder/index.php
调用/layout_header.php
文件没有问题。不幸的是,由于目录现在已/aFolder
,我面临以下问题:
- 无法查看图像,因为图像现在已链接为
/aFolder/img/lollipop.png
(不存在) - 由于上面列出的原因,无法执行脚本。
- 由于上面列出的原因,网址无效。
我的许多脚本和 css 文件都使用相对路径。换句话说,如果index.php
放在根文件夹中,一切正常。
我应该如何解决子目录中的文件问题?
你可以看到,在所有PHP框架(至少是专业人士)中,变量/常量如APPPATH,BASEPATH等。因此,您需要在项目中定义类似的变量/常量,并根据需要使用它。
<?php
// a.php: assuming this included everywhere at very first line
// and located in root directory
// preferable, define a constant instead of variable, cos it
// may used in functions directly without "global $ROOT";
// for "include"
define('ROOT', __DIR__); // for PHP >= 5.3
define('ROOT', realpath(dirname(__FILE__))); // for PHP < 5.3
// for "src, href" etc
define('HTTP', $_SERVER['SERVER_NAME']); // for local development support i.e foo.com.local
// includes
include ROOT .'/layout_header.php';
include ROOT .'/classes/mailer.php';
include ROOT .'/foo/bar/baz.php';
...
// src,href
printf('<script src="%s/js/move.js" />', HTTP);
printf('<img src="%s/img/lollipop.png" />', HTTP);
print '<a href="'. HTTP .'/aFolder/movement.php">Click here!</a>';
...
?>
始终使用 $_SERVER['DOCUMENT_ROOT']。path/to/file',用于在相对时包含 PHP 文件。
对于图像和脚本文件以及css文件,请使用 yourdomain.com/path/to/file.extension
您是否尝试过使用完整的根而不是相对的。
define('WEB_ROOT', 'http://yourdomain.com/'); // localhost path etc
echo "<img src=".WEB_ROOT."img/lollipop.png'/>";
echo "<script src=".WEB_ROOT."'js/move.js'/>";
echo "<a href='".WEB_ROOT."aFolder/movement.php'>Click here!</a>";
您可以执行许多解决方案:
-
转到配置文件以更改项目的根目录。
-
将索引.php保留到文件夹 aFolder/index 中.php并从它重定向到其他文件
-
更改您的 htacess 文件以进行重定向
-
通过从服务器获取 url 来更改所有路径。
我将采用第二个(复制索引并将其与/layout_header.php 一起放置)从文件夹/索引中删除内容.php并向其添加重定向到其他索引文件:
<?php
header( 'Location: ../index.php' ) ;
?>