使用file
函数,使用URL和路径有什么区别?
$my_array = file("http://www.mydomain.com/my_script.php?id=1");
$my_array = file($_SERVER['DOCUMENT_ROOT']."my_script.php?id=1");
我使用的是第一个,但我猜,它依赖于我的服务器互联网连接,因为,有时,尽管脚本被称为(我知道,因为my_script.php插入一行在数据库中)我没有得到响应和$my_array是空的。
我说的对吗?
如果是,使用第二个调用将总是用响应填充$my_array。不会吗?
我可以从传递参数的路径中调用文件,就像我使用URL一样吗?
编辑:非常感谢你的回答,如果这个问题太愚蠢,我很抱歉。我在写别人的代码。他这样做是因为my_script.php也从其他服务器调用。我将尝试使用require
首先准备$_GET变量(有点棘手,但我不想触及my_script.php)。
任何以http://...
开头的路径都会发出实际的HTTP请求。本质上,它会像你在浏览器中输入URL一样。如果您在自己的服务器上为脚本执行此操作,则完全没有意义,因为:
- 它需要"出去"并建立一个TCP连接,到它自己
- 它绑定了另一个web服务器进程
- 它启动另一个单独的PHP进程
- 它不保留当前PHP进程的上下文
- 它可能根本不能返回任何东西,因为它只会返回其他脚本
echo
输出的内容
这只有在你试图与其他远程服务器通信时才有意义。
另一方面,在本地非http://...
文件上使用?id=1
是不可能的,因为?id=1
不是文件名的有效部分(或者至少它可能不像你想象的那样做)。
你通常想要的是:
require __DIR__ . '/foo.php';
这包括当前脚本中的其他PHP脚本作为PHP代码。你应该定义函数和类,使用自动加载来加载它们,并在需要时调用它们,但这是一个相当广泛的主题,我不会在这里深入讨论。
所有file()
所做的就是读取文件。它旨在从磁盘加载某些内容,但支持PHP提供的任何fopen包装器,例如HTTP。
当你传递一个URL给file()
时,它会从你的web服务器获取该URL。您的web服务器将执行您的PHP并返回结果,这就是您从file()
返回的结果。不,两者完全不同,主要是因为其中一个涉及web服务器和PHP,而另一个没有。
不要这样做。使用require()
或require_once()
代替。