我想避免在我的网站上执行任何不必要的 HTTP 请求以提高性能。所以,我想在我的服务器上包含一个本地 PHP,而不使用 cURL。问题是我正在调用的 PHP 需要通过 HTTP GET 传递一些参数。我想保持这种状态,因为我还希望能够从其他地方访问这些 PHP 文件。
这样做的最佳方法是什么?我可以在给它 GET 参数的同时访问本地 PHP 文件的输出吗?
我想避免在我的网站上执行任何不必要的 HTTP 请求以提高性能
include
当您向其提供 HTTP URI 时也会发出 HTTP 请求,因此您可以在服务器上同步执行它而不是客户端的异步包含(例如使用 AJAX 或 iframe),从而使页面加载更慢。
因此,虽然包含可能按预期工作(您想包含输出,对吗?),但它绝对不会加速您的网站。
我正在调用的 PHP 需要通过 HTTP GET 传递一些参数。我想保持这种状态,因为我还希望能够从其他地方访问这些 PHP 文件。
然后在包含它们之前更改这些文件并设置适当的变量。或者更好的是,将其重构为函数。例如,如果您要包含的文件如下所示:
$username = $_GET['username'];
print "User: $username";
然后重构为一个函数并存储在一个单独的文件中:
function PrintUsername($username)
{
print "User: $username";
}
并适当地称呼它:
include('printusername.php');
PrintUsername($_GET['username']);
(您可能想在isset()
这里和那里输入。)现在您可以更改也需要此输出的代码:
include('printusername.php');
PrintUsername($someOtherVariable);
现在您不必依赖 URL 或$_GET
魔术include
,而只需按照它们的意图使用所有功能。
假设您在 linux 机器上,您可以执行脚本并使用以下内容获取输出:
exec ("php myPhpFile.php arg1 arg2 arg3 > myPhpOutput.html");
然后打开输出的文件进行读取。
但是,要使其正常工作(而且很难看!),您需要修改 myPhpFile 并实现一种方法来测试 $_GET 参数。如果没有找到它们,则使用argv加载属性
改进(我在懒惰地思考:))
shell_exec 将输出作为字符串返回。所以
$filecontents = shell_exec("php yourfile.php arg1 arg2 arg3...");
将返回一个php文件的处理输出。
这很丑陋,但有效。
$_GET['foo'] = 1;
$_GET['bar'] = 2;
include '/path/to/file.php';