【问题标题】:How to access files Cross-Project in php?如何在php中访问文件跨项目?
【发布时间】:2015-01-14 07:38:59
【问题描述】:

我有 projectA 有 a.php 我有 projectB 有 b.php 我如何从 b.php 访问 a.php。所有这些项目都位于与 HOME 相同的根目录中 请帮忙



    <?php
    class B {
        function getB() {
            return "B";
        }
    }   
<?php
    include '/projectB/B.php';
     class AA {
        function getA() {
            $objB=new B();
            echo $objB->getB();
        }
    }

    $obj=new AA();
    $obj->getA();
    ?>

抛出的错误是 在 C:\wamp\www\projectA\AA.php 中找不到类“B”

【问题讨论】:

    标签: php


    【解决方案1】:

    如果文件 a.php 在另一个目录中,则路径可以是相对的(相对于您当前的文件 a.php 目录)或绝对的(基于您的服务器的绝对文件路径)。

    相对示例:

    <?php 
         include('../a.php'); // one directory back, as the file path is always relative to the file in which include (or require or any of the others) is being called.
    ?>
    

    绝对示例:

    <?php
         include('/path/to/server/root/some/folder/a.php'); // absolute path 
    ?>
    

    希望这会有所帮助。


    更新

    您一直在说“这是错误的”或“它不起作用”,但您确实没有很好地解释您的文件结构。因此,我将假设您的文件夹结构如下所示:

    • 网络根目录
      • 项目A
        • a.php
      • 项目B
        • b.php

    现在,如果你在 a.php 中,你可以像下面这样要求 b.php:

    require_once('../ProjectB/b.php');

    如果你在 b.php 里面,想要包含 a.php,可以如下:

    include_once('../ProjectA/a.php');

    注意,我使用了 include AND require,由您自己研究使用哪个。

    【讨论】:

    • 应该说还有其他的方法,比如require、require_once、include和include_once。要了解这些差异,请阅读 StackOverflow 上的这篇文章:stackoverflow.com/questions/2418473/…
    • 它抛出一个错误提示警告:include(): Failed opening '/projectB/B.php' for include (include_path='.;C:\php\pear') in C:\ wamp\www\projectA\AA.php 在第 2 行
    • 您在评论中使用了绝对路径。 / 表示您从系统根目录启动,例如 Windows 上的“C:”或 linux/unix 上的“/”。尝试“projectB/B.php”或“./projectB/B.php”
    • 感谢它在我给出完整路径时有效,包括 'C:\wamp\www\projectB\B.php';有没有更好的方法可以处理这个问题?我的意思是如果我明天在另一个系统中部署代码,路径就会改变
    • 是的,使用__DIR__ 将生成文件当前所在目录的完整绝对路径。我不明白为什么在相对路径没有麻烦的情况下要使用绝对路径并且不会破裂。另外,请记住,Windows 上的目录分隔符(“\”)与 Linux、Unix 和 OSX 都使用“/”不同。你可以用 PHP 常量“DS”替换你的斜杠
    【解决方案2】:

    只需从 b.php 请求 a.php 这是代码:

    require_once('a.php');

    【讨论】:

      【解决方案3】:

      如果 a.php 和 b.php 在同一个文件夹中:

      在 b.php 中:

      <?php
        include_once(__DIR__ . '../projectA/A.php');
      ?>
      

      __DIR__是b.php文件夹的动态路径。

      http://php.net/manual/en/language.constants.predefined.php

      如果 a 包含在 b.php 中非常重要,请使用 require:

      <?php
        require_once(__DIR__ . '../projectA/a.php');
      ?>
      

      【讨论】:

      • 如果在其他目录,请提供完整路径
      • 绝对不需要__DIR__,因为 include 总是相对于调用它的文件的目录。
      • 说OP使用'require'或'require_once'很重要是错误的,这完全取决于他的场景。
      • 在某些情况下,最好将 DIR 与包含一起使用。写这几封信并没有什么坏处。正如我所说,如果一个文件包含到另一个文件很重要,他必须使用 require,在某些其他情况下使用 include 就足够了。
      • 这两个文件不在同一个文件夹中,它们在不同的项目中。但是两个项目在同一个文件夹中。并且ans不起作用。
      【解决方案4】:

      类仅限于创建它们的“空间”。理论上,你不能异花授粉。

      你有两个选择:

      1) 创建一个单例类(参见Global PHP class in functions?

      2) 从 BB 类扩展 AA 类,示例:

      Class AA extends class B{
         // Yada yada yada
      }
      

      以下两个资源值得一读:

      http://php.net/manual/en/keyword.extends.php

      http://php.net/manual/en/language.oop5.inheritance.php

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多