Php文件功能疑惑:URL或路径

时间:2014-06-04 13:54:52

标签: php

使用file功能,使用网址或路径有什么不同吗?

$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)。

2 个答案:

答案 0 :(得分:2)

所有file()所做的都是读取文件。它旨在从磁盘加载某些东西,但支持PHP提供的任何fopen包装,例如HTTP。

当您将网址传递给file()时,它会从您的网络服务器获取该网址。您的Web服务器将执行您的PHP并返回结果,这是您从file()返回的结果。所以不,你有什么完全不同主要是因为一个涉及Web服务器和PHP,而另一个没有。

不要这样做。请改用require()require_once()

答案 1 :(得分:2)

http://...开头的任何路径都会发出实际的HTTP请求。从本质上讲,它就像您在浏览器中输入该URL一样。如果您在自己的服务器上为脚本执行此操作,则极其无稽之谈,因为:

  • 它需要“走出去”并与自己建立TCP连接
  • 它绑定了另一个Web服务器进程
  • 它增加了另一个单独的PHP进程
  • 它不保留当前PHP进程的上下文
  • 它可能根本无法返回任何内容,因为它只会返回其他脚本echo的任何内容

如果您尝试与其他远程服务器通信,这种情况才有意义。

另一方面,在本地非?id=1文件上使用http://...是不可能的,因为?id=1不是文件名的有效部分(或至少它可能不会做你认为它做的事情。)

您通常想要的是:

require __DIR__ . '/foo.php';

这包括当前脚本中作为PHP代码的其他PHP脚本。你应该定义函数和类,使用自动加载来加载它们并根据需要调用它们,但这是一个非常广泛的正确代码组织主题,我不会在这里讨论。