0

要请求面向公众的页面,您只需执行以下操作:

$html = file_get_contents("http://mysite.com/file.php");

但我要请求的文件不是公开可用的页面。有没有办法在不诉诸服务器配置的情况下请求它?

需要明确的是,我不想要 .php 文件的源代码 - 我想在文件中执行 PHP 并将生成的 html 作为字符串获取。

4

5 回答 5

2

您可以使用这样的命令行调用来调用 php 文件

$content = shell_exec('php /path/to/your/file.php');
于 2013-04-22T06:56:34.660 回答
1

如果该文件不是面向公众的文件,您的第一步是将其放在公众无法访问的位置,例如,不在您的站点公共文件夹中,而是从那里开始。这样,除了驻留在同一服务器上的文件外,没有人能够访问它。

接下来,不是使用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

于 2013-04-22T07:01:56.947 回答
0

但我要请求的文件不是公开可用的页面。有没有办法在不诉诸服务器配置的情况下请求它?

如果它是一个外部文件,不,没有办法绕过服务器配置。从本质上讲,通过指向file_get_contents()一个 PHP 文件,您是在告诉 Web 服务器执行它,如果它是用来打印一堆信息的,它就会这样做。如果您尝试访问 .htaccess 密码保护文件,CURL 可能是更好的选择。

于 2013-04-22T07:15:00.357 回答
-1

这可以通过公开文件来完成,但用密码保护它。然后该页面仍将受到外部世界的保护,但可以使用 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
}

然而,这似乎是一个笨拙的解决方案,并且需要额外的工作来防止黑客学习密码。

于 2013-04-22T06:52:49.457 回答
-1

您需要将 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 所提到的。

于 2013-04-22T07:02:14.527 回答