0

我的代码似乎有问题。它从 php 文件创建一个文件,但在包含路径上出现错误。

include('../include/config.php');

$name = ($_GET['createname']) ? $_GET['createname'] : $_POST['createname'];

function buildhtml($strphpfile, $strhtmlfile) {
ob_start();
include($strphpfile);
$data = ob_get_contents();
$fp = fopen ($strhtmlfile, "w");
fwrite($fp, $data);
fclose($fp);
ob_end_clean();
}

buildhtml('portfolio.php?name='.$name, "../gallery/".$name.".html");

问题似乎在这里:

'portfolio.php?name='.$name

有什么办法可以替换它,并且仍然发送变量吗?


这是我在 php 扩展名之后放置 ?name 时得到的错误:

Warning: include(portfolio.php?name=hyundai) [function.include]: failed to open stream: No such file or directory in D:\Projects\Metro Web\Coding\admin\create.php on line 15

Warning: include(portfolio.php?name=hyundai) [function.include]: failed to open stream: No such file or directory in D:\Projects\Metro Web\Coding\admin\create.php on line 15

Warning: include() [function.include]: Failed opening 'portfolio.php?name=hyundai' for inclusion (include_path='.;C:\php\pear') in D:\Projects\Metro Web\Coding\admin\create.php on line 15
4

4 回答 4

1

现在我在对先前答案的评论中看到了您的代码,我想指出几件事

function buildhtml($strhtmlfile) {
    ob_start(); // redundant
    $fp = fopen ($strhtmlfile, "w"); // redundant
    file_put_contents($strhtmlfile,
                      file_get_contents("http://host/portfolio.php?name={$name}")); 
//                                       where does $name come from?? ---^
    close($fp); // also redundant
    ob_end_clean(); // also redundant
}
buildhtml('../gallery/'.$name.'.html');

在 PHP 中和在许多其他语言中一样,您可以以不同的方式做事。你所做的是你采取了三种不同的方式,只遵循了一种(这绝对足够了)。因此,当您使用函数file_put_contents()并且file_get_contents()不需要缓冲区时,这就是ob_函数系列,因为您永远不会读取缓冲区中的任何内容,然后应该使用ob_get_contents(). 您也不需要由 , 创建和使用的文件句柄fopen()fclose()因为您从未使用 or 写入或读取文件fwrite()句柄fread()

如果我猜对了您的功能的目的是将 html 页面复制到本地文件,我的建议如下:

function buildhtml($dest_path, $name) {
    file_put_contents($dest_path,
                  file_get_contents("http://host/portfolio.php?name={$name}"));
}

buildhtml('../gallery/'.$name.'.html', $name);
于 2012-09-16T09:08:46.893 回答
0
file_put_contents($strhtmlfile, file_get_contents("http://host/portfolio.php?name={$name}"))

可以吗?

于 2012-09-16T08:11:42.323 回答
0

输出:

'portfolio.php?name='.$name, "../gallery/".$name.".html";

是:

portfolio.php?name=[your name]../gallery/[your name].html

你确定那是你想要的吗?

于 2012-09-16T08:12:04.247 回答
0

PHP 中的 include/require 语句允许您访问已存储在服务器上的文件中包含的代码

您要实现的目标是包含使用特定参数在该文件中执行代码的输出结果

MrSil 提供的建议示例允许您请求执行这些文件中的代码并提供参数。它向您显示空白页面的原因是因为 file_put_contents '将数据保存到文件'并且 file_get_contents 不回显结果,而是返回它。删除 file_put_contents 调用,并在 file_get_contents 之前的行开头添加一个回声,它应该可以工作。

echo file_get_contents('http://domain.com/file.php?param=1');

作为警告,这种方法会强制执行 2 个单独的 PHP 进程。包含将在第一个进程中执行第二个文件的代码。

要使包含方法起作用,您需要像第一次那样包含文件,但不指定参数。在包含每个文件之前,您需要设置它所期望的参数,例如 $_GET['name'] = $name

于 2012-09-16T08:40:50.397 回答