1

我的网站上有一个页面,可以从表格中提取信息并使用 css 进行格式化。

我找不到将页面按原样保存为文本或 pdf 文件的方法。我找到了一个 pdf 网站,它可以做到这一点http://pdfmyurl.com/但我希望在我自己的网站上做同样的事情,而不需要外部网站。

该网页session确保用户已登录,并且取决于user_id从数据库中提取的数据。澄清一下,我希望用户能够查看此页面。在页面上,我希望有一个"SAVE TO COMPUTER"按钮可以按原样保存该页面。

我发现

<?php

 //Link to download file...
 $url = "savechoice.php";

 //Code to get the file...
 $data = file_get_contents($url);

 //save as?
 $filename = "test.txt";

 //save the file...
 $fh = fopen($filename,"w");
 fwrite($fh,$data);
 fclose($fh);

 //display link to the file you just saved...
 echo "<a href='".$filename."'>Click Here</a> to download the file...";
?>

但这只是将页面保存为文本,包括未执行的 php。我还将 url 更改为完整的 url,尽管由于无法识别会话,运行 PHP 会返回空白。

4

4 回答 4

4

请考虑使用file_put_contents()。还要验证您在服务器中是否具有写入权限。您可以使用is_writable()来做到这一点。

但这只是将页面保存为包含 php.ini 的文本。-> 你想让服务器处理savechoice.php吗?这是完全不同的。当您使用file_get_contents()打开文件时,它会完全按照您在打开文件时看到的方式获取文件。它不会执行该文件。

你需要改变savechoice.php工作方式。如果它是一个有一些输出的脚本,你可以把输出放在一个变量中,你将把它放在你的$data. 例如:

savechoice.php

<?php
echo 'Hello World!';
?>

将其更改为以下内容:

<?php
$echo = 'Hello World!';
?>

在您的其他文件中,您可以在使用require()file_put_contents($echo);调用后简单地使用。savechoice.php

于 2013-03-11T17:20:29.980 回答
1

你可能想要更像这样的东西:

ob_start();
include('savechoice.php');
$text = ob_get_clean();

但实际上,最好的方法是将 savechoice.php 中的代码修改为可作为函数调用,这样您就可以拥有更多类似的内容:

$text = get_choice(...);

相反,适当的逻辑只输出您想要的数据,而不需要 html 包装纸。在几乎所有使用情况下,向您自己的服务器调用 HTTP 请求都是毫无意义的资源浪费,尤其是当您使用会话(尤其是标准的基于文件的会话)时。

于 2013-03-11T17:22:31.743 回答
1

如果要获取文件的输出而不是原始内容,则需要确保文件以 php.ini 执行。

您可以包含它(我看到已经有另一个答案......)或者您可以使用:

$url = "http://localhost/path/to/file/savechoice.php";

使用您的原始代码以确保该文件被网络服务器处理。

于 2013-03-11T17:23:52.353 回答
0

那是因为您正在加载文件,而不是文件的 url。

假设您站点的域是http://www.example.com,并且文件“savechoice.php”位于 Web 根目录中。如果您将 $url 更改为

$url = "http://www.example.com/savechoice.php";

然后将解释文件中的 php,您将看到网页而不是 php.ini。

于 2013-03-11T17:23:13.087 回答