php include()来自服务器根目录?

时间:2010-07-16 11:48:13

标签: php apache

我正在从我的WAMP测试环境部署到在线测试......

本地我的包含路径是这样的:

include('C/wamp/www...')

如何在服务器上找到等效路径?

我尝试使用'/'到达root但我收到此错误:

  

警告:   require_once(/test123/mvc/views/txt/index_nav_txt.php)   [function.require-once]:失败了   open stream:没有这样的文件或目录   在   /home/user/public_html/test123/mvc/views/components/st_footer.php   第37行

     

致命错误:require_once()   [function.require]:打开失败   需要   '/test123/mvc/views/txt/index_nav_txt.php'   (include_path中= ':/ usr / lib中/ PHP:在/ usr /本地/ LIB / PHP')   在   /home/user/public_html/test123/mvc/views/components/st_footer.php   第37行

5 个答案:

答案 0 :(得分:4)

你真的需要:

require_once("/home/codlife/public_html/test123/mvc/views/txt/index_nav_txt.php");

请注意/home/codlife/public_html/

的版本

初始/将您带到服务器的根目录,而您的代码位于/home/codlife/public_html/

答案 1 :(得分:3)

你是说

吗?
$_SERVER['DOCUMENT_ROOT']

它基本上为您提供了工作网站目录的完整路径,即c:/ wamp / www /(windows)或/var/www/vhost/domain.com/httpdocs/(linux)

答案 2 :(得分:0)

您可能应该阅读include_path(http://php.net/include_path) - 这通常设置为包含文档根目录(您的网站所在地)并且可以更改,以便您不必重复包含相同的路径

答案 3 :(得分:0)

  

如何在服务器上找到等效路径?

你找不到它 - 你告诉它应该在哪里。不可否认,当您购买托管软件包时,这并不总是实用的(IME通常得到很好的支持并且几乎没有文档)。

首先要注意的是,无论代码在何处/如何托管,您都应该始终使用相对于php include路径上配置的目录的路径(或者相对于最初由浏览器请求调用的PHP脚本 - ''。 '来自错误中引用的include_path的条目) - 绝不是绝对路径。你可以通过以下方式轻松找到它:

<?php
  print ini_get('include_path');
?>

从错误消息中引用的路径判断,它似乎是一个POSIX系统。从FTP或SSH软件看,Web服务器看到的文件系统的根目录可能与root完全不同,但它们可能是相同的。

请注意,如果这是共享主机,那么您可能无法访问将文件放在/ usr / lib / php或/ usr / local / lib / php中 - 因此您唯一的选择是使用相对路径 - 这将变得非常混乱 -

你可以围绕这个做一些聪明的编码 - 但是看看Dokuwiki和phpmyadmin之类的软件包,看看他们如何以可重定位的方式组织包含文件而不依赖于操作php.ini设置。

或者,您可以通过.htaccess覆盖include_path,例如

 php_value include_path ".:/home/codlife/public_html:/usr/lib/php:/usr/local/lib/php"

(这会为你的文档根目录设置一个基本的include_path)

HTH

下进行。

答案 4 :(得分:0)

使用配置文件来存储以下内容:

$application_root = '/home/code_life/public_html/';

在此文件中使用所有特定于环境的变量或常量。在不同的计算机上部署应用程序时,只需更新配置文件。

示例:

您的根应用程序中有一个名为settings with settings.php的文件夹,您可以在其中定义:

define('DIR_ROOT', dirname(dirname(__FILE__)) . '/');

现在,在每台机器上,DIR_ROOT将成为应用程序的根目录,您无需进行任何更改。