2

curl在 PHP 中使用来返回 PHP 文件的内容。我想在本地执行此操作,因为我将在同一个脚本中访问多个 PHP 文件,因此直接打开文件会更快。

但是,我希望能够将参数推送到 PHP 文件中(将它们完全视为 Web 上的 PHP 文件,但在本地抓取它们),因为我想将参数推送到脚本中,当我抓取时将生成额外的动态内容它。

如果我在本地调用文件,这可能吗?我尝试使用 file:///,直接调用该文件,但这不会运行在这些文件中找到的 PHP 代码。

有任何想法吗?

编辑

很抱歉造成混淆:-这目前在网络服务器上运行,我目前正在调用 http://(而不是 file:///),因此可以执行这些文件中包含的 PHP。但是,我发现这很慢,因为我正在生成多个 curl() 调用,这些调用实际上是多次调用服务器本身。

4

2 回答 2

5

你可以做这样的伎俩:

function php_to_string($php_file, $new_GET = false, $new_POST = false) {
    // replacing $_GET, $_POST if necessary
    if($new_GET) {
        $old_GET = $_GET;            
        $_GET = $new_GET;
    }
    if($new_POST) {
        $old_POST = $_POST;            
        $_POST = $new_POST;
    }
    ob_start();
    include($php_file);
    // restoring $_GET, $_POST if necessary
    if(isset($old_GET)) {
       $_GET = $old_GET;
    }
    if(isset($old_POST)) {
       $_POST = $old_POST;
    }
    return ob_get_clean();
}

$content = php_to_string('my_file.php');
$content = php_to_string('my_file.php', Array('id'=>23)); // http://localhost/my_fie.php?id=23

但请注意它可能会覆盖您现有的变量,导致错误(例如重复定义)等,因此您可以使用沙盒解决方案

于 2013-01-23T20:36:50.920 回答
1

我相信你会想在你的本地机器上设置一个 web 服务器(例如 Apache),这样你就可以去http://localhost/script.php?param1=foo&param2=bar而不是file:///path/to/script.php. 不同之处在于,当你这样做时file:///,文件只是被打开,但如果你通过 Apache,脚本实际上是被执行的。

至于将参数传递给脚本,请使用查询字符串(例如?param1=foo,等)。

我不知道你为什么要做你正在做的事情,但希望这可以帮助你做到这一点。

于 2013-01-23T20:33:35.427 回答