要请求面向公众的页面,您只需执行以下操作:
$html = file_get_contents("http://mysite.com/file.php");
但我要请求的文件不是公开可用的页面。有没有办法在不诉诸服务器配置的情况下请求它?
需要明确的是,我不想要 .php 文件的源代码 - 我想在文件中执行 PHP 并将生成的 html 作为字符串获取。
要请求面向公众的页面,您只需执行以下操作:
$html = file_get_contents("http://mysite.com/file.php");
但我要请求的文件不是公开可用的页面。有没有办法在不诉诸服务器配置的情况下请求它?
需要明确的是,我不想要 .php 文件的源代码 - 我想在文件中执行 PHP 并将生成的 html 作为字符串获取。
您可以使用这样的命令行调用来调用 php 文件
$content = shell_exec('php /path/to/your/file.php');
如果该文件不是面向公众的文件,您的第一步是将其放在公众无法访问的位置,例如,不在您的站点公共文件夹中,而是从那里开始。这样,除了驻留在同一服务器上的文件外,没有人能够访问它。
接下来,不是使用file_get_contents()
加载一个url,而是使用exec()
这样执行php脚本
exec('php /path/to/file.php', $output);
print_r($output); // each line of the output is stored in the $output array
有关mroe 信息,请参阅http://php.net/manual/en/function.exec.php
但我要请求的文件不是公开可用的页面。有没有办法在不诉诸服务器配置的情况下请求它?
如果它是一个外部文件,不,没有办法绕过服务器配置。从本质上讲,通过指向file_get_contents()
一个 PHP 文件,您是在告诉 Web 服务器执行它,如果它是用来打印一堆信息的,它就会这样做。如果您尝试访问 .htaccess 密码保护文件,CURL 可能是更好的选择。
这可以通过公开文件来完成,但用密码保护它。然后该页面仍将受到外部世界的保护,但可以使用 file_get_contents() 请求。
在请求页面中:
$html = file_get_contents("http://mysite.com/file.php?password=h29kd8cm28x");
在请求的(现在公开的)页面中:
if ($_GET['password'] != 'h29kd8cm28x') {
die("Access denied!");
} else {
// page contents here
}
然而,这似乎是一个笨拙的解决方案,并且需要额外的工作来防止黑客学习密码。
您需要将 PHP 文件保存在文档根目录或其子文件夹中。假设您从 run.php 调用 call.php:
// call.php
if($_SERVER['REQUEST_URI']=='run.php') { // Or the full path of run.php
// Code here
}
// run.php
$html = file_get_contents("http://sitename.com/call.php");
如果 call.php 应该在文档根目录之外,shell_exec 是一个选项,正如 silly 所提到的。