我知道这个主题已经在 SO 中讨论过,但我无法找到解决方案。
我有assign.php:
$a=1;
Run Code Online (Sandbox Code Playgroud)
要求.php:
require "assign.php";
Run Code Online (Sandbox Code Playgroud)
和 echo.php:
require "require.php"
echo $a;
Run Code Online (Sandbox Code Playgroud)
输出 1. 问题是,当我想从不同位置使用“require.php”而没有重复文件时。例如,
/文件夹/echo.php:
require "../require.php";
echo $a;
Run Code Online (Sandbox Code Playgroud)
不会工作,因为 require.php 试图要求不存在的 /folder/assign.php。
尝试在 require.php 中使用完整的 url:
require "http://site.com/assign.php";
Run Code Online (Sandbox Code Playgroud)
也不会工作,因为代码没有被包含,而是被编译,而且由于 $a 不是全局的,它是 undefiend。
有人告诉我,真的不推荐使用全局变量。
据说使用文件系统完整路径也很危险。
解决办法是什么?我怎样才能确保 require.php 总是为assign.php 寻找正确的路径,无论 require.php 是从哪里包含的?
在require.php你应该使用
require dirname(__FILE__). "/assign.php";
Run Code Online (Sandbox Code Playgroud)
这将通过提供动态生成的完整路径来包含正确的文件。