2

我有一个全局模板页面,/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不幸的是,因为目录是 now /aFolder,所以我面临以下问题:

  • 无法查看图像,因为图像现在链接为/aFolder/img/lollipop.png(不存在)
  • 由于上面列出的原因,无法执行脚本。
  • 由于上述原因,URL 无效。

我的许多脚本和 css 文件都使用相对路径。换句话说,如果index.php放在根文件夹中,一切正常。

我应该如何解决子目录中的文件问题?

4

4 回答 4

7

您可以在所有 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>';
...
?>
于 2013-01-30T17:34:10.690 回答
5

始终使用 $_SERVER['DOCUMENT_ROOT'].'path/to/file' 来包含相对的 php 文件。

对于图像和脚本文件以及 css 文件,请使用 yourdomain.com/path/to/file.extension

于 2013-01-30T17:04:12.997 回答
2

您是否尝试过使用完整的根目录而不是相对目录。

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>";
于 2013-01-30T17:18:15.233 回答
0

您可以执行许多解决方案:

  • 转到您的配置文件以更改项目的根目录。

  • 将 index.php 留在文件夹 aFolder/index.php 中并从它重定向到另一个文件

  • 更改您的 htacess 文件以进行重定向

  • 通过从服务器获取 url 来更改所有路径。

我将采用第二个(复制索引并将其与 /layout_header.php 放在一起)从 aFolder/index.php 中删除内容并添加到另一个索引文件的重定向:

<?php

   header( 'Location: ../index.php' ) ;

?>
于 2013-01-30T17:10:14.357 回答